一 简介: mongodb副本集

二 复制方式: 1 全量复制 2 增量复制
三 同步检测过程:
    一 正常情况下:
       1 master执行语句,并将所有的修改数据库的操作以日志Oplog的方式记录在本地
       2 second节点按照一定的频率主动异步的从主节点同步oplog日志并作用于自己本机的数据库上,从而保证副本节点和主节点的数据一致性
       3 每个节点会向其他节点2s发送一个心跳检测,如果超过10s没有收到回复,则认为目标节点不可用
   二 主节点挂掉后
       1 从节点自我推荐,发出选举请求
         判断条件
         1 对比其他节点后,optime必须是最高 
         2 必须拿到线程锁
         3 根据priority等条件判断,是否自己符合当主资格(比如priority=0这种是无法变成主的,但是能参与选举投票)
      2 其他从节点根据请求进行判断
      判断条件为:
        1 其他节点判断是否有primary存在
        2 是否有超过一半的成员参与整个选举
        3 根据priority的优先级对比
     3 切换相关
        1 只要在选举过程中有一票不通过,此节点就不能成为新主
        2 priority优先级设置后,当一个有着高优先级的Secondary节点其数据已经达到最新的10秒内的数据状态的时候,集群就会触发一个选举,使得高优先级的节点很容易成为Primary.我们根据这个特性进行主动切换
        3 副本集设置为奇数(推荐3个为一组,一主两从这种模式),,2个节点是无法进行主备切换的 1个节点是只读的,无法提供服务
        4 不止故障,高负载情况下极有可能触发主备切换动作
  三 rs.status解读
       "set" : "fuzhiji", //副本集名称
      "name" : "1.1.1.1:37011",//host+port
      "health" : 1,//是否正常 正常未1
      "stateStr" : "PRIMARY",//PRIMARY(主节点) SECONDARY(从节点) RECOVERING(恢复中) REMOVED(已移除) startup(新节点加入全量同步时)状态
     "self" : true
     "syncto" : host //从哪里同步
四 mongodb主从延迟
   1 db.printSlaveReplicationInfo()
     source: IP:PORT
     syncedTo: Mon Oct 23 2017 17:46:53 GMT+0800 (CST)
     0 secs (0 hrs) behind the primary
      我们可以发现是0延迟
五 新增节点
   1 采用全量复制(让mongodb自己去拷贝数据集),适合数据量不大的情况下 1 db.shutdownServer(); 2移除旧目录 3启动mongodb进程,进入恢复模式
   2 采用冷备份(在从节点拷贝,可能会影响从节点的读)
    1 db.fsyncLock()
    2 cp -rp data文件
    3 db.fsyncUnlock() 
    4 在新节点启动mongo实力
    5 rs.add(host,port)
  3 mongdump很麻烦,不建议使用
六 如何减少主从延迟
  1 增大oplog(在线修改oplog很麻烦,参考我之前的文章,所以要尽量在部署环境时候确定)
  2 减少并发的DML操作
  3 启动参数增大replWriterThreadCount数量,同一时间应用更多的oplog(--setParameter replWriterThreadCount=32)=>未验证
七 常用命令
  1 rs.status()//查看状态
  2 db.printSlaveReplicationInfo()//查查延迟
  3 rs.add() rs.reconfig() rs.remove//管理节点
  4 rs.slaveOk()//从节点可以进行操作
  5 config={_id:"副本集名称",members:[{_id:0,host:"host:port"},{_id:1,host:"192.168.77.130:27017"}]}
  rs.initiate(config) 进行配置文件载入
八 如何主动触发主从切换
 调整从节点的优先级,使之高于主库的priority可触发切换
 1 rs.conf() 查看_id和priority
 2 cfg = rs.conf()
 3 rs.members[_id].priority=n
 4 rs.reconfig(cfg)
 5 rs.status()
九 读写分离架构
 1 在副本节点上设置rs.slaveOk();
 2 代码层面,在读操作过程中设置从副本节点读取数据
 在options里添加read-Preference=secondaryPreferred
 eg
 <mongo:client-options
 connections-per-host="100"
 threads-allowed-to-block-for-connection-multiplier="10"
 connect-timeout="10000" 
 max-wait-time="10000"
 socket-keep-alive="true"
 read-preference="SECONDARY_PREFERRED"
 />
primary:默认参数,只从主节点上进行读取操作;
primaryPreferred:大部分从主节点上读取数据,只有主节点不可用时从secondary节点读取数据。
secondary:只从secondary节点上进行读取操作,存在的问题是secondary节点的数据会比primary节点数据“旧”。
secondaryPreferred:优先从secondary节点进行读取操作,secondary节点不可用时从主节点读取数据;
nearest:不管是主节点、secondary节点,从网络延迟最低的节点上读取数据。
十 相关参数
oplogSize 单位MB replSet 复制名称
十一 备份方式
mongodump --db -o dir

十 补充
1 mongo driver可以自动识别副本集的状态,当primary挂掉后自动切换到secondary节点,不用在中间添加任何代理层了

