Ceph 知识摘录(常见故障、可用性测试)
高可用测试目的
为了验证集群没有单点故障,一个服务进程down 不影响业务。进程恢复后,集群状态正常。(稳定性、可靠性)
可用性相关设计
rgw、osd、Mon(Lead、非Lead) 节点宕机
rgw、osd、Mon 服务进程异常
rgw、osd、Mon 管理、业务、存储网异常
ceph-rest-api
keepalived 进程异常
三副本模式下:1个PG对应的1个OSD Down
纠删码模式下:1个PG对应的1个OSD Down 或者2个OSD Down
Mon 对应的时钟不同步
磁盘故障、更换磁盘(日志检查是否disk error 故障,检查磁盘能否正常读写)
运维
版本升级、回退
集群容量使用率(85%,95%)
破坏性
三副本下,一个PG对应2个Osd被stop
三副本下,一个PG对应3个Osd被stop
纠删码4+2,一个PG对应3个Osd被stop
网络时延、频繁闪断
Mon节点故障处理
线上环境,Mon的个数是2n+1(n>=0)个,在线上至少3个,只要正常的节点数>=n+1,ceph的paxos算法能保证系统正常仲裁(quorum),如果ceph的Mon节点超过半数挂掉,无法仲裁,会阻塞对集群操作,直到超过半数Mon恢复。
解决方法:通过monmaptool导出monmap,初始化新的Mon节点。
数据盘替换流程
1、定位故障磁盘(SAS盘:sas2ircu/sas3ircu SATA盘:ledctl LSI-RAID卡:MegaCli64),*物理硬盘与逻辑磁盘及挂载点的对应关系很重要*
2、停止故障OSD(停进程后,umount挂载点)
虽然osd的服务已停止,然而他仍然被标记为IN(集群中)状态。只要他的状态还是IN,集群就不会为它触发数据恢复。默认情况下,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。
3、删除故障OSD
从ceph CRUSH map中移除
从ceph 删除osd秘钥
从ceph集群中删除该osd
拔掉故障盘,插入新磁盘()
4、重新组建RAID
5、创建OSD,加入集群(格盘、起进程、加回集群)
触发backfilling操作
Ceph中查找一个对象的位置
1、上传一个文件到pool(示例中叫做test)中
rados -p test put cirros cirros-0.3.2-x86_64-disk.img
2、查看pool中刚才上传的对象
rados -p test ls | grep cirros
3、查看对象的位置信息
ceph osd map test cirros
输出结果:osdmap e20062 pool 'test' (13) object 'cirros' -> pg 13.9576dc54 (13.54) -> up ([5,3], p5) acting ([5,3], p5)
这代表pool test中的cirros这个对象位于13.54这个pg中,并且位于osd5和osd3上(两个副本)。
4、进入到对应osd的存储目录,找到对应文件即可。
cd /var/lib/ceph/osd/ceph-3/current/13.54_head; ls
这个目录下存放了13.54这个pg中所有的object,可以根据指纹9576dc54来定位到具体的文件。
常见故障
Mon空间写满,集群网络不稳定
客户端不能连接:防火墙
PG故障:扩缩容
进程是否被卡住、重启进程
故障排查:开启调试模式、查看日志信息