ceph常用运维命令

systemctl管理命令[host级别]

    systemctl stop|start ceph.target    #启动|停止所有ceph进程
    systemctl start ceph-mon.target     #启动mon进程
    systemctl start ceph-osd.target     #启动所有osd进程
    systemctl start ceph-osd@1.service  #启动所有osd.1进程
    systemctl list-units -t service | grep ceph      #查看该host上启动了哪些ceph服务
    systemctl cat ceph-mon@pve-ceph01.service           #查看mon的systemd服务启动文件
    systemctl edit ceph-mon@pve-ceph01.service --full   #编辑mon的systemd服务启动文件(必须加上--full 否则打开是空白)

root@pve-ceph01:~# systemctl list-units -t service | grep ceph
  ceph-crash.service                 loaded active running Ceph crash dump collector
  ceph-mgr@pve-ceph01.service        loaded active running Ceph cluster manager daemon
  ceph-mon@pve-ceph01.service        loaded active running Ceph cluster monitor daemon
  ceph-osd@0.service                 loaded active running Ceph object storage daemon osd.0
  ceph-osd@1.service                 loaded active running Ceph object storage daemon osd.1
  ceph-osd@2.service                 loaded active running Ceph object storage daemon osd.2

ceph集群运行状态查看及日志查看

    ceph -v     #查看集群版本
    ceph -w     #监控集群的实时更改|查看正在操作的动作
    ceph osd stat   #查看osd状态
    ceph mon stat   #查看mon状态
    ceph mds stat   #检查MDS状态
    ceph osd find osd.0         #更加osd daemon查询节点ip和节点名称
    ceph auth get client.admin  #查看用户client.admin授权信息
    ceph auth list  #查看ceph集群中的认证用户及相关的key
    ceph mon dump   #查看你ceph映射信息 //查看mon的信息

ceph用户管理

创建用户并导出keyring文件
    #为ceph创建一个test用户并为test用户创建一个密钥,把密钥保存到/etc/ceph目录下:
    ceph auth get-or-create client.test mds ‘allow’ osd ‘allow ’ mon ‘allow ’ > /etc/ceph/ceph.client.test.keyring
    或
    ceph auth get-or-create client.test mds ‘allow’ osd ‘allow ’ mon ‘allow ’ -o /etc/ceph/ceph.client.test.keyring

查看所有用户及key 以及相关权限
    ceph auth list

获取指定用户test的key
    ceph auth get-or-create client.test     #直接查看key
    ceph auth get-or-create client.test -o /etc/ceph/ceph.client.test.keyring    #导出key到文件

mon相关操作

    ceph mon stat           #查看mon状态,mon是哪些
    ceph mon remove node1           #删除一个mon节点  ceph-deploy mon destroy {host-name [host-name]...}
    ceph mon add node1 node1_ip     #添加一个mon节点  ceph-deploy mon create {host-name [host-name]...} 

    mon节点的/var/lib/ceph/mon/ceph-node2/store.db文件内容一致,添加mon注意先改配置目录配置文件,再推送到所有节点
    ceph-deploy --overwrite-conf config push  node1 node2 node3

调整osd.0的日志级别(我就没测出过现象,下面两条是我编的,多半不对)

    ceph tell osd.0 injectargs --debug-osd 0/5
    #ceph tell mon.pve-ceph01 injectargs --debug-mon 0/5
    #ceph tell mgr.pve-ceph01 injectargs --debug-mgr 0/5

ceph集群维护常用的标识组合

1、维护前开启标志
    ceph osd set noout
    ceph osd set nobackfill
    ceph osd set norecover

    #维护完成关闭标志
    ceph osd unset noout
    ceph osd unset nobackfill
    ceph osd unset norecover

2、另外维护常用的标志
    ceph osd set noout
    ceph osd set noscrub
    ceph osd set nodeep-scrub

    #维护完成关闭标志
    ceph osd unset noout
    ceph osd unset noscrub
    ceph osd unset nodeep-scrub

pveceph相关命令介绍

创建mon
    pveceph mon create      #新版本的pve,在创建mon的同时也创建了mgr(未亲自验证)

创建osd
    pveceph osd create /dev/sdb    #创建普通不带日志盘的osd
    pveceph osd create /dev/sdc -db_dev /dev/nvme0n1 -db_dev_size 286    #创建带nvme日志盘并指定日志盘大小286G的osd

销毁osd.1
    pveceph osd destroy 1 -cleanup

