MongoDB高手课_MongoDB_NoSQL-极客时间极客时间推出的MongoDB高手课是帮助互联网从业者学习MongoDB、NoSQL的在线课程,极客时间是面向IT领域的知识服务产品,致力于帮助用户轻松学习,高效学习。https://time.geekbang.org/course/intro/253?tab=intro

MongoDB复制集的主要作用是实现服务高可用。在生产环境部署时采用复制集进行搭建可以保证数据安全。

一. 复制集的原理

1. MongoDB复制集的实现原理

  • 数据写入时迅速将数据复制到另一个独立节点上,接受写入的节点发生故障时自动选举出一个新的替代节点。

2. 复制集结构

  • 一个复制集由3个以上有投票权的节点组成,一个主节点(primary)接受写入操作和选举时投票,两个或多个从节点(secondary)复制主节点上的新数据和选举时投票。

               

3. 数据复制过程

  • 当一个修改操作到达主节点时,它对数据的操作会被记录下来(经过一些必要的转换),这些记录成为oplog。
  • 从节点通过在主节点上打开一个tailable游标不断获取进入主节点的oplog,在自己的数据上回访,从而保持和主节点的数据一致。

4. 通过选举完成故障恢复的过程

  • 具有投票权的节点之间两两互发心跳;
  • 当5次未收到心跳时判断为节点失联;
  • 若为主结点失效,从节点会发起选举,选出新的主节点;
  • 若为从节点失效,不发起选举;
  • 选举是基于RAFT一致性算法实现的,大多数投票节点存活时才会发起选举;
  • 复制集中最多可以有50个节点,但有投票权的节点最多只有7个;
  • 被选举为主节点的条件:能与多数节点建立连接,具有较新的oplog,具有较高优先级。

5. 复制集节点常见配置选项

  • 投票权(v参数):有此参数即可参与投票;
  • 优先级(priority参数):优先级越高越优先成为主节点,优先级为0的节点不能成为主节点。
  • 隐藏(hidden参数):隐藏节点优先级为0,用于复制数据,对应用不可见,但可以具有投票权。
  • 延迟(slaveRelay参数):复制n秒之前的数据,保持与主节点的时间差。用于防止误操作。

6. 复制集注意事项

  1. 硬件:(1)主从节点使用一样的硬件配置。(2)各节点使用的硬件独立。

  2. 软件:各节点软件版本要一致。

  3. 性能不够时,不要盲目增加节点。增加从节点不会增加系统写性能,但是可以增加系统读性能。

二. 搭建复制集

1. 创建数据目录

  • MongoDB启动时默认用一个数据目录存放所有数据文件,因此我们需要为三个复制及节点创建各自的数据目录。
# mac和linux下的命令,创建db1、db2、db3三个目录
mkdir -p /data/db{1,2,3}

2. 准备配置文件

  • 复制集的每个mongod进程要位于不同的服务器。现在要在一个机器上运行三个进程,要各自配置不同的端口、不同的数据目录、不同的日志文件路径。

(1)mac下的配置文件mongod.conf

# /data/db1/mongod.confsystemLog:destination: filepath: /data/db1/mongod.log # log path 数据库系统日志文件路径logAppend: true
storage:dbPath: /data/db1 # data directory 真正的数据文件目录
net:bindIp: 0.0.0.0  # 0.0.0.0表示在所有网卡地址上监听,若没有这个参数默认只在localhost上监听port: 28017 # port 端口号
replication:  # 表示为复制集replSetName: rs0  # 复制集的名字
processManagement:fork: true   # 把进程作为独立的后台进程进行
# /data/db2/mongod.confsystemLog:destination: filepath: /data/db2/mongod.log   # log path 要修改logAppend: true
storage:dbPath: /data/db2    # data directory 要修改
net:bindIp: 0.0.0.0  port: 28018     # port 要修改
replication:  replSetName: rs0
processManagement:fork: true  
# /data/db3/mongod.confsystemLog:destination: filepath: /data/db3/mongod.log   # log path 要修改logAppend: true
storage:dbPath: /data/db3    # data directory 要修改
net:bindIp: 0.0.0.0  port: 28019     # port 要修改
replication:  replSetName: rs0
processManagement:fork: true  

(2)把三个实例分别起起来

mongod -f /data/db1/mongod.conf
mongod -f /data/db2/mongod.conf
mongod -f /data/db3/mongod.conf

(3)配置复制集把三个实例联系起来

  • 方法1:(此方法需要hostname能被解析)
# 先验证一下hostname能否被解析,若不能,则直接选择方法2
hostname -f
# 进入主节点
mongo localhost:28017
# 进入复制集状态
rs.initiate()
# rs0:SECONDARY>    此时按回车,进入PRIMARY节点
# rs0:PRIMARY>
# 查看复制集状态,检查复制集是否成功起来
rs.status()
# 添加从节点,这里的HOSTNAME要替换为自己电脑的hostname
rs.add("HOSTNAME:28018")
rs.add("HOSTNAME:28019")
# 再检查复制集状态
rs.status()
  • 方法2:
# 进入主节点
mongo localhost:28017
# 进入复制集状态
rs.initiate({_id: "rs0",members: [{_id: 0,host: "localhost:28017" },{_id: 1,host: "localhost:28018" },{_id: 2,host: "localhost:28019" }]
})

(4)验证复制集是否正常工作

  • 主节点写入:
​# 进入主节点
mongo localhost:28017
db.test.insert({a:1})
db.test.insert({a:2})
  • 从节点读取:
​# 进入从节点
mongo localhost:28018
# 允许从节点读
rs.slaveOk()
db.test.find()

