存储服务(OSD)相关

文章目录

1.说明

1.1 介绍

OSD全称Object Storage Device,是负责响应客户端请求并返回具体数据的进程;一个 Ceph 集群一般有多个 OSD;

2. 常用操作

2.1 查看 osd 状态

$ ceph osd stat
5 osds: 5 up, 5 in

状态说明:

  • 集群内(in)
  • 集群外(out)
  • 活着且在运行(up)
  • 挂了且不再运行(down)

说明:

  • 如果 OSD 活着,它也可以是 in 或者 out 集群;如果它以前是 in 但最近 out 了, Ceph 会把其归置组迁移到其他 OSD ;
  • 如果 OSD out 了, CRUSH 就不会再分配归置组给它;如果它挂了( down )其状态也应该是 out ;
  • 如果 OSD 状态为 down 且 in ,必定有问题,而且集群处于非健康状态;

2.2 查看 osd 映射信息

$ ceph osd dump
epoch 4971
fsid 97219550-d917-4154-b745-32bac14f99f2
created 2017-08-31 16:14:26.155920
modified 2017-11-15 13:48:39.834169
flags sortbitwise,recovery_deletes
crush_version 113
full_ratio 0.95
backfillfull_ratio 0.9
nearfull_ratio 0.85
require_min_compat_client jewel
min_compat_client jewel
require_osd_release luminous
pool 1 'rbd' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 2048 pgp_num 2048 last_change 3845 lfor 0/187 flags hashpspool stripe_width 0 application rbd
removed_snaps [1~3,7~8,11~5,17~4,1c~4,21~1]
pool 2 'test_data' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 512 pgp_num 512 last_change 1575 lfor 0/227 flags hashpspool stripe_width 0 application cephfs
removed_snaps [1~3,5~4]
osd.0 up in weight 1 up_from 4959 up_thru 4966 down_at 4789 last_clean_interval [4551,4788) 10.1.1.34:6817/477028 10.1.1.34:6818/477028 10.1.1.34:6819/477028 10.1.1.34:6820/477028 exists,up 1c43b2d1-fc59-4e55-8511-2480964fef41
osd.1 up in weight 1 up_from 4577 up_thru 4966 down_at 4575 last_clean_interval [4521,4574) 10.1.1.34:6825/338609 10.1.1.34:6827/338609 10.1.1.34:6841/338609 10.1.1.34:6844/338609 exists,up 68630ac4-09a4-4b50-9dba-4bbe161bc6b3
osd.2 up in weight 1 up_from 4568 up_thru 4966 down_at 4566 last_clean_interval [4533,4565) 10.1.1.34:6805/337916 10.1.1.34:6806/337916 10.1.1.34:6807/337916 10.1.1.34:6808/337916 exists,up 752ffd2c-6cdc-4377-bbde-b89a5a46f449
osd.3 up in weight 1 up_from 4572 up_thru 4966 down_at 4570 last_clean_interval [4529,4569) 10.1.1.34:6801/338244 10.1.1.34:6802/338244 10.1.1.34:6803/338244 10.1.1.34:6804/338244 exists,up c59c5ef7-6f55-4fe5-9952-4f4c602b4c1a
osd.4 up in weight 1 up_from 4564 up_thru 4966 down_at 4562 last_clean_interval [4537,4561) 10.1.1.34:6809/337796 10.1.1.34:6810/337796 10.1.1.34:6811/337796 10.1.1.34:6812/337796 exists,up d264e02b-3f93-4125-a40b-8e1515158b3c

2.3 查看 osd 目录树

$ ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 200.12276 root default
-3 40.02455 host ceph-xx-osd00
0 hdd 3.63860 osd.0 up 1.00000 1.00000
1 hdd 3.63860 osd.1 up 1.00000 1.00000
2 hdd 3.63860 osd.2 up 1.00000 1.00000
3 hdd 3.63860 osd.3 up 1.00000 1.00000
4 hdd 3.63860 osd.4 up 1.00000 1.00000

2.4 下线 osd

#让编号为0的osd down 掉,此时该 osd 不接受读写请求,但 osd 还是存活的

$ ceph osd down 0
marked down osd.0.

$ ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 200.12276 root default
-3 40.02455 host ceph-xx-osd00
0 hdd 3.63860 osd.0 down 1.00000 1.00000
1 hdd 3.63860 osd.1 up 1.00000 1.00000
2 hdd 3.63860 osd.2 up 1.00000 1.00000
3 hdd 3.63860 osd.3 up 1.00000 1.00000
4 hdd 3.63860 osd.4 up 1.00000 1.00000

2.5 拉起 osd

#让编号为0的osd up 掉,此时该 osd 接受读写请求

$ ceph osd up 0
marked up osd.0.

$ ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 200.12276 root default
-3 40.02455 host ceph-bench-osd00
0 hdd 3.63860 osd.0 up 1.00000 1.00000
1 hdd 3.63860 osd.1 up 1.00000 1.00000
2 hdd 3.63860 osd.2 up 1.00000 1.00000
3 hdd 3.63860 osd.3 up 1.00000 1.00000
4 hdd 3.63860 osd.4 up 1.00000 1.00000

2.6 osd 逐出集群