pve命令行安装指定版本的ceph
    #pveceph instal             #安装ceph,或者用下面指定版本安装ceph
    pveceph install --version luminous      #安装指定版本的ceph
    pveceph init --network 192.168.30.0/24  #初始化ceph存储网络(执行后是没有输出的,可以查看/etc/ceph/ceph.conf配置文件,发现其变化)

pve创建集群与加入集群(还未测试)
    pvecm create <cluster_name>

    pvecm add <cluster_hostname>  #登录其他节点,加入集群(先配置好/etc/hosts)
    pvecm status        #查看集群状态

pool相关操作

    #创建pool|类型|删除等
    ceph osd pool create volumes 128 128 size 3    #创建名为volumes的pool,指定pg为128,pgp为128,并设置副本数为3
    ceph osd pool application enable volumes rbd   #指定volumes池类型为rbd
    rbd pool init volumes                          #创建rbd类型的volumes池后需要初始化池

    ceph osd pool application get volumes          #查看pool的类型
    ceph osd pool application enable volumes cephfs --yes-i-really-mean-it  #定义pool池的类型,可以定义多个类型,rbd,rgw,cephfs可选

    ceph osd pool rename volumes volumes_new       #重命名pool

    ceph osd pool get volumes nodelete             #获取pool是否可以被删除(true表示该pool不可以删除)
    ceph osd pool set volumes nodelete false       #设置pool,让其可以被删除
    ceph osd pool delete volumes volumes --yes-i-really-really-mean-it  #删除pool(要指定两次pool的名字,外加--yes-i-really-really-mean-it)

    #查看与设置|更改pool的副本数
    ceph osd lspools            #查看有哪些pool
    ceph osd pool ls detail     #查看有哪些pool,并罗列其详细信息(副本数,rule,pool_id,pg_num,pgp_num,type等)
    ceph osd pool get volumes all                 #获取pool的所有参数
    ceph osd pool set volumes size 3              #指定副本为3,必须提供该值才能接受IO请求(默认为2)
    ceph osd pool set volumes min_size 2          #设置volumes池能接受写操作的最小副本为2
    ceph osd pool get volumes size                #获取volumes池的副本数

    #查看pool的pg和pgp数量
    ceph osd pool get <pool-name> pg_num
    ceph osd pool get <pool-name> pgp_num

    #调整pool的pg和pgp数量
    ceph osd pool set <pool-name> pg_num <value>
    ceph osd pool set <pool-name> pgp_num <value>

    #pool的配额quota相关(当对象和容量达到配额,写入操作将被阻塞,0表示不受=受限)
    ceph osd pool get-quota volumes                     #查看pool的配额
    ceph osd pool set-quota volumes max_objects 10K     #设置最大存储对象10K
    ceph osd pool set-quota volumes max_bytes 2G        #设置最大可用存储容量为2G
    ceph osd pool set-quota volumes max_objects 0       #取消对象配额
    ceph osd pool set-quota volumes max_bytes 0         #取消存储配额

    # 查看pool的near_full_ratio(默认0.85  85%)、full_ratio(默认0.95 95%)
    ceph osd pool get {pool-name} near_full_ratio
    ceph osd pool get {pool-name} full_ratio

    # 修改pool的near_full_ratio、full_ratio
    ceph osd pool set {pool-name} near_full_ratio {value}
    ceph osd pool set {pool-name} full_ratio {value}

crush 和 crush rule相关操作

    ceph osd crush --help               #查看帮助用法
    ceph osd crush rule ls                          #查看现有crush rule规则
    ceph osd crush rule rm <rule_name>                #删除rule规则
    ceph osd crush rule rename <srcname> <dstname>  #rule规则重命名

    ceph osd crush rm pve-ceph02        #将pve-ceph02从ceph集群中剔出去

创建数据中心:JXCM01
    ceph osd crush add-bucket JXCM01 datacenter

创建机房:IDC01
    ceph osd crush add-bucket IDC01 room

创建机架:RACK-F12
    ceph osd crush add-bucket RACK-F12 rack

把机房IDC01 移动到数据中心JXCM01 下
    ceph osd crush move IDC01 datacenter=JXCM01

把机架RACK-F12移动到机房IDC01下
    ceph osd crush move RACK-F12 room=IDC01

把主机ceph-pve01 移动到机架rack-f12下(JXCM01/IDC01/RACK-F12)
    ceph osd crush move ceph-pve01 rack=RACK-F12
    #ceph osd crush move ceph-pve01 datacenter=JXCM01 room=IDC01 rack=RACK-F12

# 创建名为new的room
    ceph osd crush add-bucket new room
# 创建名为S02的rack
    ceph osd crush add-bucket S02 rack

# 将host 为QS0706 移动到  room=new rack=S02
    ceph osd crush move QS0706 room=new rack=S02

