一、具体操作方法

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" : ,
"term" : NumberLong(),
"syncingTo" : "172.17.0.13:27017",
"heartbeatIntervalMillis" : NumberLong(),
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(, ),
"t" : NumberLong()
},
"readConcernMajorityOpTime" : {
"ts" : Timestamp(, ),
"t" : NumberLong()
},
"appliedOpTime" : {
"ts" : Timestamp(, ),
"t" : NumberLong()
},
"durableOpTime" : {
"ts" : Timestamp(, ),
"t" : NumberLong()
}
},
"members" : [
{
"_id" : ,
"name" : "172.17.0.13:27017",
"health" : ,
"state" : ,
"stateStr" : "PRIMARY",
"uptime" : ,
"optime" : {
"ts" : Timestamp(, ),
"t" : NumberLong()
},
"optimeDurable" : {
"ts" : Timestamp(, ),
"t" : NumberLong()
},
"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(),
"electionTime" : Timestamp(, ),
"electionDate" : ISODate("2018-07-07T01:48:14Z"),
"configVersion" :
},
{
"_id" : ,
"name" : "172.17.0.14:27017",
"health" : ,
"state" : ,
"stateStr" : "SECONDARY",
"uptime" : ,
"optime" : {
"ts" : Timestamp(, ),
"t" : NumberLong()
},
"optimeDate" : ISODate("2018-07-07T01:53:07Z"),
"syncingTo" : "172.17.0.13:27017",
"configVersion" : ,
"self" : true
}
],
"ok" : ,
"operationTime" : Timestamp(, )
}

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来实现主从同步的操作方法,喜欢的可以关注公众号哦~

Docker Mongo数据库主从同步配置方法的更多相关文章

  1. Docker Mysql数据库主从同步配置方法

    一.背景 最近在做内部平台架构上的部署调整,顺便玩了一下数据库的主从同步,特此记录一下操作- 二.具体操作 1.先建立数据存放目录(-/test/mysql_test/) --mysql --mast ...

  2. Linux下MySQL数据库主从同步配置

    说明: 操作系统:CentOS 5.x 64位 MySQL数据库版本:mysql-5.5.35 MySQL主服务器:192.168.21.128 MySQL从服务器:192.168.21.129 准备 ...

  3. 简单的MySQL数据库主从同步配置

    Master配置: 代码如下 复制代码 log-bin = mysql-binserver-id = 1binlog-do-db = powerdns #要同步的数据库 Master新增slave账号 ...

  4. MySQL数据库主从同步配置

    主服务器必须打开开二进制日志. 主要是修改配置文件 , 一般在 linux 下安装的 mysql 配置文件是 my.cnf, 在 windwos 下是 my.ini, 修改主服务器配置文件 serve ...

  5. centos 5.4中mysql主从同步配置方法

    安装环境•centos 5.4•mysql 5.1.xx 采用rpm直接安装•xtrabackup 1.2.22 采用rpm直接安装1. Master:/etc/my.cnf  代码如下 复制代码 [ ...

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

    一.背景 不多说,请看第一篇<Docker Mongo数据库主从同步配置方法> 二.具体操作方法 1.创建目录,如创建~/test/mongo_sr1和-/test/mongo_sr2两个 ...

  7. Docker Mysql数据库双主同步配置方法

    一.背景 可先查看第一篇<Docker Mysql数据库主从同步配置方法>介绍 二.具体操作 1.创建目录(~/test/mysql_test1): --mysql --mone --da ...

  8. mysql数据库备份之主从同步配置

    主从同步意义? 主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave).因为复制是异步进行的,所以从服务 ...

  9. Docker Mysql主从同步配置搭建

    Docker Mysql主从同步配置搭建 建立目录 在虚拟机中建立目录,例如路径/home/mysql/master/data,目录结构如下: Linux中 新建文件夹命令:mkdir 文件夹名 返回 ...

随机推荐

  1. for循环的简介及break和continue的区别

    break和continue都是用来控制循环结构的,主要是停止循环. 1.break 有时候我们想在某种条件出现的时候终止循环而不是等到循环条件为false才终止. 这是我们可以使用break来完成. ...

  2. Double.parseDouble(String s)

    要把字符串转换为Double类型,只能转换“0.02”这种格式的字符串,不能转换百分比格式的,比如“2%” 这个时候可以Double cbl= Double.parseDouble(“2%”.repl ...

  3. MySQL 安装包下载教程

    http://www.mysql.com/downloads/

  4. SQL varbinary varchar 互转

    --============================================== -- FUNCTION varbin2hexstr -- 将 varbinary 类型的数据转换为 v ...

  5. CODEVS 1074 食物链 2001年NOI全国竞赛(洛谷 P2024)

    题目描述 Description 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A吃B,B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并 ...

  6. No compiler is provided in this environment.Perhaps you are running on a JRE rather than a JDK?报错解决

    Maven install 时出现如上错误. Eclipse-->Window-->preferences-->Java-->Installed JREs 查看jdk: 发现此 ...

  7. python高级——垃圾回收机制

    GC作为现代编程语言的自动内存管理机制,专注于两件事:1. 找到内存中无用的垃圾资源 2. 清除这些垃圾并把内存让出来给其他对象使用.GC彻底把程序员从资源管理的重担中解放出来,让他们有更多的时间放在 ...

  8. [CF961E] Tufurama

    Description: 有一天Polycarp决定重看他最喜爱的电视剧<Tufurama>.当他搜索"在线全高清免费观看Tufurama第3季第7集"却只得到第7季第 ...

  9. [P2119]魔法阵 (模拟?搜索?)

    很玄学 我暴力都没做出来 #include <cstdio> ],vis[],a[],b[],c[],d[]; int main() { //freopen("magic.in& ...

  10. 关于js函数对象的理解

    js中函数和对象的关系: 什么是对象?根据W3C上面的解释JS中所有事物都是对象,对象是拥有属性和方法的数据,由此可以看出除了基 本值类型不是对象(number.string.Boolean.Unde ...