mongoDB系列之(二):mongoDB 副本集

时间:2021-12-11 05:33:20

1. 什么是副本集

副本集就是mongoDB副本所组成的一个集群。

同期原理是,写操作发生在主库,从库同步主库的OpLog日志。

mongoDB系列之(二):mongoDB 副本集

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

mongoDB系列之(二):mongoDB 副本集

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()

mongoDB系列之(二):mongoDB 副本集

确认设定

rs0:PRIMARY> rs.conf()

mongoDB系列之(二):mongoDB 副本集

添加成员到副本集

先在/etc/hosts设定hostname

mongoDB系列之(二):mongoDB 副本集

添加第一个从库,test167:27017

rs0:PRIMARY> rs.add('test167:27017')

mongoDB系列之(二):mongoDB 副本集

添加第二个从库,test167:27018

可以通过priority来调整主库,选举的时候,priority大的优先被选举为主库

rs0:PRIMARY> rs.add({host: "test167:27018", priority: 5})

mongoDB系列之(二):mongoDB 副本集

确认设定

rs0:PRIMARY> rs.conf()

mongoDB系列之(二):mongoDB 副本集

查看状态

rs0:SECONDARY> rs.status()

mongoDB系列之(二):mongoDB 副本集

移除从库

先关闭从库的mongoDB,然后在主库上移除从库

rs0:PRIMARY> rs.remove('test166:27019')

2.3 同期动作确认

在主库上插入一条记录

> db.user.insert({"username":"test","age":12,"sex":"m"})

mongoDB系列之(二):mongoDB 副本集

在从库上查看数据已经同期

rs0:SECONDARY> db.getMongo().setReadPref('secondaryPreferred')
rs0:SECONDARY> use new2
rs0:SECONDARY> db.user.find()

mongoDB系列之(二):mongoDB 副本集

2.4 Failover动作

副本集heartbeat ping 2秒一次,10秒没有回应认为down了。

Priority最高的被选举为主库,Priority 0的不能升为主。

Optime最高的从库才能被选为主库。

主库需要能连到其他从库,1主2从的情况下,down掉2台的情况下,不会选举出主库。

关闭主库

> use admin
> db.shutdownServer()

在从库上查看副本集状态,可以看到一个从库升级为主库

rs0:SECONDARY> rs.status()

mongoDB系列之(二):mongoDB 副本集

启动关闭的前主库,查看副本集状态,看到主库降为从库,前主库成为主库

rs0:SECONDARY> rs.status()

mongoDB系列之(二):mongoDB 副本集

备注:因为是使用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   #不能升为主,可以用于多数据中心场景

mongoDB系列之(二):mongoDB 副本集

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

mongoDB系列之(二):mongoDB 副本集

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

mongoDB系列之(二):mongoDB 副本集

5. 后记

本次介绍了副本集的配置,下次将会介绍分片(Sharding)。