mongodb系列~mongodb的副本集(1)的更多相关文章

  1. 8.MongoDB系列之创建副本集(一)

    1. 复制简介 在MongoDB中,创建副本集后就可以使用复制功能了,副本集是一组服务器,其中一个是用于处理写操作的主节点,还有多个用于保存主节点的数据副本的从节点,如果主节点崩溃了,则从节点会从中选 ...

  2. MongoDB系列之三(副本集配置)

    今天我测试了一下MongoDB的副本集的配置. 首先从概念上说一下MongoDB副本集和主从复制的区别.其实副本集(Replica Set)是主从复制的高级形式.高级在哪里呢?主动复制实现了数据备份+ ...

  3. mongodb 系列 ~ mongo的副本集(3)

    一 简介:今天咱们来聊聊mongodb复制的具体一些案例 二 副本集 1 当mongodb采用全量复制时,如何观察全量复制的进度 对比文件本身和primary大小 2 mongodb全量复制的过程 旧 ...

  4. 11.MongoDB系列之连接副本集

    1. Python连接副本集 from pymongo import MongoClient from bson.codec_options import CodecOptions from retr ...

  5. 9.MongoDB系列之创建副本集(二)

    1. 如何设计副本集 大多数:选取主节点时需要由大多数决定,主节点只有在得到大多数支持时才能继续作为主节点,写操作被复制到大多数成员时就是安全的写操作.这里的大多数定义为"副本集中一半以上的 ...

  6. mongodb 系列 ~ mongo的副本集(2)

    一 简介:来试试更改副本集的oplog问题二 背景: oplog的作用类似于mysql的binlog,传递增量操作到从节点 三 oplog介绍   1 oplog在local库:      1 mas ...

  7. MongoDB 删除,添加副本集,并修改副本集IP等信息

    MongoDB 删除,添加副本集,并修改副本集IP等信息 添加副本,在登录到主节点下输入 rs.add("ip:port"); 删除副本 rs.remove("ip:po ...

  8. MongoDB 带访问控制的副本集部署

    当你需要用到一个MongoDB 副本集集群,用于开发测试时, 可以通过下面的步骤简单完成. 版本及环境 MongoDB4.4  Centos6.5  一. 下载安装 MongoDB Server 及 ...

  9. MongoDB副本集配置系列五:副本集的在线迁移

    MongoDB副本集的在线迁移 查看当前集群的状态: { "setName" : "gechongrepl", "setVersion" : ...

随机推荐

  1. BZOJ1022[SHOI2008]小约翰的游戏——anti-SG(反尼姆博弈)

    题目描述 小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不取,我们规定取到 ...

  2. LOJ #2721. 「NOI2018」屠龙勇士(set + exgcd)

    题意 LOJ #2721. 「NOI2018」屠龙勇士 题解 首先假设每条龙都可以打死,每次拿到的剑攻击力为 \(ATK\) . 这个需要支持每次插入一个数,查找比一个 \(\le\) 数最大的数(或 ...

  3. 自学Aruba5.3.1-Aruba安全认证-有PEFNG 许可证环境的认证配置OPEN、PSK

    点击返回:自学Aruba之路 自学Aruba5.3.1-Aruba安全认证-有PEFNG 许可证环境的认证配置OPEN.PSK OPEN.PSK都需要设置Initial Role角色, 但是角色派生完 ...

  4. SP1805 HISTOGRA (单调栈)

    单调栈维护栈顶为高度最大的 记下来栈中每个元素入栈时顶掉的最靠左的一个位置(如果没顶掉就是它本身),那么在它出栈的时候,它所带来的面积就是(出栈位置-记录位置)*高度 (可能会有加一减一之类的细节) ...

  5. Redis我想入门——数据类型

    每一个数据库都有自己的数据类型.同样子redis为我们提供了五种类型的数据——字符串.哈希.列表.集合.有序集合.我们知道关系型数据的数据存放型式是一张二维表.用行和列来表示数据之间的关系.redis ...

  6. 【UVA10140】Prime Distance

    题目大意:求出一个给定区间 [l, r] 内相邻素数之间的最大距离和最小距离. 题解:由于 l, r 的范围太大,没法直接用筛法得出区间的素数.考虑筛出区间的素数等价于筛掉区间内的所有和数, 根据算术 ...

  7. 【洛谷P1144】最短路计数

    题目大意:给定一个 N 个点,M 条边的无向无权图,求从 1 号点出发到其他每个点最短路的条数. 题解:在跑 dij 时顺便维护 cnt[ ] 数组,用来记录到每个点的最短路条数. 代码如下 #inc ...

  8. asp.net C#压缩打包文件例子

    /// <summary> /// 压缩和解压文件 /// </summary> public class ZipClass { /// <summary> /// ...

  9. CodeBlocks: 生成的exe文件自定义一个图标

    CodeBlocks生成的exe文件的图标默认是系统图标,如何自定义一个漂亮的小图标呢? 我是C菜鸟,平时只用CodeBlocks练习c,也不开发什么软件,这个问题就难倒我了. 到网上搜索了一下,发现 ...

  10. javascript面向对象精要第五章继承整理精要

    javascript中使用原型链支持继承,当一个对象的[prototype]设置为另一个对象时, 就在这两个对象之间创建了一条原型对象链.如果要创建一个继承自其它对象的对象, 使用Object.cre ...