创建pool的rule,并设置故障域
    ceph osd crush rule create-replicated rule-hdd default host hdd     #为class 类型为 hdd的硬盘创建一个 名为 rule-hdd的 rule策略,故障域为host(创建HDD rule)
    ceph osd crush rule create-replicated rule-ssd default host ssd     #为class 类型为 ssd的硬盘创建一个 名为 rule-ssd的 rule策略,故障域为host(创建SSD rule)

为pool 应用crush rule规则(若pool已应用了rule,就是修改rule)
    #ceph osd pool set <poolname> crush_rule <rule-name>
    ceph osd pool set volumes-ssd crush_rule rule-ssd                   #为名为volumes-ssd的pool应用 名为rule-ssd的crush规则
    ceph osd pool create volumes-ssd 32 32 replicated rule-ssd          #或者是在创建pool的时候指定crush rule 创建名为volumes-ssd的pool,并应用rule-ssd规则

更改osd的 class 类型
    ceph osd crush rm-device-class osd.9        #更改class前,先必须删除原本的class
    ceph osd crush set-device-class ssd osd.9   #class类型可以是hdd,ssd,sas,nvme
    #ceph osd crush set-device-class ssd 9      #效果同上
    #ceph osd crush set-device-class ssd osd.0 osd.1 osd.4 osd.5        #一次性设置多个osd
    #ceph osd crush set-device-class ssd 0 1 4 5

查看crush rule(名为 rule-ssd)的详细信息
    ceph osd crush rule dump rule-ssd

rbd管理常用命令

rbd map方式介绍(分为 RBD Kernel Module 和 RBD-NBD  )
    1、RBD Kernel Module (据说更新速度赶不上librbd提供的功能)
    2、RBD-NBD               (基于Network Block Device(nbd)实现,比较新比较完善)

    #下面是基于RBD-NBD的map方式
    yum install rbd-nbd -y
    rbd nbd map volumes/kvm003-system
    rbd-nbd list-mapped                     #查看已映射的nbd设备

    #下面是基于RBD Kernel Module的map方式
    rbd map volumes/kvm003-system       #将rbd块设备映射到本地,路径为/dev/rbdxx,或者下面的路径
    mkfs.xfs /dev/rbd/volumes/kvm003-system    #格式化方式,挂载也可以使用这个路径
    mount /dev/rbd/volumes/kvm003-system /tmp/    #挂载方式
    rbd unmap volumes/kvm003-system   #取消rbd块设备的映射
    rbd showmapped                      #linux系统查看已经map的镜像

    rbd create volumes/kvm003-system --size 10G     #创建大小为10G的rbd块设备
    rbd rm volumes/kvm003-system          #rbd块设备的删除,注意大文件,时间会很长,建议   rbd rm a.img ; echo "OK " > 123.txt 

    rbd ls [pool_name]           #列出指定池内的所有镜像
    rbd status volumes/kvm003-system     #查看那些客户端还在使用该rbd镜像(是否被挂载)
    rbd info volumes/kvm003-system        #查看镜像的具体信息
    rbd du volumes1/kvm7010-system      #查看rbd块设备的置备大小
    rbd diff volumes1/kvm7010-system | awk '{SUM += $2} END { print SUM/1024/1024 "MB" }'      #查看某个镜像或实例占用大小

    rbd cp volumes/kvm003-system volumes/kvm003-system02    #同pool复制rbd块设备
    rbd cp volumes/kvm003-system volumes-ssd/kvm003-system  #跨pool复制rbd块设备

    rbd rename volumes/kvm003-system volumes/test   #rbd块设备改名
    rbd mv volumes/kvm003-system volumes/test1      #rbd块设备改名移动(不支持跨pool移动)(其实就是改名)

    rbd import ./kvm003.raw volumes/kvm003  #导入rbd镜像到ceph存储
    rbd export volumes/kvm003 ./kvm003.raw  #导出rbd镜像到本地
    rbd export  volumes/kvm7974-data1681876313637@kvm7974-snap1681876611780 ./456.raw  #导出rbd镜像的快照到本地

    rbd resize volumes/kvm003-system --size 15G                 #rbd镜像扩容到15G,并使用xfs_growfs刷新文件系统 xfs_growfs -d /dev/xxx
    rbd resize volumes/kvm003-system --size 12G --allow-shrink  #rbd镜像缩容到12G(必须加 --allow-shrink) 

#快速定位那个rbd块设备消耗io(查看哪个虚拟机io高)(ceph 14版本后加的功能)
    rbd perf image iostat volumes1
    rbd perf image iotop volumes1       #可以使用 “左右箭头” 指定write ops、read ops、write bytes、read bytes、write latency 进行排序

