mongoDB系列之(二):mongoDB 副本集
1. 什么是副本集
副本集就是mongoDB副本所组成的一个集群。
同期原理是,写操作发生在主库,从库同步主库的OpLog日志。

集群中没有特定的主库,主库是选举产生,如果主库down了,会再选举出一台主库。

mongoDB也可以配置成主从模式,但,官方已经不建议使用主从模式了,替代方案是采用副本集的模式。
副本集有以下特点:
1. 最小构成是:primary,secondary,arbiter,一般部署是:primary,2 secondary。
2. 成员数应该为奇数,如果为偶数的情况下添加arbiter,arbiter不保存数据,只投票。
3. 最大50 members,但是只能有 7 voting members,其他是non-voting members。
2. 配置副本集
本次实验,配置的是1主2从的副本集。
test166:27017,test167:27017,test167:27018
关于mongoDB的安装和使用,请参考mongoDB系列之(一):10分钟玩转mongoDB
2.1 创建副本集
在3台服务器上启动mongoDB,指定副本集的名字为rs0
test166上启动第一个mongoDB
# mongod --dbpath /var/lib/mongo --replSet rs0
test167上启动第二个mongoDB
# mongod --dbpath /var/lib/mongo --replSet rs0
test167上启动第三个mongoDB,指定端口为27018
# mkdir -p /data/mongo
# mongod --dbpath /data/mongo --port 27018 --replSet rs0
也可以在设定文件中指定,然后启动
# vi /etc/mongod.conf replication:
replSetName: rs0
# systemctl start mongod
2.2 配置副本集
在任意一台上连接mongodb,初始化
# mongo
> use admin
> rs.initiate()

确认设定
rs0:PRIMARY> rs.conf()

添加成员到副本集
先在/etc/hosts设定hostname

添加第一个从库,test167:27017
rs0:PRIMARY> rs.add('test167:27017')

添加第二个从库,test167:27018
可以通过priority来调整主库,选举的时候,priority大的优先被选举为主库
rs0:PRIMARY> rs.add({host: "test167:27018", priority: 5})

确认设定
rs0:PRIMARY> rs.conf()

查看状态
rs0:SECONDARY> rs.status()

移除从库
先关闭从库的mongoDB,然后在主库上移除从库
rs0:PRIMARY> rs.remove('test166:27019')
2.3 同期动作确认
在主库上插入一条记录
> db.user.insert({"username":"test","age":12,"sex":"m"})

在从库上查看数据已经同期
rs0:SECONDARY> db.getMongo().setReadPref('secondaryPreferred')
rs0:SECONDARY> use new2
rs0:SECONDARY> db.user.find()

2.4 Failover动作
副本集heartbeat ping 2秒一次,10秒没有回应认为down了。
Priority最高的被选举为主库,Priority 0的不能升为主。
Optime最高的从库才能被选为主库。
主库需要能连到其他从库,1主2从的情况下,down掉2台的情况下,不会选举出主库。
关闭主库
> use admin
> db.shutdownServer()
在从库上查看副本集状态,可以看到一个从库升级为主库
rs0:SECONDARY> rs.status()

启动关闭的前主库,查看副本集状态,看到主库降为从库,前主库成为主库
rs0:SECONDARY> rs.status()

备注:因为是使用OpLog日志同期,前主库down掉的时间内,在1主1从构成下发生的数据更新,前主库启动后,会同期过来
3. 读写分离
主库,从库都支持读操作。但是,默认情况读也是从主库来读。
从库可以通过设置ReadPreference打开支持读操作,ReadPreference有几种模式:
Primary #从主的读,默认
primaryPreferred #基本上从主的读,主不可用时,从从的读
secondary #从从的读
secondaryPreferred #基本上从从的读,从不可用时,从主的读
nearest #从网络延迟最小的读
基本上常用的是,Primary,secondary,nearest
副本集的设定中可以通过Tag把成员归类,通过下面方法指定读的类型:
1,程序连接的时候,指定读的类型ReadPreference
2,用mongo命令连接,只对当前连接有效
rs0:SECONDARY> db.getMongo().setReadPref('secondaryPreferred')
4. 特殊成员类型
Secondary还有一些特殊的成员类型:
Priority 0 #不能升为主,可以用于多数据中心场景

Hidden #对客户端来说是不可见的,一般用作备份或统计报告用

Delayed #数据比副集晚,一般用作 rolling backup 或历史快照

