天天看点

Ceph Monitor挂了之后对集群的影响

目前,Ceph作为统一存储的解决方案,已经得到了许多互联网公司的广泛应用,而大家搭建的Ceph环境也大多参照了国内最早研究Ceph的OpenStack公司UnitedStack(有云)分享出来的方案:即数据3副本、3个monitor做高可用等。

Monitor相当于是Ceph集群的大脑,使用了3个做高可用防止单点故障的发生。经常有同事或者客户会问到一个问题:就是monitor最多能挂几个,集群就不能工作了?

答案是只能挂一个,原因是Monitor采用了Paxos的选举机制来实现多个之间的协调同步,而这中选举机制要求必须要有半数以上的成员存活的时候,整体才能对外提供服务。到底是这样吗?我通过以下测试得到了最终结论。

测试环境:

一个18个osd、3个mon的集群

测试目的:

1)确认挂掉一个mon对集群的影响

2)确认挂两个/三个mon之后,集群能否工作,进行读写

3)确认当mon恢复之后,集群能够恢复正常

测试过程:

1 确认挂一个mon对集群的影响

1)确认对IO的影响

在其中一台机器上通过$ fio -ioengine=rbd -rw=randwrite -name=ebs -thread -pool=metadata -direct=1 -bs=4k -rbdname=test1 -iodepth=64 -runtime=600 --time_based进行压力测试,然后将其中一个mon down 掉观察对IO的影响。

2)观察对命令执行的影响

down掉一个mon之后,执行命令会碰到如下连接失败的log:

$ ceph -s

2016-01-13 04:21:31.729827 7f7db55f8700 0 – 10.0.3.68:0/1052520 >> 10.0.3.62:6789/0 pipe(0x7f7da80008c0 sd=8 :0 s=1 pgs=0 cs=0 l=1 c=0x7f7da8004bb0).fault

并且这个重连会持续三秒钟,原因是因为‘mon_client_hunt_interval =3’这个配置导致的,但最终命令是能执行成功的。

结论:当一个mon down了之后,对I/O没有影响,会影响命令的执行时间,但可以通过调整mon_client_hunt_interval这个配置,解决这个问题。

2 确认挂两个mon down对集群的影响

1)对I/O的影响

两个mon down了之后,在Cluster map没有发生变化的情况下,对已有的I/O业务没有影响,但不能接收新的client连接和处理它的I/O,应用程序会卡在那里,不结束。

当这时Cluster map发生变化时,比如说手动down掉一个osd,此时原有的I/O也会变成零。

当恢复其中一个mon之后,集群恢复正常,I/O恢复正常。

2)对命令的影响

两个mon down了之后,任何ceph的命令都不能执行。

结论:当两个mon down了之后,任何ceph的命令都不能得到执行,正在进行的I/O在Cluster map不变的情况下不受影响,一旦Cluster map发生变化,则I/O会阻塞。任何新的client连接请求以及它发起的I/O都不会得到执行。当其中一个mon恢复之后,集群业务恢复。