Chinaunix首页 | 论坛 | 博客
  • 博客访问: 8079231
  • 博文数量: 594
  • 博客积分: 13065
  • 博客等级: 上将
  • 技术积分: 10324
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-26 16:44
个人简介

推荐: blog.csdn.net/aquester https://github.com/eyjian https://www.cnblogs.com/aquester http://blog.chinaunix.net/uid/20682147.html

文章分类

全部博文(594)

分类: C/C++

2012-07-16 07:50:36

    主备切换是很多高可用性系统都必须解决的问题,方法有很多,象基于ZooKeeper的主备切换就是一个很好的选择。

在这里提供一种更简单但不完美的主备切换方法:
1) 假设A和B是集群中的主控(Master)节点
2) 1~7是工作节点(如HDFS中的DataNode)
3) 在每个工作节点上,都同时配置了A和B的IP,而且是对等的,无主备之分

所谓主:是指提供服务的主控,而备是指不提供服务的主控,当主故障时,由备接管其它服务,但因网络原因,可能主和备都未故障,这个是解决主备切换的关键问题所在。

选择A或B作为主的过程:
1) 未连接之前,如图1所示,A和B都不是主
2) 1~7随机选择连接到A或B
3) 这个时候可能会出现如图2所示的情况
4) (关键点)在指定的时间内(如1秒),不管是A还是B,发现到自己的连接数小于50%(这个值可修改)就主动切断连接,这个时候会将本来和自己建立连接的节点赶往另一边
5) 当A或B发现到自己的连接数超过60%(这个值可修改)时,就认为自己是主了,并保持连接
6) 这样当A或B有一个挂掉时,最终肯定会有一个满足作为主的条件

如果是网络原因,而不是A或B本身故障,则会出现一些可以连接到A但不能连接到B,而另一些可以连接到B但不能连接到A,甚至还有些可以同时连接A和B,但总是只有满足超过50%的才提供服务,这样就不会出现同时存在两个主的情况。所以,如果恰好是一半一半,那就无法提供服务,需要人工干预了,比如工作节点,平均分配在两个不同IDC,由于两个IDC间网络故障,问题就会出现。


图1


图2


图3


会不会导致A和B都是40%或50%了?这个会,但会触发重新竞争分配,只需要做一些策略调整,就可以解决这个问题,比如A是每1秒算一个间隔,B为2秒一个间隔。
阅读(6418) | 评论(4) | 转发(0) |
给主人留下些什么吧!~~

aquester2014-05-15 13:31:29

gongping11:我目前从事设备之间的备份处理,和楼主的实现思路基本相同!

文明上网,理性发言...

回复 | 举报

gongping112014-05-15 13:06:04

我目前从事设备之间的备份处理,和楼主的实现思路基本相同!

Aquester2012-07-18 09:41:44

ylky_2000: 理论还是实践?.....
实践

ylky_20002012-07-18 08:18:25

理论还是实践?