root@pve-ceph01:~# rbd info volumes/kvm003-system   #查看rbd块设备的信息
rbd image 'kvm003-system':
    size 12 GiB in 3072 objects                #大小是12G,被分成3072个对象
    order 22 (4 MiB objects)                   #每个对象大小为4M
    snapshot_count: 0
    id: 60a5b13341c4
    block_name_prefix: rbd_data.60a5b13341c4   #命名格式
    format: 2                                  #指定磁盘格式,raw裸磁盘。qcow和qcow2支持更丰富的特性(精简置备)
    features: layering, exclusive-lock, object-map, fast-diff, deep-flatten    #特性
    op_features: 
    flags: 
    create_timestamp: Sun Nov 13 21:55:34 2022
    access_timestamp: Sun Nov 13 21:55:34 2022
    modify_timestamp: Sun Nov 13 21:55:34 2022

rbd快照管理

对kvm003-system创建快照
    rbd snap create volumes/kvm003-system@snap01

查看image是否有镜像快照
    rbd du volumes/kvm003-system
    rbd snap ls volumes/kvm003-system

回滚快照
    rbd snap rollback volumes/kvm003-system@snap01  #注意回滚前需要umount 和 rbd unmap

删除快照
    rbd snap rm volumes/kvm003-system@snap01        #删除该image的指定快照
    rbd snap purge volumes/kvm003-system            #删除该image的所有快照
    #若删除快照时报错 “librbd: removing snapshot from header failed: (16) Device or resource busy” 可能需要取消快照保护
    rbd snap unprotect volumes/kvm003-system@snap01     #取消快照保护后再执行删除

osd的相关操作

# 查看指定host的osd进程id
    ceph osd ls-tree host001

    ceph osd df                     #查看osd的用量,包含的pg数,权重等
    ceph osd df tree                #以树状形式显示,包含了所在的host,rack,datacenter等
    ceph osd df tree pve-ceph01     #显示指定host的osd情况
    ceph osd find 5                 #查看指定的osd.5在那个host上,及其他信息
    ceph osd scrub 5                #对osd.5进行手动清洗,注意:清洗是为了检查osd缺陷和文件系统错误,正确的清洗策略很重要

    ceph quorum_status          #报告集群当前法定人数情况,若集群因mon挂了导致故障可由此排查
    ceph report                 #以json格式,报告集群当前的全部状态,输出信息非常详细,排查没有头绪时可以试试这个

    ceph daemon osd.1 config show   #查看osd.1的所有配置情况
    ceph daemon /var/run/ceph/ceph-osd.1.asok config show   #查看osd.1的详细配置信息[查看指定osd的asok的配置](同上)

    ceph tell osd.49 injectargs '--osd_memory_target 2147483648'      #实时生效,对指定osd进行内存限制(单位:字节,这里是2GB,默认是4GB)
    ceph daemon osd.49 config set osd_memory_target 2147483648          #同上实时生效。对指定osd进行内存限制
    ceph tell osd.* injectargs '--osd_memory_target 2147483648'           #对所有osd 进行内存限制
    ceph config set osd.49 osd_memory_target 2147483648                 #同上,对指定osd进行内存限制,(重启osd 进程不失效,重启host会失效)
    for osd in $(ceph osd ls-tree $HOSTNAME); do ceph tell osd.$osd injectargs --osd_memory_target 2147483648; done     #对当前host上运行的osd进行内存限制

    ceph tell osd.* heap release                #通知所有osd将可以释放的内存释放给系统

    ceph daemon osd.2 dump_historic_ops         #调查指定osd的op处理情况,诊断延时的瓶颈(输出太多了看不懂)
    ceph daemon osd.x dump_ops_in_flight        #调查指定osd的性能问题

pg相关操作

pg信息查询
    ceph pg stat                #查看pg概要状态信息
    ceph pg dump                #查看pg组的映射信息
    ceph pg <pgid> query          #查询指定pg当前的状态(json格式返回一大堆)
    ceph pg map <pgid>                #查看pg在哪些osd上(一行文本返回)
    ceph pg ls-by-osd osd.0                         #查看某个osd上所有pg信息
    ceph pg ls-by-pool volumes                      #查看指定pool(volumes)中包含哪些pg
    ceph pg ls-by-primary osd.0                     #查看指定osd上的有哪些pg分布,(查看osd.0 是哪些pg的主osd)
    ceph pg dump_stuck inactive|unclean|stale       #查看异常状态下的pg