#将一个 osd 逐出集群,即下线一个 osd,此时可以对该 osd 进行维护
$ ceph osd out 0

2.7 osd 加入集群

#把一个 osd 加入集群,即上线一个 osd
$ ceph osd in 0

2.8 删除 osd

#在集群中删除一个 osd,可能需要先 stop 该 osd,即 stop osd.0
$ ceph osd rm 0

2.9 从 crush map 中删除 osd

#从 crush map 中删除一个 osd
$ ceph osd crush rm osd.0

2.10 删除 host 节点

#在集群中删除一个host节点
$ ceph osd crush rm node1

2.11 查看最大 osd 个数

#查看最大osd的个数,默认最大是4个osd节点
$ ceph osd getmaxosd

2.12 设置最大 osd 个数

#设置最大osd的个数,当扩大osd节点的时候必须扣大这个值
$ ceph osd setmaxosd 60

2.13 设置最大 osd 个数

#设置最大osd的个数,当扩大osd节点的时候必须扣大这个值
$ ceph osd setmaxosd 60

2.14 设置 osd 的 crush 权重

#ceph osd crush set {id} {weight} [{loc1} [{loc2} ...]]

$ ceph osd crush set 3 3.0 host=node4
#或者
$ ceph osd crush reweight osd.3 1.0

2.15 设置 osd 的权重

#ceph osd reweight {id} {weight}
$ ceph osd reweight 3 0.5

2.16 暂停 osd

#暂停后整个集群不再接收数据
$ ceph osd pause

2.17 开启 osd

#开启后再次接收数据
$ ceph osd unpause

2.18 查看 osd 参数配置

#查看某个osd的配置参数
$ ceph --admin-daemon /var/run/ceph/ceph-osd.2.asok config show | less

2.19 osd 打摆子

#我们建议同时部署公网(前端)和集群网(后端),这样能更好地满足对象复制的容量需求。
#然而,如果集群网(后端)失败、或出现了明显的延时,同时公网(前端)却运行良好, OSD 现在不能很好地处理这种情况。
#这时 OSD 们会向监视器报告邻居 down 了、同时报告自己是 up 的,我们把这种情形称为打摆子( flapping )。
#如果有东西导致 OSD 打摆子(反复地被标记为 down ,然后又 up ),你可以强制监视器停止。 主要用于osd抖动的时候

$ ceph osd set noup # prevent OSDs from getting marked up
$ ceph osd set nodown # prevent OSDs from getting marked down

#这些标记记录在 osdmap 数据结构里:
ceph osd dump | grep flags
flags no-up,no-down

#下列命令可清除标记:
ceph osd unset noup
ceph osd unset nodown

2.20 osd 动态修改参数

#修改所有osd参数,重启失效,需要写到配置文件中持久化
$ ceph tell osd.* injectargs "--rbd_default_format 2 "

2.21 查看延迟情况

#主要解决单块磁盘问题,如果有问题应及时剔除osd。统计的是平均值
#fs_commit_latency 表示从接收请求到设置 commit 状态的时间间隔
#通过 fs_apply_latency 表示从接受请求到设置为 apply 状态的时间间隔

$ ceph osd perf
osd commit_latency(ms) apply_latency(ms)
0 0 0
1 37 37
2 0 0

2.22 主亲和性

#Ceph 客户端读写数据时,总是连接 acting set 里的主 OSD (如 [2, 3, 4] 中, osd.2 是主的)。
#有时候某个 OSD 与其它的相比并不适合做主 OSD (比如其硬盘慢、或控制器慢),最大化硬件利用率时为防止性能瓶颈(特别是读操作),
#你可以调整 OSD 的主亲和性,这样 CRUSH 就尽量不把它用作 acting set 里的主 OSD 了。

#ceph osd primary-affinity <osd-id> <weight>

$ ceph osd primary-affinity 2 1.0#主亲和性默认为 1 (就是说此 OSD 可作为主 OSD )。此值合法范围为 0-1 ,其中 0 意为此 OSD 不能用作主的,#1 意为 OSD 可用作主的;此权重小于 1 时, CRUSH 选择主 OSD 时选中它的可能性低

2.23 提取 crush 图

#提取最新crush图
#ceph osd getcrushmap -o {compiled-crushmap-filename}

$ ceph osd getcrushmap -o /tmp/crush

#反编译crush图
# crushtool -d {compiled-crushmap-filename} -o {decompiled-crushmap-filename}
$ crushtool -d /tmp/crush -o /tmp/decompiled_crush

2.24 注入 crush 图

#编译crush图
#crushtool -c {decompiled-crush-map-filename} -o {compiled-crush-map-filename}

$ crushtool -c /tmp/decompiled_crush -o /tmp/crush_new
#注入crush图
# ceph osd setcrushmap -i {compiled-crushmap-filename}
$ ceph osd setcrushmap -i /tmp/crush_new

2.25 停止自动重均衡

#你得周期性地维护集群的子系统、或解决某个失败域的问题(如一机架)。如果你不想在停机维护 OSD 时让 CRUSH 自动重均衡,提前设置 noout
$ ceph osd set noout

2.26 取消停止自动均衡

#跟ceph osd set noout相反的操作
$ ceph osd unset noout

2.27 查看分区情况

ceph-disk list