MongoDB 副本集配置

MongoDB复制是将数据同步在多个服务器的过程。

复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。

复制还允许您从硬件故障和服务中断中恢复数据。

创建副本集时注意

  1. 版本: 各副本集服务器的MongoDB版本一致或支持同样的replSet功能
  2. 网络: 副本集内的每个成员都必须能够连接到其他成员(包括自身),启动时注意bind_ip --bind_ip_all.

配置副本集

  • 1 建立配置文件
  1. mongodb.conf
  2. 1 # Start MongoDB as a daemon on port 27017
  3. 2
  4. 3 port = 27017
  5. 4 fork = true
  6. 5 replSet = test_replica_set
  7. 6 dbpath = /datatest/db
  8. 7 logpath = /datatest/db/test.log
  9. 8 logappend = true
  10. 9
  11. mongodb2.conf
  12. 2
  13. 3 port = 27017
  14. 4 fork = true
  15. 5 replSet = test_replica_set
  16. 6 dbpath = /datatest/db
  17. 7 logpath = /datatest/db/test.log
  18. 8 logappend = true
  19. 9
  20. mongodb3.conf
  21. 2
  22. 3 port = 27017
  23. 4 fork = true
  24. 5 replSet = test_replica_set
  25. 6 dbpath = /datatest/db
  26. 7 logpath = /datatest/db/test.log
  27. 8 logappend = true
  28. 9
  • 2 启动数据库
  1. mac-abeen:bin abeen$ sudo ./mongod -f mongodb.conf
  2. about to fork child process, waiting until server is ready for connections.
  3. forked process: 37181
  4. child process started successfully, parent exiting
  5. mac-abeen:bin abeen$ sudo ./mongod -f mongodb2.conf
  6. about to fork child process, waiting until server is ready for connections.
  7. forked process: 37185
  8. child process started successfully, parent exiting
  9. mac-abeen:bin abeen$ sudo ./mongod -f mongodb3.conf
  10. about to fork child process, waiting until server is ready for connections.
  11. forked process: 37189
  12. child process started successfully, parent exiting
  • 3 初始化副本集
  1. mac-abeen:bin abeen$ ./mongo --nodb
  2. MongoDB shell version: 3.2.8
  3. > config = {}
  4. { }
  5. > config = {"_id": "test_replica_set", "members": [
  6. {"_id": 0, "host": "192.168.0.10:27017"},
  7. {"_id": 1, "host": "192.168.0.20:27017"},
  8. {"_id": 2, "host": "192.168.0.30:27017"}]}
  9. {
  10. "_id" : "test_replica_set",
  11. "members" : [
  12. {
  13. "_id" : 0,
  14. "host" : "192.168.0.10:27017"
  15. },
  16. {
  17. "_id" : 1,
  18. "host" : "192.168.0.20:27017"
  19. },
  20. {
  21. "_id" : 2,
  22. "host" : "192.168.0.30:27017"
  23. }
  24. ]
  25. }
  26. > db = (new Mongo("192.168.0.10:27017")).getDB("test")
  27. test
  28. > rs.initiate(config)
  29. { "ok" : 1 }
  30. test_replica_set:OTHER>
  31. test_replica_set:PRIMARY> rs.config()
  32. {
  33. "_id" : "test_replica_set",
  34. "version" : 1,
  35. "protocolVersion" : NumberLong(1),
  36. "members" : [
  37. {
  38. "_id" : 0,
  39. "host" : "192.168.0.10:27017",
  40. "arbiterOnly" : false,
  41. "buildIndexes" : true,
  42. "hidden" : false,
  43. "priority" : 1,
  44. "tags" : {
  45. },
  46. "slaveDelay" : NumberLong(0),
  47. "votes" : 1
  48. },
  49. {
  50. "_id" : 1,
  51. "host" : "192.168.0.20:27017",
  52. "arbiterOnly" : false,
  53. "buildIndexes" : true,
  54. "hidden" : false,
  55. "priority" : 1,
  56. "tags" : {
  57. },
  58. "slaveDelay" : NumberLong(0),
  59. "votes" : 1
  60. },
  61. {
  62. "_id" : 2,
  63. "host" : "192.168.0.30:27017",
  64. "arbiterOnly" : false,
  65. "buildIndexes" : true,
  66. "hidden" : false,
  67. "priority" : 1,
  68. "tags" : {
  69. },
  70. "slaveDelay" : NumberLong(0),
  71. "votes" : 1
  72. }
  73. ],
  74. "settings" : {
  75. "chainingAllowed" : true,
  76. "heartbeatIntervalMillis" : 2000,
  77. "heartbeatTimeoutSecs" : 10,
  78. "electionTimeoutMillis" : 10000,
  79. "getLastErrorModes" : {
  80. },
  81. "getLastErrorDefaults" : {
  82. "w" : 1,
  83. "wtimeout" : 0
  84. },
  85. "replicaSetId" : ObjectId("5850f445c8cacd70496883b0")
  86. }
  87. }
  • 4 写入数据并查看副本集数据
  1. test_replica_set:PRIMARY>
  2. test_replica_set:PRIMARY> for (i=0; i < 100; i++){db.coll.insert({"count": i})}
  3. WriteResult({ "nInserted" : 1 })
  4. test_replica_set:PRIMARY> db.coll.count()
  5. 100
  6. test_replica_set:PRIMARY> db.coll.find().limit(5)
  7. { "_id" : ObjectId("5850f5f35f1a7d82c0b45b51"), "count" : 0 }
  8. { "_id" : ObjectId("5850f5f35f1a7d82c0b45b52"), "count" : 1 }
  9. { "_id" : ObjectId("5850f5f35f1a7d82c0b45b53"), "count" : 2 }
  10. { "_id" : ObjectId("5850f5f35f1a7d82c0b45b54"), "count" : 3 }
  11. { "_id" : ObjectId("5850f5f35f1a7d82c0b45b55"), "count" : 4 }
  • 5 查看副本集是否有数据
  1. mac-abeen:bin abeen$ ./mongo --port 27017 --host 192.168.0.20
  2. MongoDB shell version: 3.2.8
  3. connecting to: 192.168.0.20:27017/test
  4. test_replica_set:SECONDARY> db.coll.find().limit(5)
  5. Error: error: { "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435 }
  6. 设置连接可读取数据
  7. test_replica_set:SECONDARY> db.setSlaveOk()
  8. 副本中已有数据
  9. test_replica_set:SECONDARY> db.coll.find().limit(5)
  10. { "_id" : ObjectId("5850f5f35f1a7d82c0b45b53"), "count" : 2 }
  11. { "_id" : ObjectId("5850f5f35f1a7d82c0b45b55"), "count" : 4 }
  12. { "_id" : ObjectId("5850f5f35f1a7d82c0b45b52"), "count" : 1 }
  13. { "_id" : ObjectId("5850f5f35f1a7d82c0b45b54"), "count" : 3 }
  14. { "_id" : ObjectId("5850f5f35f1a7d82c0b45b51"), "count" : 0 }

修改副本集

  1. rs.add("server-4:27017") //添加
  2. rs.addArb("server-4:27017") //添加选举仲裁者
  3. rs.add({"_id": 4, "host": "server-4:27017", "arbiterOnly": true) //添加选举仲裁者
  4. rs.add({"_id": 5, "host": "server-5:27017", "priority": 0, "hidden": true) //添加隐藏成员
  5. rs.remove("server-4:27017") //移除

修改副本集,通过rs.reconfig

rs.reconfig修改副本集成员时限制

  • 不能修改成员的_id 字段
  • 不能将接收rs.reconfig命令的成员(通常是主节点)的优先级设为0
  • 不能仲裁者成员变为非仲裁者成员,反之亦然.
  • 不能将buildIndexes: false的成员修改为buildIndexes: true

    可以修改其他,比如host
  1. var config = rs.config()
  2. config.members[1].host = "newsserver:27017" //修改host
  3. rs.reconfig(config)

[Database] MongoDB 副本集配置的更多相关文章

  1. mongodb副本集配置

    需要用到mongodb的时候单个实例肯定是不行的,挂了怎么办,那然后呢,跟mysql一样搞主从备份吗,是可以的mongodb这么弄,不过官网已经不推荐了这么干了,推荐使用副本集的模式,然后数据再大一点 ...

  2. MongoDB副本集配置系列五:副本集的在线迁移

    MongoDB副本集的在线迁移 查看当前集群的状态: { "setName" : "gechongrepl", "setVersion" : ...

  3. MongoDB副本集配置系列三:副本集的认证方式

    1:副本集配置参考这篇博客: http://www.cnblogs.com/xiaoit/p/4478951.html 2:副本集的认证 假设有两台机器已经配置好了副本集(副本集罪一般最少3台机器,这 ...

  4. 分布式文档存储数据库(MongoDB)副本集配置

    副本集特征: N 个节点的集群 任何节点可作为主节点 所有写入操作都在主节点上 自动故障转移 自动恢复 相关文章: http://www.cnblogs.com/huangxincheng/archi ...

  5. MongoDB副本集配置系列十一:MongoDB 数据同步原理和自动故障转移的原理

    1:数据同步的原理: 当Primary节点完成数据操作后,Secondary会做出一系列的动作保证数据的同步: 1:检查自己local库的oplog.rs集合找出最近的时间戳. 2:检查Primary ...

  6. mongodb.副本集配置方法(使用keyfile认证部署)

    前提条件: - 已安装MongoDB, 版本以3.6为例 - 系统: Debian9 - 建议做副本集的话, 以3台以上为宜, 本文以1台主机2个服务为例 1.创建数据存放的目录, 并授权 sudo ...

  7. MongoDB副本集配置系列二:配置MongoDB副本集

    接上一篇博客: http://www.cnblogs.com/xiaoit/p/4479066.html 1:首先创建3台虚拟机作为配置环境 IP1:192.168.91.128 IP2:192.16 ...

  8. MongoDB 副本集配置,开启账号认证

    MongoDB 自带功能强大的主从,配置也很简单,从零开始花了30分钟搞定 3台以上机器IP: 192.168.1.24, 192.168.1.25, 192.168.1.26, 192.168.1. ...

  9. MongoDB副本集配置系列十:MongoDB local库详解和数据同步原理

    1:local库是MongoDB的系统库,记录着时间戳和索引和复制集等信息 gechongrepl:PRIMARY> use local switched to db local gechong ...

随机推荐

  1. webpack3学习笔记

    地址:https://segmentfault.com/a/1190000006843916 地址:https://www.chungold.com/my/course/32 地址:http://js ...

  2. No.11 selenium学习之路之加载浏览器插件for Firefox

    打开帮助 —— 故障排除信息

  3. Centos之其他帮助命令

    选项帮助 命令 -help 获取命令选项的帮助 例如 ls --help 我们会发现用这种方式查看帮助命令 居然还有中文解释: 详细命令帮助info info 命令 -回车:进入子帮助页面(带有*号标 ...

  4. MySQL学习笔记:循环生成5万行id连续的数据

    # ---- mysql循环生成5万行id连续的数据 ---- /* id 1 2 3 4 …… */ CREATE TABLE tb( id ) NOT NULL AUTO_INCREMENT, V ...

  5. Spring整合JDBC以及AOP管理事务

    本节内容: Spring整合JDBC Spring中的AOP管理事务 一.Spring整合JDBC Spring框架永远是一个容器,Spring整合JDBC其实就是Spring提供了一个对象,这个对象 ...

  6. 【LOJ】#2038. 「SHOI2015」超能粒子炮・改

    题解 用lucas随便分析一波就出来了 \(\binom{n}{k} = \binom{n % p}{k % p}\binom{n / p}{k / p}\) 那么对于一个余数r,如果r <= ...

  7. 正规表达式 转 NFA C++

    今天来为大家分享一个编译原理中用正规表达式转NFA的小程序 正规表达式就是类似正则一样的式子,例如:(a|b)*abb,最后应该转化为: 大致的处理流程为: 例子中的表达式:(a|b)*abb,|和* ...

  8. JDK源码分析(二)——LinkedList

    目录 LinkedList LinkedList继承结构 LinkedList内部类Node LinkedList成员属性 LinkedList构造方法 重要方法 Deque方法的实现 遍历 总结 L ...

  9. Initramfs 原理和实践

    Linux系统启动时使用initramfs (initram file system), initramfs可以在启动早期提供一个用户态环境,借助它可以完成一些内核在启动阶段不易完成的工作.当然ini ...

  10. [ 转载 ]学习笔记-深入剖析Java中的装箱和拆箱

    深入剖析Java中的装箱和拆箱 自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱 ...