[03]Ceph常用命令


1.pool相关 创建pool one,pg num,pgsnum为512

ceph osd pool create one 512 512

删除pool one ceph osd pool delete one one --yes-i-really-really-mean-it

设置pool one副本为2 ceph osd pool set one size 2

2.CRUSH Map创建 ceph osd crush rename-bucket default bfdceph # rename default bucket or add bucket ceph osd crush add-bucket rack01 rack # add rack ceph osd crush move rack01 root=bfdceph # move rack to bucket ceph osd crush add-bucket osd1 host # add host ceph osd crush move osd1 rack=rack01 # move host to rack ceph osd crush add osd.1 1.00000 root=bfdceph rack=rack01 host=osd1 # add osd to host

3.管理ceph集群 ceph osd unset noout

设置服务心跳 ceph tell osd.* injectargs '--osd_heartbeat_interval 2' 查看服务心跳 ceph-osd --show-config | grep osd_heartbeat_interval 设置noout ceph osd set noout 取消noout ceph osd unset noout 删除osd ceph osd crush remove osd.ID ceph auth del osd.ID ceph osd rm osd.ID 4.osd 维护步骤 ceph osd set noout stop ceph-osd-all restart osd node osd node start ceph osd unset noout

5.crush map 编辑(危险) 0.优化 CRUSH map ceph osd crush tunables optimal 1.获得CRUSH maps ceph osd getcrushmap -o crushmap.bin 2.反编译 CRUSH maps crushtool -d crushmap.bin -o crushmap.txt

反编译完成后,可以修改crush map

3.编译新 CRUSH maps crushtool -c crushmap.txt -o crushmap.bin.new

4.CRUSH map 测试

crushtool -i crushmap.bin.new --test --tree

5.应用新 CRUSH maps ceph osd setcrushmap -i crushmap.bin.new

6.集群信息查询 查看集群整体状态

ceph -s 查看集群整体实时状态

ceph -w 查看集群健康状态

ceph health 查看集群详细健康状态

ceph health detail 查看集群mon状态

ceph mon stat 查看集群osd状态

ceph osd stat 查看集群pg状态

ceph pg stat 查看集群osd分布

ceph osd tree 查看集群存储池状态

ceph osd pool stats rbd 查看存储中对象

rados ls -p data |head 查看对象分布状况

ceph osd map data 100000003ee.0002a0a9 查看集群存储空间

ceph df 查看mon map

ceph mon dump 查看osd map

ceph osd dump 7.rbd常用命令 创建rbd映像: rbd create {image-name} --size {megabytes} --pool {pool-name} rbd create test --size 10240 --pool data-------在存储池data中创建名为test大小10G的rbd映像。 查看存储池包含的映像 rbd ls {pool-name} rbd ls data---------------查看data池中的rbd映像 test 查看映像详细信息 rbd --image {image-name} --pool {pool-name} info rbd --image test --pool data info--------------------查看data池中test映像的详细信息 rbd image 'test': size 10240 MB in 2560 objects order 22 (4096 kB objects) block_name_prefix: rb.0.3013.6b8b4567 format: 1 改变映像大小 rbd resize --image {image-name} --size {size} --pool {pool-name} rbd resize --image test --size 20480 -p data Resizing image: 100% complete...done. 删除块设备映像 rbd rm {image-name} --pool {pool-name} rbd rm test --pool data 将rbd映像映射成客户端的块设备 rbd map {image-name} --pool {pool-name} --name client.admin rbd map test --pool data --name client.admin 查看块设备是否生成成功 ls /dev/rbd rbd/ rbd1 块设备已成功生成,接下来就可以格式化挂载使用了 rbd unmap /dev/rbd1------------------解除映射前停止该块设备的挂载使用 8.迁移Ceph journals到新SSD 我们在维护ceph集群过程中,可能会遇到将ceph的journals转换到ssd分区上。下面提供一个脚本来做这个事情:

#!/bin/bash

journal_device="/dev/sdg"
osds=(0 1 2 3 4)
num_journal_part=${#osds[@]}
i=5
while [ $i -le $num_journal_part ]
do
 disk_id=`uuidgen`
 sgdisk --new=${i}:0:+5120M --change-name="${i}:ceph journal" --partition-guid=${i}:${disk_id} --typecode=${i}:45b0969e-9b03-4f30-b4c6-b4b80ceff106 --mbrtogpt ${journal_device}
 partx -a $journal_device
 service ceph stop osd.${osds[$i-1]}
 ceph-osd -i ${osds[$i-1]} --flush-journal
 ln -sf /dev/disk/by-partuuid/${disk_id} /var/lib/ceph/osd/ceph-${osds[$i-1]}/journal
 echo $disk_id > /var/lib/ceph/osd/ceph-${osds[$i-1]}/journal_uuid
 ceph-osd -i ${osds[$i-1]} --mkjournal
 service ceph start osd.${osds[$i-1]}
 i=$[$i+1] 
done

9.ceph osd 更换磁盘步骤 故障机: ceph osd set noout 停止对应盘的osd 进程 systemctl status ceph-osd@xxxx.service systemctl stop ceph-osd@xxxx.service

虽然osd.1的服务已停止,然而他任然被标记为IN(集群中)状态。只要他的状态还是IN,Ceph集群就不会为他触发数据恢复。默认情况下,ceph集群需要5分钟来将一个DOWN状态的磁盘标记为OUT状态,然后开始数据恢复。可以手工将故障OSD标记为OUT。一旦该OSD被标记为OUT,ceph集群会为该OSD上的PG启动恢复过程。 当某个PG对应的OSD set中有一个OSD被标记为down时(假如是Primary被标记为down,则某个Replica会成为新的Primary,并处理所有读写 object请求),则该PG处于active+degraded状态,也就是当前PG有效的副本数是N-1。 过了5秒之后,假如还是无法连接该OSD,则它被标记为out,Ceph会重新计算PG到OSD set的映射(当有新的OSD加入到集群时,也会重新计算所有PG到OSD set的映射),以此保证PG的有效副本数是N。 ceph osd out osd.xxx ceph status

删除故障osd 从crushmap中删除 ceph osd crush rm osd.1 ceph auth del osd.1 ceph osd rm osd.1

拔掉坏的磁盘,插入新的硬盘

重新初始化对应的磁盘即可。 ceph-deploy disk list ceph-xxxx ceph-deploy disk zap ceph-xxxx:sdx ceph-deploy --overwrite-conf osd create ceph-xxx:sdx

此后,系统将自动均衡数据。 ceph osd unset noout