taoCMS是基于php+sqlite/mysql的国内最小(100Kb左右)的功能完善、开源免费的CMS管理系统

mongodb replica sets(复制集)配置与搭建

2013-06-05
 

一、节点类型

standard:常规节点,它存储一份完整的数据副本,参与选举投票,有可能成为primary节点。

passive:存储了完整的数据副本,参与投票,不能成为primary节点。

arbiter:仲裁节点,只参与投票,不接收复制的数据,也不能成为primary节点。(此角色可有可无,两台的时候最好是加上仲裁节点见http://docs.mongodb.org/manual/faq/replica-sets/#how-many-arbiters-do-replica-sets-need)

 

一个repica sets节点数量最好为奇数(odd)。

 

二、relica sets 集群三节点分布

实验是三个节点:

两个standard节点(这两个节点直接可以互切primary secondary)。

一个arbiter节点,它手中握着一张选票,决定上面两个standard节点中的哪一个可以成为primay。

 

下面是我试验的节点分布

 

 

 

三、配置步骤

1.启动三个节点

介绍一下涉及到的参数

--dbpath   数据文件路径

--logpath  日志文件路径

--port        端口号,默认是27017.我这里使用的也是这个端口号.

--replSet   复制集的名字,一个replica sets中的每个节点的这个参数都要用一个复制集名字,这里是test.

--replSet test/  这个后面跟的是其他standard节点的ip和端口

--maxConns   最大连接数

--fork       后台运行

--logappend   日志文件循环使用,如果日志文件已满,那么新日志覆盖最久日志。

 

启动第一个standard节点(ip:192.168.0.11)

  1. /mongodb/bin/mongod --dbpath=/mongodb/mongodb_date --logpath=/mongodb/mongodb_log/mongod.log --port 27017 --replSet test/192.168.0.12:27017 --maxConns=2000 --fork --logappend

 

启动第二个standard节点 (ip:192.168.0.12)

  1. /mongodb/bin/mongod --dbpath=/mongodb/mongodb_date --logpath=/mongodb/mongodb_log/mongod.log --port 27017 --replSet test/192.168.0.11:27017 --maxConns=2000 --fork --logappend

启动arbiter节点,也就是仲裁节点 (ip:192.168.0.13)。注意!--replSet test/后面写的是两个standard节点的ip和端口

  1. /mongodb/bin/mongod --dbpath=/mongodb/mongodb_date --logpath=/mongodb/mongodb_log/mongod.log --port 27017 --replSet test/192.168.0.11:27017,192.168.0.12:27017 --fork --logappend

2.很关键的一步,配置完上面,下面开始初始化各个节点。在第二个启动的节点上,运行mongo

  1. db.runCommand({"replSetInitiate" : {

  2. "_id" : "test",

  3. "members" : [

  4. {

  5. "_id" : 0,

  6. "host" : "192.168.0.11:27017"

  7. },

  8. {

  9. "_id" : 1,

  10. "host" : "192.168.0.12:27017"

  11. }

  12. ]}})

3.加入arbiter节点

  1. PRIMARY> rs.addArb("192.16.0.13:27017");

 

到了这里,这个集群已经配置完成,三个节点的角色已经分配完毕,怎么查看是否正常呢

1.rs.status()通过这个命令,可以查看各个节点的ip、角色已经是否正常

2.rs.stepDown()   这个命令可以强制primary和standard节点角色互换,从而验证是否能够实现failover功能。

 

---------------------2012-08-14 更新---------------------

注意:添加新节点前,一定要配置好防火墙,开放对应的IP及PORT。


添加普通数据节点

  1. PRIMARY> rs.add("ip:port")

删除节点
  1. PRIMARY> rs.remove("ip:port")

显示当前谁是primay
  1. PRIMARY> rs.isMaster()


将一个普通数据节点修改为passive节点,也就是能同步数据、投票,但是不能成为primay。
除了仲裁节点,其他每个节点都有个优先权,我们可以通过设置优先权来决定谁的成为primay的权重最大。
MongoDB replica sets中通过设置priority的值来决定优先权的大小,这个值的范围是0--100,值越大,优先权越高。
如果值是0,那么不能成为primay。 

1.通过rs.conf()命令查看出节点列表

  1. PRIMARY> rs.conf()
  2. {
  3. "_id" : "test",
  4. "version" : 22,
  5. "members" : [
  6. {
  7. "_id" : 3,
  8. "host" : "192.168.22.36:27017"
  9. },
  10. {
  11. "_id" : 5,
  12. "host" : "192.168.22.10:27017"
  13. },
  14. {
  15. "_id" : 6,
  16. "host" : "192.168.22.12:27017",
  17. "priority" : 0,
  18. "arbiterOnly" : true
  19. },
  20. {
  21. "_id" : 7,
  22. "host" : "192.168.22.115:27017"
  23. }
  24. ]
  25. }


2.将上面红色的192.168.22.10节点的priority值修改成0,让它只接收数据,不参与成为primary的竞争。

命令格式如下:
  1. cfg = rs.conf()
  2. cfg.members[0].priority = 0.5
  3. cfg.members[1].priority = 2
  4. cfg.members[2].priority = 2
  5. rs.reconfig(cfg)
说明:cfg.members[0].priority =
红色中括号中的数字是执行rs.conf()得出的节点顺序,第一个节点在这里写0,第二个节点写1,依次类推。

执行命令
  1. cfg = rs.conf()
  2. cfg.members[1].priority = 0
  3. rs.reconfig(cfg)


3.查看结果,192.168.22.10的优先权变为0.

点击(此处)折叠或打开

  1. PRIMARY> rs.conf()
  2. {
  3. "_id" : "test",
  4. "version" : 22,
  5. "members" : [
  6. {
  7. "_id" : 3,
  8. "host" : "192.168.22.36:27017"
  9. },
  10. {
  11. "_id" : 5,
  12. "host" : "192.168.22.10:27017"
  13. "priority" : 0
  14. },
  15. {
  16. "_id" : 6,
  17. "host" : "192.168.22.12:27017",
  18. "priority" : 0,
  19. "arbiterOnly" : true
  20. },
  21. {
  22. "_id" : 7,
  23. "host" : "192.168.22.115:27017"
  24. }
  25. ]
  26. }

类别:技术文章 | 阅读:252368 | 评论:0 | 标签:mongodb replica set

想收藏或者和大家分享这篇好文章→

“mongodb replica sets(复制集)配置与搭建 ”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

taoCMS发布taoCMS 3.0.2(最后更新21年03月15日),请大家速速升级,欢迎大家试用和提出您宝贵的意见建议。

捐助与联系

☟请使用新浪微博联系我☟

☟在github上follow我☟

标签云