一、具体操作方法

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. 如何让你的数据有null

    2018-11-13   09:25:17 如何让你的数据有null 返回时null属性不显示: String str = JSONObject.toJSONString(obj); 返回为null属 ...

  2. CodeForces 161D Distance in Tree【树形DP】

    <题目链接> 题目大意:一颗无向无环树,有n个顶点,求其中距离为k的点对数是多少,(u,v)与(v,u)为同一点对. #include <cstdio> #include &l ...

  3. JS变量声明方式

    在JavaScript中有三种声明变量的方式:const  var let const:用于声明常量.注意:定义的变量的时候,必须同时初始化,且其值之后不可以修改. var:最常用的声明变量关键字.  ...

  4. linux 学习笔记 tail 命令

    #tail -f -n 100 catalina.out 含义:从文件尾部监视catalina.out文件  主要看尾部100行 #tail -f -n 100 catalina.out > n ...

  5. react编码规范

    1.每个文件只写一个组件,但是多个无状态组件可以放在单个文件中: 2.有内部状态,方法或要对外暴露ref的组件,用类式组件: 3.无内部状态,方法或无需对外暴露ref的组件,用函数式组件: 4.有内部 ...

  6. Mac如何彻底卸载Mysql

    因为工作变动,到新公司需要安装开发环境,因为电脑是我的“前任”在使用,一般的开发环境都有,就直接上手代码,连接公司数据库.直到某天打算自己写点东西,连接本地的mysql,发现navicat怎么都连接不 ...

  7. (数据存储)Android系统存储数据

    移动设备需要存储数据,处理数据并输出处理后的信息. 主题一:存储键值对 If you have a relatively small collection of key-values that you ...

  8. nodejs,koa2常用模块

    "dependencies": { "multer": "^1.2.0", "node-schedule": " ...

  9. C++学习笔记51:排序

    //直接插入排序函数模板 template <class T> void insertionSort(T a[], int n) { int i, ; T temp; ; i < n ...

  10. Flask特殊装饰器

    @app.errorhandler():重定义错误返回信息 @app.errorhandler(404) #监听多少写多少 def error404(message): return f"你 ...