(1)解锁 MongoDB replica set核心姿势
副本集Replica Set是一个术语,定义具有多节点的数据库集群,这些节点具有主从复制(master-slave replication) 且节点之间实现了自动故障转移。
这样的结构通常需要具有奇数个成员的成员(无论是否带有Arbiter节点),以确保正确选出PRIMARY(主)数据库。
选定的DB将处理所有传入的写操作,并将有关它们的信息存储在其oplog,每个辅助(从属)副本成员都可以访问和复制oplog,以应用于它们的数据集。
前置
为创建一个Replica set, 至少需要三个MongoDB实例,请查看官网安装指南.
本文会始终使用sudo指令,一般情况请给MongoDB服务创建一个标准用户mongod。
配置网络
为达到数据一致性,每个实例节点需要与集群其他节点通信,以三实例数据传输为例:
① replica set每个成员都使用私有IP,部署在同一数据中心,这也是推荐方式。
② replica set每个节点使用公网ip,节点部署在不同数据中心(在replication时有网络延迟),这种方式一般用于强灾备部署,如果采用这种方式,需要在主机之间配置SSL/TLS或通过vpn通信
replica set节点认证
本节你会使用openssl创建一个用于在集群成员之间认证的key文件,MongoDB推荐使用x.509证书加密连接。
① 产生key文件
openssl rand -base64 > mongo-keyfile
将生成的key文件拷贝到复制集的每个成员
② 确保复制集成员都能访问同一路径的key文件:
sudo mkdir /opt/mongo
sudo mv ~/mongo-keyfile /opt/mongo
sudo chmod /opt/mongo/mongo-keyfile
③ 默认安装的MongoDB使用标准账户 mongod ,确保mongod对文件有所有权
sudo chown mongod:mongod /opt/mongo/mongo-keyfile
创建Admin用户
登陆你打算设定为 Primary的MongoDB节点,进入admin数据库,创建具有root特权的管理员用户
use admin
db.createUser({user: "mongo-admin", pwd: "password", roles:[{role: "root", db: "admin"}]})
配置MongoDB
修改复制集每个成员的mongod.conf:
net:
port:
bindIp: 127.0.0.1,192.0.2.1
security:
keyFile: /opt/mongo/mongo-keyfile
replication:
replSetName: rs0
指定key文件、replication set名称;
重启服务
sudo systemctl restart mongod
启动集群,添加节点
使用之前创建的管理员账户登陆 Primary MongoDB服务节点:
mongo -u mongo-admin -p --authenticationDatabase admin
① 初始化集群添加节点
rs.initiate()
rs.add("mongo-repl-2")
rs.add("mongo-repl-3")
以上使用hostsname 代替节点ip地址,需要在节点/etc/hosts添加节点的 hosts映射条目。
② 使用rs.conf() 或 rs.status() 验证集群配置和状态
倒腾Replica Set
完成以上步骤,MongoDB 三实例Replica Set已经搭建好了。
登陆Primary节点做一些常规倒腾 (顺便捡漏一些你意想不到的姿势)
① 输入测试数据
use exampleDB
for (var i = ; i <= ; i++) db.exampleCollection.insert( { x : i } )
将会隐式创建exampleDB 和 文档集合exampleCollection。
请注意, 默认创建的Collection是不封顶的。
封顶capped collection 是有固定大小的集合,支持高通量操作,这些操作根据插入顺序插入和检索文档, 以循环缓冲区的形式工作(一旦集合达到分配空间,会通过override 旧的文档来腾挪出新的空间)。
② 观察Secondary节点是否同步到数据
使用创建的管理员账户登陆 Secondary节点,直接查询会报:

因为默认建立的Replica set读写均发生均在Primary节点(Secondary节点的作用是: 冗余备份、故障转移);
不过MongoDB replica set支持在客户端设置read preference(读操作首选项),大部分Driver均支持在连接字符串时指定 read preference读操作首选项,这个设置可实现真正意义的master-slave读写分离。
对应到shell会话,我们需要为本次Secondary会话 开启可读
db.getMongo().setSlaveOk()
或
使用shell命令的读取首选项

