Ceph在高IO下的死锁故障

在一台高性能PC服务器上,使用ceph做虚拟机镜像的存储。在做压力测试的情况下,出现了该服务器所有虚拟机不能访问的故障。

引发原因:

1.在虚拟机当中安装了一个网站服务,网站服务中使用了redis作为缓存服务器。在压力比较大的情况下(8000千次访问每秒),发生了宿主机所有的虚拟机全部不能访问的情况

2.发生故障时,部分虚拟机不能ping到,部分虚拟机是能ping到,但是不能ssh登陆

开始以为是网桥故障,KVM的virtio的网卡故障非常著名,在使用网桥的情况下,会出现内存溢出。导致网桥失效。 Xen给的解决方案是关闭网桥的tso 支持。

(运行命令ethtool --offload <network device>  tso off )

但是重启网络服务后,该故障没有消失。

因此排除网桥故障。

多次重现故障之后,有一个虚拟机的ssh没有断掉,所以还能执行cd命令,但是ls命令无法执行,报告input/output error,此错误为文件系统故障的表现。

所以开始怀疑文件系统出现问题 。

此文件系统为ceph,查看ceph日志,发现在发生故障的同时,ceph报大量一下的故障日志:

2015-06-30 16:36:28.493424 osd.0 172.23123123:6800/96711 9195 : cluster [WRN] 6 slow requests, 6 included below;

oldest blocked for > 30.934796 secs

还有

2015-06-26 18:46:45.192215 osd.2 172.132131231:6800/68644 5936 : cluster [WRN] slow request 240.415451 seconds old

, received at 2015-06-26 18:42:44.776646: osd_op(13213213500 [

stat,set-alloc-hint object_size 4194304 write_size 4194304,write 2269184~524288] 0.5652b278 ack+ondisk+write+kno

wn_if_redirected e48545) currently waiting for rw locks

明显出现了死锁。

查看磁盘IO记录,发现redis服务器,在故障发生时又大量的磁盘写入操作,发现在高操作频率的情况下,会比较频繁的触发rbd的持久化,因此引起了大量磁盘io,这些磁盘IO导致了其他磁盘操作得不到足够的写入时间,引起了ceph对osd的死锁。

解决方案是关闭了redis的rbd持久化,该问题不再出现。

长久的解决办法是不让redis持久化直接往ceph上的分区上写入。还有就是不要再ceph上的虚拟机镜像进行高IO的写入或者读取(好不靠谱。。。)

经验总结:

1.Ceph在高IO下存在死锁的风险,Ceph没有提供解锁机制,官方的解决方案是不要在ceph上放虚拟机镜像。。。无语。。

2.在系统设计的时候,应该将存储网络和业务网络隔离和分开。一个系统服务,应该分为,外网,业务网,存储网,心跳网,管理网,五种网络组建形式。

--------------------------------------分割线 -------------------------------------- 

Ceph环境配置文档 PDF  

CentOS 6.3上部署Ceph  

Ceph的安装过程  

HOWTO Install Ceph On FC12, FC上安装Ceph分布式文件系统  

Ceph 文件系统安装  

CentOS 6.2 64位上安装Ceph 0.47.2  

Ubuntu 12.04 Ceph分布式文件系统  

Fedora 14上安装 Ceph 0.24  

--------------------------------------分割线 --------------------------------------

Ceph 的详细介绍请点这里
Ceph 的下载地址请点这里

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/47d1417a5ddad317fecbb23b716961a2.html