OpenStack虚拟机挂载Cinder磁盘出现read only的解决办法

一次少见的网络闪断,一次块存储服务Cinder服务的重启,或虚拟机集群上长时间运行spark等服务进行高频读写,部分计算节点上的部分虚机的部分挂载磁盘出现Read Only
为什么会Read Only
操作系统为了保护自身,避免损坏文件系统,采取措施:文件系统read only
为什么是部分计算节点(这些节点发生了什么状况)?
更诡异的是,为什么同一节点上有些VM正常,有些不正常?
通过分析计算节点以及存储节点日志信息猜测:
出问题的虚机在网络故障时,正在写数据!

猜测: 断开网络,虚机中,凡是有写操作或者创建/删除文件等元数据操作的,都会触发readonly;

解决网络闪断方法:延长time out 时间,网络在Time out时间内恢复后,写操作继续,并不会退出

 

出现Readonly后如何恢复?


故障恢复办法
/etc/fstab文件内容改不了,因为ReadOnly
mount -o remount rw / (无效)
试图修复文件系统:
fsck -t ext4 -a /dev/sdb (xfs格式磁盘对应修复命令为xfs_repair)
此方法仅限于挂载磁盘。对于系统盘,在虚机里面这么做非常危险,可能会导致文件系统损坏,目前比较稳妥的办法是reboot,启动时系统会提示自动修复。

具体原因具体分析:

虽然以上解决办法暂时能够解决磁盘写保护问题,但是无法避免诸如长时间运行spark往数据盘高频读写的BUG复现。此原因是因为通过命令磁盘只是从逻辑上跳过损害的扇区,既没有真正完全修复坏掉调扇区也没有从根本上解决问题。

实验中通过5台物理机构成的小集群(每台物理机40核CPU,256GB内存,4*1T 普通磁盘单独做RAID 0做挂载盘,2*400 GB SSD一起做RAID 0做系统盘),搭建Openstack Queen版本集群。其中一台物理机,做Opentack控制节点,其余4台物理机做Openstack计算节点。SSD资源被计算服务Nova通过KVM虚拟机化使用,普通磁盘被块存储服务Cinder调用lvm逻辑卷并通过iscsi协议通信。Openstack虚拟机磁盘由于是虚拟出来的,所以不同磁盘可能来自不同物理机。

经测试发现如下规律发现,SSD盘生成的系统盘从未此出现问题,出现此问题的数据盘总是来自前三台物理机。因此猜测可能磁盘间数据传输网络IO不够。因为系统盘上的服务往数据读写数据,是通过iscsi协议将数据传输到物理机真正的磁盘上的,而iscsi传输层使用的是TCP协议传输的。

 

所以通过SCP命令测试5台物理机传输文件速率前三台只能达到10M/s,后两台之间能达到100 M/s。由于5台物理机硬件配置几乎相同,又排查了实验的网络问题,排除机房了接入交换及其网口以及连接网线的原因后,最终确定原来前三台物理机连接交换机网口两端的水晶头是百兆水晶头,而后两台用的是千兆水晶头。因此,百兆水晶头限制跨物理机IO传输熟虑。

千兆水晶头

最终解决办法是,关闭Openstack虚拟机后更换物理机与交换机连接网线,保证水晶头为千兆水晶头。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值