5. 后记
本次介绍了副本集的配置,下次将会介绍分片(Sharding)。
mongoDB系列之(二):mongoDB 副本集的更多相关文章
- [转]搭建高可用mongodb集群(二)—— 副本集
在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...
- 搭建高可用mongodb集群(二)—— 副本集
在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...
- 搭建高可用mongodb集群(二)—— 副本集
在上一篇文章<搭建高可用MongoDB集群(一)--配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...
- MongoDB学习笔记——Replica Set副本集
副本集 可以将MongoDB中的副本集看作一组服务器集群由一个主节点和多个副本节点等组成,相对于之前讲到的主从复制提供了故障自动转移的功能 副本集实现数据同步的方式依赖于local数据库中的oplog ...
- MongoDB系列之二(主动复制)
目前我正在进行MongoDB的双机热备方面相关的工作.根据我目前看到的MongoDB方面的材料,MongoDB的实际部署有三种方式,分别是“主动复制”,“副本集”以及“分片副本集”. 首先我们从最简单 ...
- MongoDB系列:二、MongoDB常用操作练习
最近在自学MongoDB,在此记录一下,当做学习笔记了(不断更新中)!! 一.背景 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存 ...
- MongoDB系列(二):C#应用
前言 上一篇文章<MongoDB系列(一):简介及安装>已经介绍了MongoDB以及其在window环境下的安装,这篇文章主要讲讲如何用C#来与MongoDB进行通讯.再次强调一下,我使用 ...
- 修改mongodb(带仲裁节点的副本集)各机器端口
需求:因为端口调整,需要改变副本的备份集 1.查看当前的副本集信息 [root@localhost bin]# ./mongo 192.168.1.134:10001 repltest:PRIMARY ...
- MongoDB数据库 : 管道,用户管理,副本集等
聚合(aggregate): db.集合.aggregate([{管道:{表达式}}]) db.集合.aggregate([ {管道1:{表达式1}}, {管道2:{表达式2}}, ... ...]) ...
- MongoDB 3.4 分片 由副本集组成
要在真实环境中实现MongoDB分片至少需要四台服务器做分片集群服务器,其中包含两个Shard分片副本集(每个包含两个副本节点及一个仲裁节点).一个配置副本集(三个副本节点,配置不需要仲裁节点),其中 ...
随机推荐
- 使用Java、Matlab画多边形闭合折线图
由于写论文要将“哈密顿回路问题(TSP)”的求解中间结果表示出来,查了一下使用程序画多边形图形.现在在总结一下,这个图是“由给定节点首尾相连的”闭合多边形. 1.使用matlab作闭合多边形图 没有找 ...
- Android组件之自定义ContentProvider
Android的数据存储有五种方式Shared Preferences.网络存储.文件存储.外储存储.SQLite,一般这些存储都只是在单独的一个应用程序之中达到一个数据的共享,有时候我们需要操作其他 ...
- Longest Common Prefix leetcode java
题目: Write a function to find the longest common prefix string amongst an array of strings. 题解: 解题思路是 ...
- natapp搭建外网服务器
首先在natapp官网注册一个账号:https://natapp.cn/ 注册好后登陆网站,点击左侧菜单中的购买隧道: 点击免费隧道后进入隧道配置页面,我这里已经配置好了直接展示如下: 点击保存后点击 ...
- 浏览WPF中内置颜色名对应的颜色
- libFM 简介
原文:https://eachcloudcn.blob.core.chinacloudapi.cn/clips/XOI1W.htm libFM全称为Factorization Machine Libr ...
- [Node.js] Level 2 new. Event
Chat Emitter We're going to create a custom chat EventEmitter. Create a new EventEmitter object and ...
- 内有干货!2个人3个月怎样从零完毕一款社区App《林卡》
嘿,大家好.我是不灭的小灯灯,我赌5毛你没听说过我的名字... 好啦.这篇不是鸡汤,是经验吐槽.干货分享! 所以乱七八糟的就不多说了.直接切入正题. 先说下自己的情况背景,眼下尚未毕业.非计算机专业, ...
- U盘去保护方法
一.基本信息 U盘大小是16G的,估计用了2G的空间存储,没有任何开关设置,格式化或写入时提示被写保护: U盘放到任何一台电脑上都是只能读不能写,说明与电脑无关,用了各种U盘修复程序都无效: 二.一般 ...
- ArcMap概化之消除真曲线
在地理国情项目中,异常折线检查结果中,有报错为:几何类型为esriGeometryCircularArc不合法,而属性表中几何类型(Shape)内容为 "面",这是为何? 作为GI ...