mongodb强制一个成员为主

2012年8月20日 发表评论 阅读评论

公司有一部分安全性要求不是十分高的数据使用的mongodb,其查询和插入性能确实较ACID理论的数据库来说要好的多。不过数据安全性上确实不如ACID型。为了补冲这点不足,做了replica sets(复制)。但由于操作时,没有进行优先级设置。所以想将某台性能略好的机器设置为主。

最早由于受王文龙的《mongodb权威指南》的影响,有了先入为主的意识。其有关于replica sets有这么一段话:“{_id: 0, host: 'localhost:28010', priority:1}, 成员 IP 及端口,priority=1 指 PRIMARY ”,我当时以为priority设为1就是主。后来看到官方的相关文档并测试过以后。发现这个地方是有错误的。

闲话说了一堆,具体还是看操作。两种方法可以让mongodb指定的replica sets成员成为主。

方法一(官方介绍的):

> config = rs.conf()
{
    "_id" : "foo",
    "version" : 1,
    "members" : [
        {
            "_id" : 0,
            "host" : "A",
        },
        {
            "_id" : 1,
            "host" : "B",
        },
        {
            "_id" : 2,
            "host" : "C",
        }
    ]
}
> config.version++
> // the default priority is 1
> config.members[1].priority = 2
> rs.reconfig(config)

其中显示版本的那句config.version++可以省略掉。这段官方说明,已经说的很明白了,默认的优先级是1,priority的值设的越大,就优化成为主。这个可能和路由上的一些东西是相反的。一些路由设备上是这个值越小越为主。

注:还有一个需要注意的地方是members大括号里面的成员号和_id号是没有关系的。比如我用的查看到的结果是下面的。这个成员号是默认从0开始的,还用官方的那示例来说的话,members[0]=

SECONDARY> rs.conf();
 {
        "_id" : "shard1",
        "version" : 4,
        "members" : [
                {
                        "_id" : 1,
                        "host" : "192.168.10.170:20000"
                },
                {
                        "_id" : 2,
                        "host" : "192.168.10.26:20000"
                },
                {
                        "_id" : 3,
                        "host" : "192.168.10.168:20000",
                        "priority" : 2
                }
        ]
}

以上操作需要在primary上进行操作。

方法二:

primary>config = {_id:'myset',members: [
 {_id:0,host:"192.168.10.170:20000",priority:1},
{_id:1,host:"192.168.10.168:20000",priority:2},
{_id:2,host:"192.168.10.26:20000",priority:1,arbiterOnly:true}]
}
primary>rs.reconfig(config)
secondary>(显示为secondary,则证明切换成功。) 

上面的方法也可以(都是利用rs.reconfig更新system.replset  collections的内容实现的),上面是配置一主一从一仲裁。在局域网结构中官方还是推荐一主两从的结构。而仲裁多用在广域网或跨网的环境中。因为受到网络距离的限制,不便于选出primary时,通过仲裁机主动选出primary是个不错的方法。

注:以上测试在mongodb2.0+版本上有效。低于2.0版本的方法在官网上也有介绍,点此处看官网介绍




本站的发展离不开您的资助,金额随意,欢迎来赏!

You can donate through PayPal.
My paypal id: itybku@139.com
Paypal page: https://www.paypal.me/361way

分类: 数据库 标签:
  1. 本文目前尚无任何评论.