再看MongoDB副本集

2014-11-24 17:21:04 · 作者: · 浏览: 0

因为MongoDB使用内存映射文件,所以必须使用64位版本。


官方下载地址如下:http://www.mongodb.org/downloads


实验环境使用的Mongodb版本为mongodb-linux-x86_64-2.6.0


由三台虚拟机搭建,配置为单核,1G内存。


实验环境如下:



MongoDB的副本集不同于以往的主从模式。


在集群Master故障的时候,副本集可以自动投票,选举出新的Master,并引导其余的Slave服务器连接新的Master,


而这个过程对于应用是透明的。可以说MongoDB的副本集是自带故障转移功能的主从复制。


1 相对于传统主从模式的优势


传统的主从模式,需要手工指定集群中的Master。


如果Master发生故障,一般都是人工介入,指定新的Master。


这个过程对于应用一般不是透明的,往往伴随着应用重新修改配置文件,重启应用服务器等。



而MongoDB副本集,集群中的任何节点都可能成为Master节点。


一旦Master节点故障,则会在其余节点中选举出一个新的Master节点。


并引导剩余节点连接到新的Master节点。这个过程对于应用是透明的。



2 Bully选举算法


Bully算法是一种协调者(主节点)竞选算法,主要思想是集群的每个成员都可以声明它是主节点并通知其他节点。


别的节点可以选择接受这个声称或是拒绝并进入主节点竞争。被其他所有节点接受的节点才能成为主节点。


节点按照一些属性来判断谁应该胜出。这个属性可以是一个静态ID,也可以是更新的度量像最近一次事务ID(最新的节点会胜出)


他的选举过程大致如下:


得到每个服务器节点的最后操作时间戳。每个mongodb都有oplog机制会记录本机的操作,方便和主服务器进行对比数据是否同步还可以用于错误恢复。


如果集群中大部分服务器down机了,保留活着的节点都为 secondary状态并停止,不选举了。


如果集群中选举出来的主节点或者所有从节点最后一次同步时间看起来很旧了,停止选举等待人来操作。


如果上面都没有问题就选择最后操作时间戳最新(保证数据是最新的)的服务器节点作为主节点。


选举的触发条件


初始化一个副本集时。


副本集和主节点断开连接,可能是网络问题。


主节点挂掉。


人为介入,比如修改节点优先级等


选举还有个前提条件,参与选举的节点数量必须大于副本集总节点数量的一半,如果已经小于一半了所有节点保持只读状态。


3 搭建副本集集群


每个虚拟机都使用如下的配置文件启动实例:


dbpath =/home/lihuilin/mongodata


smallfiles =true


replSet =mvbox


然后在任意一台虚拟机登陆mongo,输入如下设置


config = { _id:"mvbox", members:[


{_id:0,host:"192.168.1.1:27017"},


{_id:1,host:"192.168.1.2:27017"},


{_id:2,host:"192.168.1.3:27017"}]


}


rs.initiate(config);


可以看到副本集已经生效



可以使用rs.status()查看集群状态,或者rs.isMaster()