集群管理
standby 状态用于停机维护。
仲裁机制
当集群达到2 个节点或以上,需要仲裁机制
跨地域机房之间做HA集群,通常情况下,距离小于100km,延迟小于2ms,可以双活,同时提供业务;距离大于100km,延迟大于2ms,只能做主备,用于容灾。
如上图,这是一个双活集群,当北京数据中心其中一个节点故障时,集群是能够继续提供业务的;当北京数据中心两个节点都故障的时候,廊坊数据中心是不能够继续提供业务的,需要一个仲裁节点和一个数据中心都能工作才能提供业务。
如果是北京数据中心与廊坊数据中心之间的心跳网络链路故障了,会发生脑裂现象,两个数据中心互相认为对方故障了,开始抢夺资源。为了解决这个问题,才引出一个新的概念:仲裁机制。
vote:票数解决方案
默认情况下,如果你没有指定,它会给每个节点投票,总票数是4
得票数>=
半数以上的票数才能存活
在主备集群的情况下,主故障了,备端通常需要人工拉活,集群无法准确地判断出故障点;
现在有一些容灾软件,它提前把主备端的存储添加到容灾存储里面,出现故障时一键恢复,但是一键恢复这个动作也是需要人工来操作的,而且也是需要运维人员经常性地去做灾难演练。
quorate 这个单词翻译过来叫法定人数,我们在集群里面翻译成专业术语:仲裁;这个状态是Yes,表示满足仲裁条件,集群得以存活。
这里分别是:
- 期待票数:4
- 最高期待票数:4
- 总票数:4
- 仲裁票数:3
- 当前是否满足仲裁条件:满足了
- Nodeid:节点id
- Votes:票数
- Qdevice:是否是仲裁设备?NR表示不是仲裁设备
- Name:节点名称
把noded 关机后:
再把nodec 关机:
集群停止工作了。
双活集群情况下,上图是业内常见做法,仲裁设备也算一票,放在第三方数据中心。
如果没有仲裁设备,我也不想另外去配置一个仲裁设备怎么办?
静态优先级
优先站点
默认:节点ID low 为优先站点
默认情况下,是没有配置静态优先级的,我们可以来设置这个规则。
我们把节点加入到一个集群,它就会在这个集群的多播域内,下面这个是集群的配置文件,我们用命令对集群做的配置会保存在这里:
在其他节点上查看这个文件,配置都是同步的。
如果我在nodea 上编辑配置文件,直接把这个参数改为0,其他节点是不会同步更新的:
需要敲这条命令手工同步:
现在把这两个参数加上
现在把nodec和noded关机,集群依然能正常工作。
把集群恢复,如果把nodea和nodeb关机呢?
这就是静态优先级,只有低的node id 存活集群才能正常工作。
恢复集群,再写参数,重启集群,nodea 关停:
关停nodeb:
再把nodec 关停,发现集群不工作了。
这时再把noded 关停,把nodea 开启,留下node id 最小的,集群仍然不能工作,一个节点确实不行。
fence机制
这是一般其他厂商的做法,fence 机制在集群只有两个节点的时候很好地发挥作用,默认是重启故障节点,有自动恢复的可能,这是红帽独有的做法。
除了支持服务器管理卡的fence,还有scsi fence、libvirt fence、一些云主机厂商提供的fence 等等...