前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MongoDB 副本集配置详解

MongoDB 副本集配置详解

作者头像
星哥玩云
发布2022-08-17 15:07:01
5200
发布2022-08-17 15:07:01
举报
文章被收录于专栏:开源部署

MongoDB复制是将数据同步在多个服务器的过程。复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。 复制还允许您从硬件故障和服务中断中恢复数据。

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

mongodb.conf

  1 # Start MongoDB as a daemon on port 27017                                                                                                                    2   3 port = 27017   4 fork = true   5 replSet = test_replica_set   6 dbpath = /datatest/db   7 logpath = /datatest/db/test.log   8 logappend = true   9

mongodb2.conf

  2   3 port = 27017   4 fork = true   5 replSet = test_replica_set   6 dbpath = /datatest/db   7 logpath = /datatest/db/test.log   8 logappend = true   9

mongodb3.conf

  2   3 port = 27017   4 fork = true   5 replSet = test_replica_set   6 dbpath = /datatest/db   7 logpath = /datatest/db/test.log   8 logappend = true   9

mac-abeen:bin abeen$ sudo ./mongod -f mongodb.conf about to fork child process, waiting until server is ready for connections. forked process: 37181 child process started successfully, parent exiting mac-abeen:bin abeen$ sudo ./mongod -f mongodb2.conf about to fork child process, waiting until server is ready for connections. forked process: 37185 child process started successfully, parent exiting mac-abeen:bin abeen$ sudo ./mongod -f mongodb3.conf about to fork child process, waiting until server is ready for connections. forked process: 37189 child process started successfully, parent exiting

  • 3 初始化副本集

mac-abeen:bin abeen$ ./mongo --nodb MongoDB shell version: 3.2.8 > config = {} { } > config = {"_id": "test_replica_set", "members": [         {"_id": 0, "host": "192.168.0.10:27017"},         {"_id": 1, "host": "192.168.0.20:27017"},         {"_id": 2, "host": "192.168.0.30:27017"}]}

{     "_id" : "test_replica_set",     "members" : [         {             "_id" : 0,             "host" : "192.168.0.10:27017"         },         {             "_id" : 1,             "host" : "192.168.0.20:27017"         },         {             "_id" : 2,             "host" : "192.168.0.30:27017"         }     ] } > db = (new Mongo("192.168.0.10:27017")).getDB("test") test > rs.initiate(config) { "ok" : 1 } test_replica_set:OTHER>

test_replica_set:PRIMARY> rs.config() {     "_id" : "test_replica_set",     "version" : 1,     "protocolVersion" : NumberLong(1),     "members" : [         {             "_id" : 0,             "host" : "192.168.0.10:27017",             "arbiterOnly" : false,             "buildIndexes" : true,             "hidden" : false,             "priority" : 1,             "tags" : {             },             "slaveDelay" : NumberLong(0),             "votes" : 1         },         {             "_id" : 1,             "host" : "192.168.0.20:27017",             "arbiterOnly" : false,             "buildIndexes" : true,             "hidden" : false,             "priority" : 1,             "tags" : {             },             "slaveDelay" : NumberLong(0),             "votes" : 1         },         {             "_id" : 2,             "host" : "192.168.0.30:27017",             "arbiterOnly" : false,             "buildIndexes" : true,             "hidden" : false,             "priority" : 1,             "tags" : {             },             "slaveDelay" : NumberLong(0),             "votes" : 1         }     ],     "settings" : {         "chainingAllowed" : true,         "heartbeatIntervalMillis" : 2000,         "heartbeatTimeoutSecs" : 10,         "electionTimeoutMillis" : 10000,         "getLastErrorModes" : {         },         "getLastErrorDefaults" : {             "w" : 1,             "wtimeout" : 0         },         "replicaSetId" : ObjectId("5850f445c8cacd70496883b0")     } }

  • 4 写入数据并查看副本集数据

test_replica_set:PRIMARY> test_replica_set:PRIMARY> for (i=0; i < 100; i++){db.coll.insert({"count": i})} WriteResult({ "nInserted" : 1 }) test_replica_set:PRIMARY> db.coll.count() 100 test_replica_set:PRIMARY> db.coll.find().limit(5) { "_id" : ObjectId("5850f5f35f1a7d82c0b45b51"), "count" : 0 } { "_id" : ObjectId("5850f5f35f1a7d82c0b45b52"), "count" : 1 } { "_id" : ObjectId("5850f5f35f1a7d82c0b45b53"), "count" : 2 } { "_id" : ObjectId("5850f5f35f1a7d82c0b45b54"), "count" : 3 } { "_id" : ObjectId("5850f5f35f1a7d82c0b45b55"), "count" : 4 }

  • 5 查看副本集是否有数据

mac-abeen:bin abeen$ ./mongo --port 27017 --host 192.168.0.20 MongoDB shell version: 3.2.8 connecting to: 192.168.0.20:27017/test

test_replica_set:SECONDARY> db.coll.find().limit(5) Error: error: { "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435 } 设置连接可读取数据 test_replica_set:SECONDARY> db.setSlaveOk() 副本中已有数据 test_replica_set:SECONDARY> db.coll.find().limit(5) { "_id" : ObjectId("5850f5f35f1a7d82c0b45b53"), "count" : 2 } { "_id" : ObjectId("5850f5f35f1a7d82c0b45b55"), "count" : 4 } { "_id" : ObjectId("5850f5f35f1a7d82c0b45b52"), "count" : 1 } { "_id" : ObjectId("5850f5f35f1a7d82c0b45b54"), "count" : 3 } { "_id" : ObjectId("5850f5f35f1a7d82c0b45b51"), "count" : 0 }

修改副本集

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

修改副本集,通过rs.reconfig

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

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

var config = rs.config() config.members[1].host = "newsserver:27017" //修改host rs.reconfig(config)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建副本集时注意
  • 配置副本集
  • 修改副本集
  • 修改副本集,通过rs.reconfig
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档