0
点赞
收藏
分享

微信扫一扫

OpenStack云平台底层存储与Ceph对接,发现1台Windows云主机挂载了1个数据盘,在虚拟机系统里面执行压缩文件时,出现虚机卡死现象,数据盘无法进行正常的读写操作

洛茄 2022-01-05 阅读 152

【问题描述】

OpenStack云平台底层存储与Ceph对接,发现1台Windows云主机挂载了1个数据盘,在虚拟机系统里面执行压缩文件时,出现虚机卡死现象,数据盘无法进行正常的读写操作

【问题分析】

1、登录OpenStack控制节点,通过IP地址获取云主机的UUID以及其它相关信息

nova  list  --all | grep 虚拟机IP

nova  show  虚拟机UUID

获取到对应的数据盘ID信息:

os-extended-volumes:volumes_attached | [{“id”:”aaaaaa”}]

该虚拟机所在的宿主机:

OS-EXT-SRV-ATTR:host | compute-node-AA

2、尝试直接卸载虚拟机上挂载的数据盘,结果卸载失败

3、尝试先关掉该虚拟机之后,在去卸载虚拟机的数据盘

关闭虚拟机:

nova  stop  虚拟机UUID

卸载虚拟机上上挂载的数据盘:

nova volume-detach 虚拟机UUID  数据盘ID

4、卸载完数据盘之后,启动虚拟机,登录虚拟机,进行文件读写测试,未出现卡顿现象

nova  start 虚拟机UUID

5、将数据盘重新挂载到虚拟机上,然后在Windows系统里压缩存放于该数据卷上的文件,再次出现虚机卡顿现象

nova volume-attach 虚拟机UUID 数据盘ID

6、由于该数据盘中有数据,为防止排查过程中丢失数据,对该数据盘进行备份,将虚机再次关机,卸载数据卷,对数据卷做快照,然后从快照创建一个卷,创建的卷一直卡在creating状态

使用rbd命令创建flatten克隆卷,源卷used为59272M,flatten克隆卷used大小达到832M就不再继续上升了,且rbd flatten命令一直无返回值

检查Linux内核是否支持rbd块设备

modprobe rbd

斜杠 / 前面的是这个块设备建立在的pool的名字volumes,后面是这个块设备的名字(自己定义的)

rbd info volumes/$i@$i-snapshot

rbd snap create --snap volumes/$i@$i-snapshot

查看该块设备支不支持创建快照模板,image-format 必须为2

rbd info volumes/$i@$i-snapshot

把该块做成模板,首先要把做成模板的快照做成protect

rbd snap protect volumes/$i@$i-snapshot

可以利用这个快照来当模板来克隆了,克隆一个叫$i-clone的块 出来试试

rbd clone volumes/$i@$i-snapshot  volumes/$i-clone

这个时候的$i-clone还是依赖$i@$i-snapshot的镜像,如果$i@$i-snapshot的镜像被删除或者损坏,$i-clone也不能够使用了,要想独立出去,就必须将父镜像的信息合并flattern到子镜像中

rbd flatten volumes/$i-clone

通过rbd snap unprotect volumes/xx1@xxsnap可以去掉这个保护,但是这样的话就不能克隆了

rbd snap unprotect

查看数据盘大小:

rbd du volumes/vloume-id

rbd du volumes/volume-id-clone

6、Rbd和cinder snapshot方式恢复数据卷均不成功,尝试使用qemu-img方式导出数据卷,然后将.raw文件挂载

qemu-img convert   -O raw rbd:volumes/volume-idxx:conf=/etc/ceph/ceph.conf    /var/test/test.raw

若volume有fast-diff新特性,可以使用rbd du -c /etc/ceph/cephxx.conf volumes/volume-xxx查看卷的数据实际大小

7、计算节点 compute-node-AA 到ceph集群的某个osd节点上有丢包

icmp_seq=1

icmp_seq=3

icmp_seq=7

检查bond状态:

cat /proc/net/bonding/bond1

