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