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主节点,无法写数据~
到此,就给大家介绍完了如何通过docker+mongo来实现主从同步的操作方法,喜欢的可以关注公众号哦~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
2014-07-12 VBS自编写脚本。(实现批量修改文件名且在执行前,备份原有文件夹中的文件)
2014-07-12 在命令提示符下,怎么查看windows开启了哪些服务?