mongodb replica set是mongodb官方推荐的主从复制和高可用方案,用于替代原有的master-slave主从复制方案。replicat set具有自动切换功能,当primary挂掉之后,可以自动由replica set中的某一个secondary来切换到primary,以实现高可用的目的,不像mysql那样需要使用第三方软件。
目前很多游戏公司都开始使用mongodb作为数据库,我们公司线上使用的版本是2.4.6.
一 mongodb replica set的原理
复制主要用于备份、灾难恢复和读写分离。一个replica set就是一组mongod实例。replica set中的primary接收所有的写操作,secondaries从primary复制操作然后应用到自己的data set。
一个replica set中的成员角色有三种:primary,secondary和arbiter。
primary 接收来自客户端的所有的写操作,一个replica set中有且只有一个primary。primary如果宕掉,replica set会自动选举一个secondary成为primary。primary将它data sets的所有操作都记录到oplog中。
secondary secondary从primary复制oplog,然后将oplog中的操作应用到自己的data sets。secondary和primary之间是异步复制,也就是secondary中的数据可能不是最新的。默认情况下,secondary不可读不可写,但是可以通过设置运行客户端从secondary读。
arbiter arbiter不需要维护自己的data sets,,只是当primary挂掉之后参与投票选择哪个secondary可以升级为primary。当replica set中的成员个数为偶数个时,就需要添加一个arbiter用于投票选举哪个可以升级为primary。arbiter对硬件的要求很低。不能在primary或者secondary主机上运行arbiter。
一个replica set可以最多拥有12个成员,但是只有7个成员可以同时参与投票选举成为primary,如果成员数量超过12,就需要使用master-slave主从复制方式。
部署一个replica set至少需要三个成员,一个arbiter,一个secondary和一个primary或者一个primary,两个secondary。
可以将secondary配置为以下几种特殊用途:
a.在选举中阻止其成为primary,只用作备份数据。通过设置优先级priority为0来实现。
b.阻止应用程序从它读,通过设置优先级priority为0和设置hidden为true来实现。
一个隐藏的成员同样复制primary的数据,但是对于客户端应用程序来讲,它不可见。
c.保留历史镜像数据用于数据回档,比如如果误删除数据,可以使用delayed replica set成员中的数据恢复。
delayed members即延时成员会延时从primary复制oplog
二 mongodb replica set部署架构
replica set elections 复制集选举
replica set通过投票选举的方式来决定哪个成员可以升级为primary。初始化一个replica set后就会产生选举出现,或者任何时候当primary不可用时也会有选举出现。需要注意的是,投票选举primary会花费一定的时间来完成,在这段时间内,整个replica set无法进行写操作,所以尽量避免重新投票选举的情况出现。
影响选举的因素和条件有:
heartbeats 心跳检测
replica set中成员每2秒向其他成员发送心跳,如果在10秒内无回应,这个成员就被其他成员标记为不可用。
priortiy comparisons 对比优先级
设定成员的优先级priority会影响投票选举,优先级越高,越容易被选举成为primary。如果优先级设置为0,那么这个成员不会永远不会被选举成为primary,它也不需要其他成员为它投票。
optime
optime是replica set的成员上一次从oplog中将操作应用到data sets的时间戳。一个成员不会成为primary,除非它比其他可见的成员拥有最新的时间戳。
connections
一个replica set中的成员如果想要成为primary,它必须能够连接这个replica set中具有投票权利的大部分成员。
network partitions
为了避免当primary宕掉后,整个replica set无法选举出新的primary,replica set变成只读,需要在一个数据中心放置大部分replica set中的成员实例。
参考文档
centos 编译安装 mongodb与mongodb的php扩展
centos 6 使用 yum 安装mongodb及服务器端配置
ubuntu 13.04下安装mongodb2.4.3
mongodb入门必读(概念与实战并重)
ubunu 14.04下mongodb的安装指南
《mongodb 权威指南》(mongodb: the definitive guide)英文文字版[pdf]
nagios监控mongodb分片集群服务实战
基于centos 6.5操作系统搭建mongodb服务
mongodb 的详细介绍:请点这里
mongodb 的下载地址:请点这里
本文永久更新链接地址:
