MongoDB 复制集自动故障切换

2014-11-24 17:40:57 · 作者: · 浏览: 1

一 复制集的高可用性简介


复制集通过故障自动切换来实现高可用性,当主节点出现故障当时候,从节点可以通过选举成为主节点,而这个过程在大多数当情况下是自动进行的,不需要手动当干预。在某些情况下,故障自动切换需要数据回滚。


复制集部署的方式(复制集成员数量、物理因素,如带宽 复制集成员当地理位置等)可能会影响自动切换当效率。为了提高自动切换的效率,我们应该将复制集的大多数成员放到一个核心的数据中心来进行管理,在复制集里多放几个从节点,当主节点失效的时候,保证有可用的从节点可以用,而且还也可以因网络故障发生,隔离大多数复制集成员的通信。


自动故障切换主要包括两大过程:选举 和 回滚


选举在复制集的操作中扮演着非常重要当作用,选举的要话费时间当,在选举的过程中,复制集是没有主节点的,无法接受客户端的读请求,所以MongoDB尽量避免选举的进行。


选举的发生:当主节点不可用的时候;复制集初始化(initiating)的时候


二 影响选举的因素


1.心跳(Heartbeats)


心跳:复制集成员每隔两秒互相发送一次心跳请求包(其是就是ping对方),如果在10秒钟内没有收到对方成员的回复,就认为它出现了故障。


2.优先级比较


成员的优先级会影响到选举的过程,成员们会优先将自己的票投给优先级高的成员。


拥有0优先级的成员不会被选为主库,因为他们不会被投票,没有被选举权。


只要当前的主库拥有最高的优先级且在10秒钟内的操作日志条目内容是最新的,那就不会进行选举。


如果一个高优先级的成员且其操作也进入当前的primary,设置的选举以高优先级节点提供一个机会来成为主库。


3.操作时间:操作时间指的是一个成员最后一次执行操作日志时的日志条目时间。如果一个成员比其他的操作时间都最新(most recent)的话,就有可能被选为主库


4.连通性:复制集中的一个成员只有和大多数成员保持联通,得到大多数人的投票才可以成为主节点,否则会自动降级成为从节点。


例如:对于一个拥有三个成员的复制集,每个成员都可以投票,那么只有其中的两个人可以保持联通的话,复制集就可以进行一次选举。如果其中两个变的不可用,剩下的那个节点如果是从节点的话,那么它仍然还是一个从节点,因为它不能和其他的成员保持连通。同样的道理如果该节点是主节点的话,会自动的降级成为从节点,因为它不能和别的成员保持连通,失去了成为主节点的资格.这样的话该复制集就变成只读了。


5.网络分区:由于网络分区,如果一个主节点不可用的话,其余从节点又不能大多数的连通的话,复制集就无法进行选举。所以尽量将大部分复制集成员放到一个数据中心中,而将一小部分放到另外一个。


推荐阅读