六、RBD块存储

一、创建存储池

格式: ceph osd pool create pool名称 pg数量 pgp
pgp就是pg对应的osd排列组合。一般情况下,存储池的pg和pgp的数量设置相等
默认是3副本方式,可以指定为纠删码、或者调整副本数量

创建pool(pg和pgp数量可以通过https://ceph.com/pgcalc/计算出最佳设置数量)
ceph osd pool create ceph-demo 64 64
查看pool内pg_num和pgp_num、size(副本数)
ceph osd pool get ceph-demo pg_num
ceph osd pool get ceph-demo pgp_num 
ceph osd pool get ceph-demo size

调整副本数为2
ceph osd pool set ceph-demo size 2

调整pg_num、pgp_num
ceph osd pool set ceph-demo pg_num 128
ceph osd pool set ceph-demo pgp_num 128
二、创建rbd

1、创建rbd
格式:
rbd create -p (pool名称) --image (rbd image名称) --size (rbd块大小)
或者
rbd create pool名称/rbd名称 --size rbd块大小

rbd create -p ceph-demo --image rbd-demo.img --size 10G
rbd create ceph-demo/rbd-demo1.img --size 10G

2、查看块pool内rbd、rbd详细信息

rbd -p ceph-demo ls
rbd info ceph-demo/rbd-demo.img

3、删除rbd

rbd rm -p ceph-demo --image rbd-demo1.img

4、挂载rbd(centos7内核不支持部分features,需要禁用,只保留layering特性)

rbd feature disable ceph-demo/rbd-demo.img deep-flatten fast-diff object-map exclusive-lock
rbd map ceph-demo/rbd-demo.img
rbd device list (查看挂载)

5、格式化、挂载

mkfs.xfs /dev/rbd0
mkdir /mnt/rbd-demo/
mount /dev/rbd0 /mnt/rbd-demo/

6、快照功能

#写入数据
echo rbd-snapshot-test >>/mnt/rbd-demo/rbd-snapshot.txt
#做快照
rbd snap create pool/imagename@snapshotname

rbd snap create ceph-demo/rbd-demo.img@snapshot_rbd-demo.img_20210619

#查看image的快照列表
rbd snap ls ceph-demo/rbd-demo.img
或者
rbd ls -l -p ceph-demo

#查看快照信息
rbd info ceph-demo/rbd-demo.img@snapshot_rbd-demo.img_20210619

7、基于快照恢复

#模拟数据丢失
rm -rf /mnt/rbd-demo/rbd-snapshot.txt

#通过snapshot_rbd-demo.img_20210619快照恢复,恢复后数据是离线的需要卸载重新挂载
rbd snap rollback ceph-demo/rbd-demo.img@snapshot_rbd-demo.img_20210619

#重新挂载
umount /mnt/rbd-demo
rbd device map
mount /dev/rbd0 /mnt/rbd-demo/

#检查数据是否恢复
cat /mnt/rbd-demo/rbd-snapshot.txt

8、删除快照

rbd snap remove ceph-demo/rbd-demo.img@snapshot_rbd-demo.img_20210619

9、rbd镜像克隆

#创建快照
rbd snap create ceph-demo/rbd-demo.img@rbd-demo-templet
#设置快照处于保护状态(快照必须处于被保护状态才能被克隆,并且处于保护状态无法删除)
rbd snap protect ceph-demo/rbd-demo.img@rbd-demo-templet
#克隆快照(可以克隆到不同的pool)
rbd clone ceph-demo/rbd-demo.img@rbd-demo-templet ceph-demo/vm1.img
rbd clone ceph-demo/rbd-demo.img@rbd-demo-templet ceph-demo/vm2.img

#挂载检查数据是否存在
rbd map ceph-demo/vm1.img
mkdir /mnt/vm1
mount /dev/rbd1 /mnt/vm1/
cat /mnt/vm1/rbd-snapshot.txt

10、解除依赖关系(用于解除快照模板和快照之间的关系,会占用更大的空间)

#查看通过父模板clone出来的子镜像
rbd children ceph-demo/rbd-demo.img@rbd-demo-templet
#通过子镜像查看父模板
rbd info ceph-demo/vm1.img|grep parent
#解除依赖关系
rbd flatten ceph-demo/vm1.img
rbd flatten ceph-demo/vm2.img
#删除模板
rbd snap unprotect ceph-demo/rbd-demo.img@rbd-demo-templet
rbd snap rm ceph-demo/rbd-demo.img@rbd-demo-templet

11、扩容

把10G的rbd扩容到20G、磁盘分区文件系统扩容,不建议缩容,会导致数据丢失
rbd resize ceph-demo/rbd-demo.img --size 20G
xfs_growfs /dev/rbd0
或者resize2fs /dev/rbd0
blkid

12、回收站功能

#卸载挂载目录和rbd
umount /mnt/vm1
rbd unmap /dev/rbd1
#移动到回收站,设置20210620到期
rbd trash move  ceph-demo/vm1.img --expires-at 20210620
#查看回收站信息
rbd trash -p ceph-demo ls
#根据回收站对于rbd的id恢复到原有pool内
rbd trash restore -p ceph-demo 3993b46979da

#查看回收站的卷(不能显示过期时间)
rbd info --image-id 3993b46979da
#清空回收站的卷(在过期时间内可以通过--force方式删除)
rbd trash -p ceph-demo rm 3993b46979da --force

13、集群外部备份和恢复

#导出rbd 到外部机器
rbd export ceph-demo/rbd-demo.img /root/rbd-demo.img
#使用外部rbd导入到集群内
rbd import rbd-demo.img ceph-demo/rbd-demo-import.img
#挂载导入的rbd查看数据是否恢复
rbd device map ceph-demo/rbd-demo-import.img
mount /dev/rbd1 /tmp/
ls /tmp/

14、增量备份和恢复

#插入新的数据
echo "duanshuaixing-test" >>/mnt/rbd-demo/duanshuaixing-export-diff.txt
#基于更新后做新的快照
rbd snap create ceph-demo/rbd-demo.img@rbd-demo-export-diff
#导出快照
rbd export-diff ceph-demo/rbd-demo.img@rbd-demo-export-diff /root/rbd-demo.img@rbd-demo-export-diff.img
#增量导入到rbd-demo-import中
rbd import-diff rbd-demo.img@rbd-demo-export-diff.img ceph-demo/rbd-demo-import.img
#重新挂载查看增量数据
umount /tmp
rbd device unmap /dev/rbd1
rbd device map ceph-demo/rbd-demo-import.img
mount /dev/rbd1 /tmp/
cat /tmp/duanshuaixing-export-diss.txt
三、RBD数据写入流程

1、每个文件被切割为多个object

查看块的情况和object大小
rados -p ceph-demo ls|grep  `rbd info ceph-demo/rbd-demo.img|grep block_name_prefix:|awk '{print $2}'`

rados -p ceph-demo ls|grep  `rbd info ceph-demo/rbd-demo.img|grep block_name_prefix:|awk '{print $2}'`|tail -n -1|xargs rados -p ceph-demo stat

2、object经过hash 掩码计算存储到pg上

查看object存储到哪个pg上
rados -p ceph-demo ls|grep  `rbd info ceph-demo/rbd-demo.img|grep block_name_prefix:|awk '{print $2}'`|tail -n -1|xargs ceph osd map ceph-demo

3、pg通过crushmap算法判断存储在哪个osd上

rbd info ceph-demo/rbd-demo.img|grep block_name_prefix:|awk '{print $2}'
for i in `rados -p ceph-demo ls|grep rbd_data.8acc9022f4f4`; do ceph osd map ceph-demo ${i}; done

4、ceph默认是Thin-provisioned 瘦分配,即先分配特定存储大小,随着使用实际使用空间的增长而占用存储空间,避免空间占用
验证:监控现有object数量,再对被挂载的rbd执行写入操作看是否动态扩容

rbd info ceph-demo/rbd-demo.img|grep block_name_prefix:|awk '{print $2}'
watch -n 1  'rados -p ceph-demo ls|grep rbd_data.8acc9022f4f4|wc -l'
cd /mnt/rbd-demo/ && if=/dev/zero of=test.img bs=1M count=1024
四、告警排查

1、application not enabled on 1 pool(s)

#查看具体报错:
ceph health detail
#开启application并设置为rbd类型
ceph osd pool application enable ceph-demo rbd
#查看pool application
ceph osd pool application get ceph-demo

2、2 daemons hava recently crashed

#列举崩溃信息
ceph crash ls
#列举新的崩溃信息
ceph crash ls-new
#查看crush详细信息
ceph crash info <crash-id>
#通过存档消除警告
ceph crash archive <crash-id>
#存档新的崩溃告警
ceph crash archive-all
#完全禁用警告
ceph config set mgr mgr/crash/warn_recent_interval 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值