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" : ,
"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数据库主从同步配置方法的更多相关文章
- Docker Mysql数据库主从同步配置方法
一.背景 最近在做内部平台架构上的部署调整,顺便玩了一下数据库的主从同步,特此记录一下操作- 二.具体操作 1.先建立数据存放目录(-/test/mysql_test/) --mysql --mast ...
- Linux下MySQL数据库主从同步配置
说明: 操作系统:CentOS 5.x 64位 MySQL数据库版本:mysql-5.5.35 MySQL主服务器:192.168.21.128 MySQL从服务器:192.168.21.129 准备 ...
- 简单的MySQL数据库主从同步配置
Master配置: 代码如下 复制代码 log-bin = mysql-binserver-id = 1binlog-do-db = powerdns #要同步的数据库 Master新增slave账号 ...
- MySQL数据库主从同步配置
主服务器必须打开开二进制日志. 主要是修改配置文件 , 一般在 linux 下安装的 mysql 配置文件是 my.cnf, 在 windwos 下是 my.ini, 修改主服务器配置文件 serve ...
- centos 5.4中mysql主从同步配置方法
安装环境•centos 5.4•mysql 5.1.xx 采用rpm直接安装•xtrabackup 1.2.22 采用rpm直接安装1. Master:/etc/my.cnf 代码如下 复制代码 [ ...
- Docker Mongo数据库主主同步配置方法
一.背景 不多说,请看第一篇<Docker Mongo数据库主从同步配置方法> 二.具体操作方法 1.创建目录,如创建~/test/mongo_sr1和-/test/mongo_sr2两个 ...
- Docker Mysql数据库双主同步配置方法
一.背景 可先查看第一篇<Docker Mysql数据库主从同步配置方法>介绍 二.具体操作 1.创建目录(~/test/mysql_test1): --mysql --mone --da ...
- mysql数据库备份之主从同步配置
主从同步意义? 主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave).因为复制是异步进行的,所以从服务 ...
- Docker Mysql主从同步配置搭建
Docker Mysql主从同步配置搭建 建立目录 在虚拟机中建立目录,例如路径/home/mysql/master/data,目录结构如下: Linux中 新建文件夹命令:mkdir 文件夹名 返回 ...
随机推荐
- Java BigDecimal详解,提供了丰富的四舍五入规则
java.math.BigDecimal类提供用于算术,刻度操作,舍入,比较,哈希算法和格式转换操作. toString()方法提供BigDecimal的规范表示.它使用户可以完全控制舍入行为. 提供 ...
- 【基础】链表的储存结构说明(python)
[实现链表的添加] class aNode(): def __init__(self,data=None,nxt=None): self.data=data self.nxt=nxt class ru ...
- ELK日志分析方案
针对公司项目微服务化,随着项目及服务器的不断增多,决定采用ELK(Elasticsearch+Logstash+Kibana)日志分析平台进行微服务日志分析. 1.ELK整体方案 1.1 ELK架构图 ...
- Xamarin Essentials教程振动Vibration
Xamarin Essentials教程振动Vibration 振动是提醒用户的有效方式,尤其是声音提示效果不明显的场景中,如吵杂的环境中,手机放到包中.在很多的游戏中,振动还用来模拟游戏特效,如 ...
- UVA 207 PGA Tour Prize Money
知识补充: ①:ssprintf: int sprintf(char *str, const char *format, ...) 发送格式化输出到 str 所指向的字符串. char str[80] ...
- Java并发编程(八)-- 死锁
简介 当两个以上的运算单元,双方都在等待对方停止运行,以获取系统资源,但是没有一方提前退出时,就称为死锁.在多任务操作系统中,操作系统为了协调不同进程,能否获取系统资源时,为了让系统运作,必须要解决这 ...
- 2554 ACM 杭电 数学
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2554 中文题目,题意易懂.但是本题涉及到很强的数学思维. 思路:看了题意后:我的第一反应是除了 n=1,n ...
- luffy项目的接口开发
处理跨域请求 主要的思路: 设置一个基于CORS的中间件来处理,关于跨域的产生与处理手段 settings.py: MIDDLEWARE = [ 'django.middleware.security ...
- ajax 浏览网页等待页面
- Java API实现Hadoop文件系统增删改查
Java API实现Hadoop文件系统增删改查 Hadoop文件系统可以通过shell命令hadoop fs -xx进行操作,同时也提供了Java编程接口 maven配置 <project x ...