文章目录
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
如果文章对你有帮助,欢迎点击上方按钮打赏作者
暂无评论