mongoDB系列之(二):mongoDB 副本集的更多相关文章

  1. [转]搭建高可用mongodb集群(二)—— 副本集

    在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...

  2. 搭建高可用mongodb集群(二)—— 副本集

    在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...

  3. 搭建高可用mongodb集群(二)&mdash&semi;&mdash&semi; 副本集

    在上一篇文章<搭建高可用MongoDB集群(一)--配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...

  4. MongoDB学习笔记——Replica Set副本集

    副本集 可以将MongoDB中的副本集看作一组服务器集群由一个主节点和多个副本节点等组成,相对于之前讲到的主从复制提供了故障自动转移的功能 副本集实现数据同步的方式依赖于local数据库中的oplog ...

  5. MongoDB系列之二(主动复制)

    目前我正在进行MongoDB的双机热备方面相关的工作.根据我目前看到的MongoDB方面的材料,MongoDB的实际部署有三种方式,分别是“主动复制”,“副本集”以及“分片副本集”. 首先我们从最简单 ...

  6. MongoDB系列:二、MongoDB常用操作练习

    最近在自学MongoDB,在此记录一下,当做学习笔记了(不断更新中)!! 一.背景 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存 ...

  7. MongoDB系列(二):C&num;应用

    前言 上一篇文章<MongoDB系列(一):简介及安装>已经介绍了MongoDB以及其在window环境下的安装,这篇文章主要讲讲如何用C#来与MongoDB进行通讯.再次强调一下,我使用 ...

  8. 修改mongodb&lpar;带仲裁节点的副本集&rpar;各机器端口

    需求:因为端口调整,需要改变副本的备份集 1.查看当前的副本集信息 [root@localhost bin]# ./mongo 192.168.1.134:10001 repltest:PRIMARY ...

  9. MongoDB数据库 &colon; 管道&comma;用户管理&comma;副本集等

    聚合(aggregate): db.集合.aggregate([{管道:{表达式}}]) db.集合.aggregate([ {管道1:{表达式1}}, {管道2:{表达式2}}, ... ...]) ...

  10. MongoDB 3&period;4 分片 由副本集组成

    要在真实环境中实现MongoDB分片至少需要四台服务器做分片集群服务器,其中包含两个Shard分片副本集(每个包含两个副本节点及一个仲裁节点).一个配置副本集(三个副本节点,配置不需要仲裁节点),其中 ...

随机推荐

  1. 安装自创建的windows服务。

    安装自创建的windows服务. 使用工具InstallUtil.exe进行安装和卸载创建的windows服务 安装:C:/WINDOWS/Microsoft.NET/Framework/v2.0.5 ...

  2. 《CLR via C&num;》读书笔记(1)CLR执行模型

    1.1 释义 CLR 公共语音运行时 Common Language Runtime CTS 通用类型系统 Common Type System CTS.CLS是CLR的核心 CLS 通用语言规范 C ...

  3. 如何取消IE&OpenCurlyDoubleQuote;已限制此网页运行可以访问计算机的脚本或ActiveX控件

    在本地调试html页,如果其中包含js或flash,IE经常会提示“IE已限制此网页运行可以访问计算机的脚本或ActiveX控件”.虽然IE出于安全考虑阻止本地脚本运行这个做法没错,但作为程序开发者来 ...

  4. Java按位置解析文本文件&lpar;使用Swing选择文件&rpar;

    工作中遇到这样的一个需求,按位置解析一些文本文件,它们由头部.详情.尾部组成,并且每一行的长度可能不一样,每一行代表的意思也可能不一样,但是每一行各个位置代表的含义已经确定了. 例如有下面这样一段文本 ...

  5. modifytime是一个神奇的column name----这边文章是错的totally,因为我的实验不彻底。timestamp属性很神奇,头一个timestamp,会自动的成DEFAULT CURRENT&lowbar;TIMESTAMP ON UPDATE CURRENT&lowbar;TIMESTAMP

    在mysql里边modifytime是一个神奇的column name,试一下. 请执行sql语句 CREATE TABLE `test_time` ( `modifytime` timestamp ...

  6. 使用 C&num; 代码实现拓扑排序

    0.参考资料 尊重他人的劳动成果,贴上参考的资料地址,本文仅作学习记录之用. https://www.codeproject.com/Articles/869059/Topological-sorti ...

  7. XQN number format

    Q Numbers FormatAn XQN format number is an 1+X+N bit twos complement binary number; a sign bitfollow ...

  8. CF-500div2-A&sol;B&sol;C

    A. Piles With Stones time limit per test 1 second memory limit per test 256 megabytes input standard ...

  9. CNZZ站点流量统计原理简析

    这是我的域名www.iyizhan.com.暂无内容,当中仅仅有一个页面index.html. 在index.html上放置了例如以下的 js 脚本: <script  src="ht ...

  10. laravel middleware

    当你使用larvel创建一个相对比较复杂的web网站时,往往你的routes文件就会变得很庞大.一般来说在开始网站编码之前,最好做一个整体规划,把这些route逻辑上划分为不同的group,每一个gr ...