MongoDB 1.7.x版本中的5个Replica Sets新特性

MongoDB 官方博客最近发表文章,对1.7.4 版本中关于Replica Sets的五个重要新特性做了一个介绍,这些特性会继续在1.8.x版本中存在并持续改进。下面是本站翻译:

1.从一个 secondary 结点初始化新结点(Initial sync from a secondary)

可以在新启动的Replica Sets 结点上设置 initialSync 选项来指定从某个 secondary 结点获取初始化数据。如下:

> rs.add({"_id" : num, "host" : hostname, "initialSync" : {"state" : 2}})

在 initialSync 选项中是一个筛选条件,你可以选择从哪个角色的机器上获取初始化数据 (primary or secondary),也可以直接指定 _id,hostname 或者从数据最新的节点。 如果指定的是从数据最新的结点上获取初始化化数据,你可以指定一个日期或者时间戳,这时候新加入的结点会选择一个比你设定的时间点数据更新的结点获取数据。

新加入的结点默认是从某个 secondary 结点获取初始化数据,只有在找不到这样的结点时,才会从primary 结点上获取数据。如果他找到了某个 secondary 机器,那么他只会从他获取初始化需要的数据,一旦他的数据与这个 secondary 机器同步了,他就会切换到从 primary 节点上获取新的更新操作。

2.从机延迟时间配置(slavedelay选项)

这个slavedelay 选项之前在 master-slave 模式的 replication 里支持,主要用于配置一个较长的时间以防止一些人为的错误。比如设定这个时间为86400,则同步操作只会同步超过一天前的数据,同步操作一直在,并非一天只同步一次(感谢Elmer Zhang同学的留言提醒)。而现在Replica Sets也支持它了,使用方式:

> rs.add({"_id" : num, "host" : hostname, "slaveDelay" : 3600})

3.隐藏节点(hidden node)

隐藏节点的描述很简单,就是这个节点是隐藏的不可为客户端所见。配置方式:

> rs.add({"_id" : num, "host" : hostname, "priority" : 0, "hidden" : true})

4.结点冻结(Freeze a member)

Replica Sets 的一个特点就是自动故障转移,也就是说在一台 primary 机器故障后,其他的 secondary 机器会尽快地选出一台新的主机。但是在我们进行某些维护操作时,会希望某段时间内不要让失去 primary 连接的 secondary 机器晋升为primary,而是等待一段时间再进行选举工作。这个操作就被称为结点冻结操作,具体操作方式如下:

> rs.freeze(3600)

解冻方式:

> rs.freeze(0)

5.快速同步(Fast sync)

在过去,启动一个新节点时只能从 primary 节点获取新的数据,而上面第一条特性允许从 secondary 节点获取初始化数据。但是无论如何,全量数据的同步都会是一个比较慢的过程。Fast sync 特性能够让新节点启动更加快速,Fast sync 就是让新节点在启动时指定 dbpath 为一个过去备份好的数据文件目录,只要保证这个数据备份的时间还不长(不超过 primary 的最老的oplog),则就可以先通过已有的备份数据文件启动然后再从 primary 机器获取新的更新。

查看最老的oplog的方法如下:

> use local
> new Date(db.oplog.rs.find().sort({$natural:1}).limit(1).next()["ts"]["t"])

10gen 的团队还列出了今后会加入的新特性如下: authentication, syncing from secondaries beyond the initial sync, data center awareness, and more. 如果你希望加入其他一些什么功能你可以到 vote on the cases you care about 去为你期待的功能投票。

参考资料:Five New Replica Set Features in 1.7.x

anyShare赠人玫瑰,手有余香,分享知识,德艺双馨!
          

无觅相关文章插件,快速提升流量

  1. slavedelay的说明错了,slavedelay=86400不是每天进行一次同步,而是从库比主库延时86400秒,比如当前时间为12月28号10点,则从库只同步到12月27号10点的数据