手动深度scrub pg
    ceph pg deep-scrub <pgid>

手动修复pg
    ceph pg repair <pgid>

    ceph osd primary-temp <pgid> <osdname>          #修改指定pg的主osd    示例:ceph osd primary-temp 2.2 osd.7  (测试没效果,不成功)

    ceph pg <pgid> mark_unfound_lost revert       #恢复一个丢失的pg
    ceph pg <pgid> mark_unfound_lost delete           #删除处于unfound的指定pg
    ceph osd force-create-pg <pgid>  --yes-i-really-mean-it      # 重建pg

pg状态为stale+down,将某个pg从某个osd导出并导入到指定osd(pg迁移)
    #先将要导出的pg所在的osd进程停止掉(不停止会出错)
    systemctl stop ceph-osd@0.service

    #导出
    ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0/ --type bluestore --pgid 2.2 --op export --file 2.2data

    #将这个导出的pg数据再导入到osd.1和osd.5
    ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-1/ --type bluestore --pgid 2.2 --op import --file 2.2data
    ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-5/ --type bluestore --pgid 2.2 --op import --file 2.2data

当有pg卡住,状态处于 remapped+incomplete 时,可以考虑将这个pg在卡住的osd上删除
    systemctl stop ceph-osd@0.service
    ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-1/ --type bluestore --pgid 2.2 --op remove --force

修复pg丢失的对象
    #诊断丢失的object对象
    ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-5/ --op fix-lost --dry-run
    #修复丢失的object对象
    ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-5/ --op fix-lost

查看pg在osd中分布数量,绝对数量差

root@pve-ceph04:~# ceph osd getmap -o thisosdmap

root@pve-ceph04:~# osdmaptool --test-map-pgs --pool 2 ./thisosdmap      #这个2 是pool的id
osdmaptool: osdmap file './thisosdmap'
pool 2 pg_num 32
#osd    count   first   primary c wt    wt
osd.0   10  5   5   0.0292969   1
osd.1   10  4   4   0.0292969   1
osd.2   9   2   2   0.0292969   1
osd.3   5   2   2   0.0292969   1
osd.4   8   4   4   0.0292969   1
osd.5   5   1   1   0.0292969   1
osd.6   9   4   4   0.0292969   1
osd.7   8   0   0   0.0292969   1
osd.8   9   5   5   0.0292969   1
osd.9   9   2   2   0.0292969   1
osd.10  7   2   2   0.0292969   1
osd.11  7   1   1   0.0292969   1
 in 12
 avg 8 stddev 1.63299 (0.204124x) (expected 2.70801 0.338502x))
 min osd.3 5
 max osd.0 10
size 3  32

ceph-kvstore-tool工具

    #ceph-kvstore-tool工具是用来获取存放在leveldb或者rocksdb数据库中的元数据,并且还能进行配置(就像是对离线后的osd操作osd map一样)

    #1、先确定是leveldb还是rocksdb
    cat /var/lib/ceph/mon/ceph-pve-ceph01/kv_backend    #输出rocksdb

    #2、先关闭mon,否则会有锁,查看不了
    systemctl stop ceph-mon@pve-ceph01.service

    #查看rocksdb里面的记录
    ceph-kvstore-tool rocksdb /var/lib/ceph/mon/ceph-pve-ceph01/store.db/ list
    ceph-kvstore-tool rocksdb /var/lib/ceph/mon/ceph-pve-ceph01/store.db/ list |awk '{print $1}'|uniq #查看mon数据库中都有哪些表项
    ceph-kvstore-tool rocksdb /var/lib/ceph/mon/ceph-pve-ceph01/store.db/ list |grep osdmap |head -10   #查看其中的osdmap表项

性能测试(rados是ceph自带的对带宽和性能的全面测试工具)

    #对volumes池写10秒测试
    rados bench -p volumes 10 write --no-cleanup

    #顺序读10s速率测试
    rados bench -p volumes 10 seq

    #随机读10s速率测试
    rados bench -p volumes 10 rand
声明:本文为原创,作者为 辣条①号,转载时请保留本声明及附带文章链接:https://boke.wsfnk.com/archives/979.html
谢谢你请我吃辣条谢谢你请我吃辣条

如果文章对你有帮助,欢迎点击上方按钮打赏作者

最后编辑于:2023/9/14作者: 辣条①号

现在在做什么? 接下来打算做什么? 你的目标什么? 期限还有多少? 进度如何? 不负遇见,不谈亏欠!

暂无评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

arrow grin ! ? cool roll eek evil razz mrgreen smile oops lol mad twisted wink idea cry shock neutral sad ???

文章目录