Docker Mongo数据库主从同步配置方法

网友投稿 336 2022-10-25

Docker Mongo数据库主从同步配置方法

一、具体操作方法

1、启两个Mongo容器

docker run --name mongo1 -p 21117:27017 -d mongo --noprealloc --smallfiles --replSet rs1 docker run --name mongo2 -p 22117:27017 -d mongo --noprealloc --smallfiles --replSet rs1

也可以在启动容器的时候,自定义Mongo数据存放路径,且将mongo数据挂载到本地

docker run --name mongo_rs1 -v ~/test/mongo_sr1:/mongodb -p 21117:27017 -d mongo mongod --logpath /mongodb/mongo.log  --logappend --dbpath /mongodb --replSet rs1 docker run --name mongo_rs2 -v ~/test/mongo_sr2:/mongodb -p 22117:27017 -d mongo mongod --logpath /mongodb/mongo.log  --logappend --dbpath /mongodb --replSet rs1

2、查看正在运行的容器

docker ps | grep mongo

3、查看mongo1、mongo2容器ip

docker inspect mongo1 | grep IPA

4、使用本机(宿主机)mongo客户端连接到21117端口(即连接到mongo1容器)

mongo --port 21117

5、开始配置 复制集的成员信息

myconf = {"_id":"rs1","members":[{"_id":0,"host":"172.17.0.13:27017"},{"_id":1,"host":"172.17.0.14:27017"}]}

6、初始化同步复制集群

rs.initiate(myconf)

注意:在启动容器时,--replSet rs1 这个值mongo1和mongo2要保持一致,否则在初始化同步时,会出错。

7、查看当前复制集的节点信息

rs.isMaster()

可以看出连接到的容器ip是172.17.0.13 也可以看见谁是主节点

查看状态

rs.status()

查看配置

rs.conf()

8、另外在本地再开一个终端 连接到第二个容器

mongo --port 22117

查看当前master

rs.isMaster()

可以看到主节点的信息 和上个容器的信息一致

rs.status()

{    "set" : "rs1",    "date" : ISODate("2018-07-07T01:53:14.330Z"),    "myState" : 2,    "term" : NumberLong(1),    "syncingTo" : "172.17.0.13:27017",    "heartbeatIntervalMillis" : NumberLong(2000),    "optimes" : {        "lastCommittedOpTime" : {            "ts" : Timestamp(1530928387, 1),            "t" : NumberLong(1)         },        "readConcernMajorityOpTime" : {            "ts" : Timestamp(1530928387, 1),            "t" : NumberLong(1)         },        "appliedOpTime" : {            "ts" : Timestamp(1530928387, 1),            "t" : NumberLong(1)         },        "durableOpTime" : {            "ts" : Timestamp(1530928387, 1),            "t" : NumberLong(1)         }     },    "members" : [         {            "_id" : 0,            "name" : "172.17.0.13:27017",            "health" : 1,            "state" : 1,            "stateStr" : "PRIMARY",            "uptime" : 310,            "optime" : {                "ts" : Timestamp(1530928387, 1),                "t" : NumberLong(1)             },            "optimeDurable" : {                "ts" : Timestamp(1530928387, 1),                "t" : NumberLong(1)             },            "optimeDate" : ISODate("2018-07-07T01:53:07Z"),            "optimeDurableDate" : ISODate("2018-07-07T01:53:07Z"),            "lastHeartbeat" : ISODate("2018-07-07T01:53:12.960Z"),            "lastHeartbeatRecv" : ISODate("2018-07-07T01:53:12.960Z"),            "pingMs" : NumberLong(0),            "electionTime" : Timestamp(1530928094, 1),            "electionDate" : ISODate("2018-07-07T01:48:14Z"),            "configVersion" : 1         },         {            "_id" : 1,            "name" : "172.17.0.14:27017",            "health" : 1,            "state" : 2,            "stateStr" : "SECONDARY",            "uptime" : 366,            "optime" : {                "ts" : Timestamp(1530928387, 1),                "t" : NumberLong(1)             },            "optimeDate" : ISODate("2018-07-07T01:53:07Z"),            "syncingTo" : "172.17.0.13:27017",            "configVersion" : 1,            "self" : true         }     ],    "ok" : 1,    "operationTime" : Timestamp(1530928387, 1) }

9、如果在从节点此时查看数据库会出错 ,信息显示不是主节点

show dbs;

设置从节点可以读

db.getMongo().setSlaveOk();

或者用

rs.slaveOk()

10、在主节点mongo1中插入数据

show dbs; use test; db.user1.insert({"name":"mongodb is user1"}) db.user2.insert({"name":"mongodb is user2"})

11、在从节点mongo2中查看

show dbs; use test; show collections; db.user1.find() db.user2.find()

可以看到在mongo1插入的数据,同步到了mongo2数据库来了~

13、此时如果在mongo2从节点中插入数据

db.user3.insert({"name":"mongodb is user3"})

可以看到提示不是master主节点,无法写数据~

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:支持热插拔功能的接口有哪些,不支持热插拔的接口类型是什么
下一篇:关于Spring Cloud 本地属性覆盖的问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~