Bonding Mode:IEEE 802.3ad Dynamic link aggregation

8、登录到存储节点osd-node-BB 带外上查看对应的硬件是否有问题

报:网口故障,网口链路断开

9、登录到存储节点 osd-node-BB 系统上,查看message日志

Kernel : ixgbe 00xx:01:01.1 eth0 :NIC Link is Down

Kernel : bond1: link status definitely down for interface eth0 , disableing it

Kernel :ixgbe 00xx:01:01.1 eth0:NIC Link is Up 10 Gbps ,Flow Control : RX/TX

该存储节点eth0的网卡链路异常

10、查看 网卡链路

ethtool eth0

Link detected: no

存储节点网卡或链路不稳定,导致网络抖动,当虚机用户数据读写操作访问到该存储osd节点上的数据时,由于网络中断,导致请求无法完成,引起虚机读写数据卡死的现象

排查恢复

1、初步判断是存储节点osd-node-BB的网卡问题,通知硬件厂商尽快恢复该节点的网卡

2、避免影响其它虚机,在基础网络修复好之前,先停掉该osd节点,停掉该节点osd服务后,虚拟机验证恢复读写数据正常

3、优先恢复业务,对ceph集群中网络故障的存储osd节点 osd-node-BB 执行osd退出操作,保证虚拟机的读写卷操作不再访问该osd-node-BB节点的数据,再次执行osd进程退出操作,之后验证虚拟机读写正常

4、虽然将执行了osd-node-BB节点退出,但是仍是in状态(虽然osd退出,但是未将osd-noed-BB该节点踢出ceph集群),且有一个pg处于inactive状态,peering过程

Peering:互为副本的三个(此处为设置的副本个数,通常设置为3)pg的元数据达到一致的过程。在这个状态的pg暂停处理IO请求,在生产环境中表现为集群部分IO不响应,甚至某些云主机因为等待IO造成应用无法正常处理。Peering时间的长短并不可控,主要是在于请求的osd是否能够及时响应;如果这个阶段某个osd down掉,很可能导致部分pg一直处在peering状态,即所有分布到这个pg上的IO都会阻塞

虽然osd.007的服务已停止,然而他仍然被标记为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

5、ceph -s查询,期待ceph -s达到ok再对虚拟机进行读写测试

重构结束后,并未达到理想的ok状态

问题PG如下:

ceph health detail

HEALTH_ERR 1 pgs are stuck inactive for more than 300 seconds; 1 pgs peering ; 1 pgs stuck inactive

Pg xxx is stuck inactive for xxxx ,current state peering ,last acting [77,88,99]

Pg xxx is peering , acting [77,88,99]

对应PG的三副本所在osd [77,88,99]

ceph osd find 77

ceph osd find 88

ceph osd find 99

解决思路:重启主primary  osd.77后,ceph -s查询集群状态恢复ok

ceph -s

ceph集群恢复ok后,虚机卡住的状态即刻恢复,此时将虚机的卷全部挂载,测试读写压缩文件都正常

6、后期,若是恢复该osd-node-BB节点网络后,再次将该对应的osd加入ceph集群

配置eth0和eth1两个网卡ifcfg-enoXX配置文件,修改mac地址为新更换网卡的mac地址(带外上查看新网卡的mac地址),并重启网络服务,查看网卡bond正常,ceph集群OK

写在最后:

最平凡的人,也得要为他那个世界的存在而战斗
你应该在短暂的岁月里,真正活得不负众爱
活得明白的人,往往都有一个好心态
孤立有时候不会让人变得脆弱,甚至可以使人的精神更强大
社会在变化,生活在变化,人在变化,没有什么是一成不变的,包括人的关系
我们会遇到很多人,有的人是来教会你成长,有的人是用来离别
生活不能等别人来安排,要自己去争取和奋斗
不论其结果是喜是悲,但可以慰藉的是,你总不枉在这世界上活了一场

详情请见:

 

举报
0 条评论