回过头来
实操本文,你已经可以完整搭建MongoDB Replica Set, 并大致掌握了副本集的绝大部分特性:主节点读写、辅助节点冗余备份;支持对辅助节点开启读操作。
后面我们聊一聊 副本集故障转移、副本集心跳保活、异步复制的相关姿势。
(1)解锁 MongoDB replica set核心姿势的更多相关文章
- 关于MongoDb Replica Set的故障转移集群——实战篇
如果你还不了解Replica Set的相关理论,请猛戳传送门阅读笔者的上一篇博文. 因为Replica Set已经属于MongoDb的进阶应用,下文中关于MongoDb的基础知识笔者就不再赘述了,请参 ...
- MongoDb Replica Set中使用的地址
Unable to connect to a member of the replica set matching the read preference Primary 今天尝试使用MongoDB ...
- MongoDB 学习笔记(三) MongoDB (replica set) 集群配置
MongoDB Replica Sets的结构类似于以集群,完全可以把他当成一个集群,因为他确实与集群实现的作用是一样的:如果其中一个节点出现故障,其他的节点会马上将业务接管过来.而无需停机操作 Mo ...
- 解锁redis锁的正确姿势
解锁redis锁的正确姿势 redis是php的好朋友,在php写业务过程中,有时候会使用到锁的概念,同时只能有一个人可以操作某个行为.这个时候我们就要用到锁.锁的方式有好几种,php不能在内存中用锁 ...
- mongodb replica set 和 nodejs中使用mongoose连接replica
一.mongodb replication 介绍 官网上的第一句话就是Replication is the process of synchronizing data across multiple ...
- MongoDB Replica Set搭建集群
MongoDB做集群,版本3.2官网推荐的集群方式Replica Set 准备服务器3台 两个standard节点(这两个节点直接可以互切primary secondary). 一个arbiter节点 ...
- mongodb replica set 配置高性能多服务器详解
mongodb的多服务器配置,以前写过一篇文章,是master-slave模式的,请参考:详解mongodb 主从配置.master-slave模式,不能自动实现故障转移和恢复.所以推荐大家使用mon ...
- MongoDB replica set IDs do not match
在搭建MongoDB(版本 3.2.9)的Replica Set时,使用 rs.status() 查看Replica Set的状态,发现一个成员异常:replica set IDs do not ma ...
- MongoDB Replica Set 选举过程
什么是选举? 选举是副本集选择某个成员成为primary的过程.primary是一个副本集中唯一能够接收写操作的成员. 下面的事件能够引发一次选举: 第一次初始化一个副本集 Primary失效.rep ...
随机推荐
- window10+python3.7安装tensorflow--gpu tensorflow 安装
能安装GPU的前提是:1.显卡支持CUDA (1)右击我的电脑–属性 (2)打开设备管理器 (3)显示适配器 我的电脑是支持CUDA的 2.pip 版本 >= 8.1查看pip版本 :pip ...
- 最小生成树prim、
过年那几天确实没好好学习.在老家闲着也是闲着.可是就是没看书. 回来这几天又一直在弄个人博客.买域名云服务器备案什么的- -. 麻烦死了呢. 在腾讯花1块钱备案了一个网站www.goodgoodstu ...
- JavaScript DOM查询,原生js实现元素子节点的获取
在网页网页开发中,经常会需要获取某个网页元素的子元素,然后对其进行事件绑定.或样式修改等行为.这些操作对于jquery来说很容易,但是对于原生js会稍微麻烦一些,这里将介绍四种方法获取元素的子元素(本 ...
- ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(6)之配置文件设置
现在该有的结构和层级都有了,下面我们就开始实际应用,首先把需要用的js,css,图片放到Content文件夹中. 这里不详细讲解,大家可根据自己的实际情况,使用合适自己的前端框架,也可以点击下载本项目 ...
- Linux内核 结构 struct urb
struct urb 结构中和 USB 设备驱动有关的成员是: struct usb_device *dev 指向这个 urb 要发送到的 struct usb_device 的指针. 这个变量必须被 ...
- poj1080 - Human Gene Functions (dp)
题面 It is well known that a human gene can be considered as a sequence, consisting of four nucleotide ...
- Comb CodeForces - 46E (动态规划)
题面 Having endured all the hardships, Lara Croft finally found herself in a room with treasures. To h ...
- python中交换两个变量值的方法
a = 4b = 5 #第1种c = 0c = aa = bb = c #第2种a = a+bb = a-ba = a-b #第3种a,b = b,a print("a=%d,b=%d&qu ...
- 利用OGG进行数据库表的初始化
OGG初始化 1.停止目标端re1进程 2.配置ei进程(若目标端有ei进程之前投递的文件则先清空) GGSCI (localhost) 1>add extract ei1, sourceist ...
- UVW平台运动控制算法以及matlab仿真
UVW平台运动控制算法以及matlab仿真 最近公司同事因为对某视觉对位平台的运动控制算法有疑问,所以来请教我.由于我也是第一次接触到UVW自动对位平台(也可以叫XXY自动对位平台),于是找了一些 ...