Mongodb 3.4 Replication
官方文档:https://docs.mongodb.com/manual/replication/ 关于ReplSet的文档
https://docs.mongodb.com/manual/reference/configuration-options/#replication-options 关于ReplSet的设置的文档
参考文章:[MongoDB] 安装MongoDB配置Replica Set
Replication:主从结构,一个Primary,多个Secondary,可能会有Arbitry。
Primary挂掉之后,会选举出一个Secondary作为Primary,与zookeeper类似。
Arbitry上面不存数据,只是为了凑数。选举算法要求节点数必须是奇数个,如果Primary+Secondary不是奇数个,就要用Arbitry凑数。
写数据只能在Primary,读数据默认也在Primary,可以配置成从Secondary读,可以选最近的节点。
数据在Primary上写成功之后,会将操作记录在oplog中,Secondary将oplog拷贝过去,然后照着操作一遍,就有数据了。
Primary和Secondary上面的数据保证最终一致性,可以为写操作配置write concern,有几个级别:在Primary上写完就认为写成功;写到oplog后认为写成功;写到一个/多个/某个/某几个Secondary之后认为写成功,等等。
前提:已经有若干台Ubuntu服务器已经安装了mongodb服务,并且已经打开了服务器外访问,关于Ubuntu安装mongodb服务,请参考《Ubuntu 16.04 LTS 安装Mongodb 3.4》
服务器IP ==》新IP 服务器名 节点
192.168.31.209==》192.168.31.210 mongodbServer01 主节点
192.168.31.198==》192.168.31.211 mongodbServer02 副节点
192.168.31.171==》192.168.31.212 mongodbServer03 副节点
设置固定IP配置文件
auto enp0s3
iface enp0s3 inet static #固定IP
address 192.168.31.210 #IP地址
netmask 255.255.255.0 #子网掩码
gateway 192.168.31.1 #网关
dns-nameservers 192.168.31.1 #DNS,我目前使用的是小米的路由器,以上为我的配置
借用官方的图

第一步:修改mongod配置文件(三台服务器都需要操作)
sudo vi /etc/mongod.conf


需要增加的内容即复制集设置中的内容
repliocation:
oplogSizeMB: 1024
replSetName: wesDemoRS
参数说明:
replication.oplogSizeMB
数字,复制操作日志的最大大小(M),该mongod过程基于最大可用空间量创建一个oplog,对于64位系统,oplog通常是可用磁盘的5%,一旦mongod第一次创建了oplog,更改replication.oplogSizeMB将不会影响oplog的大小
replication.replSetName
字符,作为其mongod部分副本集的名称,副本集中的所有主机都必须具有相同的名称,如果应用程序连接到多个副本集,则每个集合应具有不同的名称,某些驱动程序组副本通过副本集名称设置连接
replication.secondaryIndexPrefetch
字符,仅适用于mmapv1存储引擎,在从oplog应用操作之前,副本集的辅助成员加载到内存中的索引,默认情况下,在从oplog应用操作之前,二进制文件将与操作相关的所有索引加载到内存中,可选的值有none/all/_id_only,该设置仅适用于mongod
replication.enableMajorityReadConcern
布尔值,默认为False,版本3.2后的新功能
第二步:重新启动mongodb服务(三台服务器都需要操作)
sudo service mongod restart
sudo service mongod status

第三步:在mongodb主服务器(192.168.31.210)运行命令,启动复制集
#连接mongodb
mongo
#使用admin数据库
use admin
#查看当前的ReplSet的状态
rs.status()

初始化复制集并查看复制集状态,请参考《mongodb复制集搭建》
#初始化ReplSet复制集
rs.initiate({_id:'wesDemoRS',members:[{_id:1,host:'192.168.31.210:27017'}]})
#查看ReplSet复制集状态
rs.status()

第四步:复制集群增加其他服务器(192.168.31.211)
rs.add("192.168.31.211:27017");
rs.add("192.168.31.212:27017");
rs.status();



第五步:测试数据复制集效果,在主节点(192.168.31.210)上插入数据测试
use test
for(var i =0; i <4; i ++){db.user.insert({userName:'wes'+i,age:i})}

查看数据集,三个数据库都有数据,复制数据功能已经运行成功!!

第六步:如主节点掉线,是否会故障转移
现时是
192.168.31.210 主
192.168.31.211 副
192.168.31.212 副
模拟关闭主节点,在主节点,使用db.shutdownServer()命令

在两个副节点查看现时的状态,192.168.31.211变成了主节点,成功实现了故障转移!!


当把原来的主节点重新启动,查看复制集的状态,原来的主节点31.210会变成副节点,主节点依然是原来的31.211

注意:192.168.31.210作为初始化时候的主节点,待服务器全部都重启之后,192.168.31.210依然会变回主节点

其他:我们现时只能在主节点查询数据,但如果想在副节点查询到数据应该怎么做呢?可以在副节点运行以下命令
#在当前连接让secondary可以提供读操作
rs.slaveOk()

