mongodb强制一个成员为主
公司有一部分安全性要求不是十分高的数据使用的mongodb,其查询和插入性能确实较ACID理论的数据库来说要好的多。不过数据安全性上确实不如ACID型。为了补冲这点不足,做了replica sets(复制)。但由于操作时,没有进行优先级设置。所以想将某台性能略好的机器设置为主。
最早由于受王文龙的《mongodb权威指南》的影响,有了先入为主的意识。其有关于replica sets有这么一段话:“{_id: 0, host: ‘localhost:28010’, priority:1}, 成员 IP 及端口,priority=1 指 PRIMARY ”,我当时以为priority设为1就是主。后来看到官方的相关文档并测试过以后。发现这个地方是有错误的。
闲话说了一堆,具体还是看操作。两种方法可以让mongodb指定的replica sets成员成为主。
方法一(官方介绍的):
1> config = rs.conf()
2{
3 "_id" : "foo",
4 "version" : 1,
5 "members" : [
6 {
7 "_id" : 0,
8 "host" : "A",
9 },
10 {
11 "_id" : 1,
12 "host" : "B",
13 },
14 {
15 "_id" : 2,
16 "host" : "C",
17 }
18 ]
19}
20> config.version++
21> // the default priority is 1
22> config.members[1].priority = 2
23> rs.reconfig(config)
其中显示版本的那句config.version++可以省略掉。这段官方说明,已经说的很明白了,默认的优先级是1,priority的值设的越大,就优化成为主。这个可能和路由上的一些东西是相反的。一些路由设备上是这个值越小越为主。
注:还有一个需要注意的地方是members大括号里面的成员号和_id号是没有关系的。比如我用的查看到的结果是下面的。这个成员号是默认从0开始的,还用官方的那示例来说的话,members[0]=/span>
1SECONDARY> rs.conf();
2 {
3 "_id" : "shard1",
4 "version" : 4,
5 "members" : [
6 {
7 "_id" : 1,
8 "host" : "192.168.10.170:20000"
9 },
10 {
11 "_id" : 2,
12 "host" : "192.168.10.26:20000"
13 },
14 {
15 "_id" : 3,
16 "host" : "192.168.10.168:20000",
17 "priority" : 2
18 }
19 ]
20}
以上操作需要在primary上进行操作。
方法二:
1primary>config = {_id:'myset',members: [
2 {_id:0,host:"192.168.10.170:20000",priority:1},
3{_id:1,host:"192.168.10.168:20000",priority:2},
4{_id:2,host:"192.168.10.26:20000",priority:1,arbiterOnly:true}]
5}
6primary>rs.reconfig(config)
7secondary>(显示为secondary,则证明切换成功。)
上面的方法也可以(都是利用rs.reconfig更新system.replset collections的内容实现的),上面是配置一主一从一仲裁。在局域网结构中官方还是推荐一主两从的结构。而仲裁多用在广域网或跨网的环境中。因为受到网络距离的限制,不便于选出primary时,通过仲裁机主动选出primary是个不错的方法。
注:以上测试在mongodb2.0+版本上有效。低于2.0版本的方法在官网上也有介绍,点此处看官网介绍。
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/mongodb-forced-primary/1704.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.