参考文章:

MongoDB高手课学习笔记(一,再入门)_君陌先生的博客-CSDN博客_mongodb 高手课这是极客时间-MongoDB高手课的学习笔记,第一章:再入门.按照数据库排名网站db-engines.com的统计,最近几年MongoDB一直保持在前四五名,前面几位是年龄30多岁的关系型数据库(Oracle,Mysql,SQLServer,PostgreSQL).https://blog.csdn.net/weixin_42008012/article/details/108092240?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.pc_relevant_antiscanv2&spm=1001.2101.3001.4242.1&utm_relevant_index=3

《MongoDB高手课》学习记录(第七天) - SegmentFault 思否写在前面 这周在出差,手头只有一台MAC,所以这节的学习全程在 MacOS 10.15.2 环境下进行。 第七天 今天要学习的是《11 | 实验:搭建MongoDB复制集》,是对昨天学习内容的一个演练。 目标 通过在一个电脑上装三个数据库实例来搭建一个复制集,步骤如下: 启动一个MongoDB实例; 将3个实例搭建成一个复制集 对复制集参数...https://segmentfault.com/a/1190000021402232?utm_source=sf-similar-article

MongoDB复制集原理和配置相关推荐

  1. MongoDB复制集原理、搭建及复制集简单维护

    ##一.MongoDB复制集原理 ###(一)复制集简介   Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Drive ...

  2. 配置MongoDB复制集

    什么是复制集? 复制集是额外的数据副本,是跨多个服务器同步数据的过程,复制集提供了冗余并增加了数据可用性,通过复制集可以对硬件故障和中断的服务进行恢复. 复制集的优势如下: 让数据更安全 高数据可用性 ...

  3. MongoDB复制选举原理及复制集管理

    一.MongoDB复制集的选举原理 复制是基于操作日志oplog,相当于MySQL中的二进制日志,只记录发生改变的记录.复制是将主节点的oplog日志同步应用到其他从节点的过程. 复制集的节点是通过选 ...

  4. MongoDB 复制集的选举原理

    复制的原理         复制时基于啊哦做日志 oplog , 相当于 MySQL 中的二进制日志,只记录发生改变的记录.复制是将主节点的oplog 日志同步并应用到其他从节点的过程. 选举的原理 ...

  5. MongoDB 复制集节点增加移除及节点属性配置

    复制集(replica Set)或者副本集是MongoDB的核心高可用特性之一,它基于主节点的oplog日志持续传送到辅助节点,并重放得以实现主从节点一致.再结合心跳机制,当感知到主节点不可访问或宕机 ...

  6. Raft与MongoDB复制集协议比较

    在一文搞懂raft算法一文中,从raft论文出发,详细介绍了raft的工作流程以及对特殊情况的处理.但算法.协议这种偏抽象的东西,仅仅看论文还是比较难以掌握的,需要看看在工业界的具体实现.本文关注Mo ...

  7. MongoDB复制集(Replication Sets)介绍

    近年来,随着大数据越来越火,非关系型数据库的重要性被越来越多的人所认知,越来越多的开发者逐渐加入到NoSQL的阵营中.我们知道NoSQL是Not Only SQL的意思,既然如此,很多关系型数据库所支 ...

  8. MongoDB复制集搭建主服务器模拟切换

    前言 Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写入Primary,Second ...

  9. MongoDB 复制集 (一) 成员介绍

       一 MongoDB 复制集简介          MongoDB复制集机制主要分为两种:          Master-Slave    (主从复制)       这个已经不建议使用     ...

最新文章

  1. python 靶心_手把手教你使用Python实战反欺诈模型|原理+代码
  2. 蓝桥杯练习系统算法训练习题加答案java版本
  3. 一款不错的网页对话插件
  4. Ardino基础教程 22_PS2摇杆
  5. circRNA研究相关数据库,riboCIRC使用指南
  6. python3 全局变量 局部变量_python3 函数传参练习 全局变量与局部变量 的理解
  7. ZfNet解卷积:可视化CNN模型( PythonCode可视化Cifar10)
  8. php将值作为数组,php – 如何将CSV解析为数组,并将第一个值作为键?
  9. 设计模式---观察者模式(C++)
  10. 使用OD修改程序窗口标题和提示信息
  11. 【积跬步以至千里】唧唧Down下载视频无法正常合并分段文件解决方案
  12. 字节跳动笔试题-前端(互娱)
  13. Win7旗舰版 安装步骤
  14. 【笔记总结】高中英语——其二:名词性从句
  15. MOS管在开关电路中的使用
  16. 微信二维码来源统计自动生成二维码统计?
  17. 这样可以几分钟快速对接支付宝APP支付和手机网站支付
  18. arcgis10之将一个shp属性数据通过某一字段将要素属性关联至另一shp文件中
  19. BAT机器学习面试1000道
  20. 计算机中汉字的顺序有什么排列,汉字演变过程的时间排序是什么?

热门文章

  1. fwidth、ddx、ddy解析
  2. git push 之后如何不用回滚或者abandoned方式等修改已提交代码呢?
  3. matlab2019使用仿真,光学仿真matlab中的handles怎么用 终于明白了
  4. ftp文件搜索服务器,ftp服务器文件搜索
  5. 我从这篇文章中受到不少启发!
  6. Docker+Consul+Registrator实现服务注册与发现
  7. 有服务器可以远程连接电脑软件,支持远程控制电脑的工具有哪些?这几款软件值得一试!...
  8. Java实现 蓝桥杯 算法提高 奥运会开幕式
  9. BIOS知识枝桠——FV
  10. 堆积木(动态数组vector)