如果没有运行命令之前,会出现以下错误
wesDemoRS:SECONDARY> show collections
--01T21::54.665- E QUERY [thread1]Error: listCollections failed:{
"ok":,
"errmsg":"not master and slaveOk=false",
"code":,
"codeName":"NotMasterNoSlaveOk"
}
参考:
Mongodb 3.4 Replication的更多相关文章
- mongodb - Master Slave Replication
master-slave复制模式大多场景下都被replicat sets代替.官方也建议使用replicat sets. master-slave复制不支持自动failover. master-sla ...
- mongodb replication
官方文档:https://docs.mongodb.com/manual/replication/ 启动参数: 通过linux的包管理器(例如:yum)安装的mongodb会产生一个默认的配置文件:/ ...
- MongoDB学习笔记八:复制
[主从复制]最基本的复制方式就是建立一个主节点和一个或多个从节点,每个从节点要知道主节点的地址.运行mongod --master启动主服务器.运行mongod --slave --source ma ...
- Centos下mongodb的安装与配置
安装MongoDB的方法有很多种,可以源代码安装,在Centos也可以用yum源安装的方法. 1.准备工作 运行yum命令查看MongoDB的包信息 yum info mongodb-org (提示没 ...
- mongodb副本集配置
需要用到mongodb的时候单个实例肯定是不行的,挂了怎么办,那然后呢,跟mysql一样搞主从备份吗,是可以的mongodb这么弄,不过官网已经不推荐了这么干了,推荐使用副本集的模式,然后数据再大一点 ...
- Raft与MongoDB复制集协议比较
在一文搞懂raft算法一文中,从raft论文出发,详细介绍了raft的工作流程以及对特殊情况的处理.但算法.协议这种偏抽象的东西,仅仅看论文还是比较难以掌握的,需要看看在工业界的具体实现.本文关注Mo ...
- MongoDB 分片集群技术
在了解分片集群之前,务必要先了解复制集技术! 1.1 MongoDB复制集简介 一组Mongodb复制集,就是一组mongod进程,这些进程维护同一个数据集合.复制集提供了数据冗余和高等级的可靠性,这 ...
- MongoDB ReplicaSet 集群搭建
说明 本文创建的集群的名字为test,在同一台机器上创建了三个mongo实例,端口不同即可. 安装mongodb的教程,之前总结过,请参考:CentOS安装MongoDB笔记 创建实例 # 本机默认原 ...
- mongodb副本集数据同步的踩坑
一.故事 最近随着搞活动比较频繁导致数据库出现了波动,后端日志总是报数据库连接和读取的问题.由于我设置的是读写分离(伪的,通过设置副本集的读取策略实现的,设置的db.getMongo().setRea ...
随机推荐
- HDU 4303 树形DP
Hourai Jeweled Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 163840/163840 K (Java/Others) ...
- springboot-为内置tomcat设置虚拟目录
需求 项目使用springboot开发,以jar包方式部署.项目中文件上传均保存到D判断下的upload目录下. 在浏览器中输入http://localhost:8080/upload/logo_1. ...
- MongoDB入门(3)- MongoDB备份与恢复
1. 备份 MongoDB提供了备份工具,mongodump.exe,在bin目录下,其用法如下: mongodump.exe -h localhost -d database_name -o d:\ ...
- 转:为什么在定义hashcode时要使用31这个数呢?
散列计算就是计算元素应该放在数组的哪个元素里.准确的说是放到哪个链表里面.按照Java的规则,如果你要想将一个对象放入HashMap中,你的对象的类必须提供hashcode方法,返回一个整数值.比如S ...
- Spring structs2 hibernate 整合(ssh)
ssh项目jar包 项目内容: 1. 加入 Spring 1). 加入 jar 包2). 配置 web.xml 文件3). 加入 Spring 的配置文件.(application.xml) 2. 加 ...
- 【spoj1182/usaco-Cow Queueing, 2003 Dec-二进制编号】数位dp
题意:定义新的排序:先按一个数中二进制中1的个数从小到大排序,如果1的个数相同则按数的大小从小到大排序.问[A,B]之间有第K大的数是哪个.-2^31<=A,B<=2^31(A,B必定同正 ...
- 【BZOJ】1700: [Usaco2007 Jan]Problem Solving 解题
[题意]给定n道题,每月末发放工资m,要求从1解到n,每道题需要在当月初付费ai,下月初付费bi,多道题可以安排在同月,求最少月数. [算法]DP [题解]参考自:[bzoj1700]Problem ...
- JS之window对象
window对象 window属性: opener:打开当前窗口的源窗口,如果这个窗口是由别的网页点击链接跳转过来的,或者是从另外一个页面点击打开窗口打开的,opener就是找到源页面的.如果当前窗口 ...
- Coursera在线学习---第八节.K-means聚类算法与主成分分析(PCA)
一.K-means聚类中心初始化问题. 1)随机初始化各个簇类的中心,进行迭代,直到收敛,并计算代价函数J. 如果k=2~10,可以进行上述步骤100次,并分别计算代价函数J,选取J值最小的一种聚类情 ...
- 直观理解js自执行函数
要在函数体后面加括号就能立即调用,则这个函数必须是函数表达式,不能是函数声明: Jslint推荐的写法: (function(){alert(1);}()); 针对函数声明,使用().!.+.-.=. ...