MongoDB复制集原理和配置
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)主从节点使用一样的硬件配置。(2)各节点使用的硬件独立。
软件:各节点软件版本要一致。
- 性能不够时,不要盲目增加节点。增加从节点不会增加系统写性能,但是可以增加系统读性能。
二. 搭建复制集
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复制集原理和配置相关推荐
- MongoDB复制集原理、搭建及复制集简单维护
##一.MongoDB复制集原理 ###(一)复制集简介 Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Drive ...
- 配置MongoDB复制集
什么是复制集? 复制集是额外的数据副本,是跨多个服务器同步数据的过程,复制集提供了冗余并增加了数据可用性,通过复制集可以对硬件故障和中断的服务进行恢复. 复制集的优势如下: 让数据更安全 高数据可用性 ...
- MongoDB复制选举原理及复制集管理
一.MongoDB复制集的选举原理 复制是基于操作日志oplog,相当于MySQL中的二进制日志,只记录发生改变的记录.复制是将主节点的oplog日志同步应用到其他从节点的过程. 复制集的节点是通过选 ...
- MongoDB 复制集的选举原理
复制的原理 复制时基于啊哦做日志 oplog , 相当于 MySQL 中的二进制日志,只记录发生改变的记录.复制是将主节点的oplog 日志同步并应用到其他从节点的过程. 选举的原理 ...
- MongoDB 复制集节点增加移除及节点属性配置
复制集(replica Set)或者副本集是MongoDB的核心高可用特性之一,它基于主节点的oplog日志持续传送到辅助节点,并重放得以实现主从节点一致.再结合心跳机制,当感知到主节点不可访问或宕机 ...
- Raft与MongoDB复制集协议比较
在一文搞懂raft算法一文中,从raft论文出发,详细介绍了raft的工作流程以及对特殊情况的处理.但算法.协议这种偏抽象的东西,仅仅看论文还是比较难以掌握的,需要看看在工业界的具体实现.本文关注Mo ...
- MongoDB复制集(Replication Sets)介绍
近年来,随着大数据越来越火,非关系型数据库的重要性被越来越多的人所认知,越来越多的开发者逐渐加入到NoSQL的阵营中.我们知道NoSQL是Not Only SQL的意思,既然如此,很多关系型数据库所支 ...
- MongoDB复制集搭建主服务器模拟切换
前言 Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写入Primary,Second ...
- MongoDB 复制集 (一) 成员介绍
一 MongoDB 复制集简介 MongoDB复制集机制主要分为两种: Master-Slave (主从复制) 这个已经不建议使用 ...
最新文章
- python 靶心_手把手教你使用Python实战反欺诈模型|原理+代码
- 蓝桥杯练习系统算法训练习题加答案java版本
- 一款不错的网页对话插件
- Ardino基础教程 22_PS2摇杆
- circRNA研究相关数据库,riboCIRC使用指南
- python3 全局变量 局部变量_python3 函数传参练习 全局变量与局部变量 的理解
- ZfNet解卷积:可视化CNN模型( PythonCode可视化Cifar10)
- php将值作为数组,php – 如何将CSV解析为数组,并将第一个值作为键?
- 设计模式---观察者模式(C++)
- 使用OD修改程序窗口标题和提示信息
- 【积跬步以至千里】唧唧Down下载视频无法正常合并分段文件解决方案
- 字节跳动笔试题-前端(互娱)
- Win7旗舰版 安装步骤
- 【笔记总结】高中英语——其二:名词性从句
- MOS管在开关电路中的使用
- 微信二维码来源统计自动生成二维码统计?
- 这样可以几分钟快速对接支付宝APP支付和手机网站支付
- arcgis10之将一个shp属性数据通过某一字段将要素属性关联至另一shp文件中
- BAT机器学习面试1000道
- 计算机中汉字的顺序有什么排列,汉字演变过程的时间排序是什么?
热门文章
- fwidth、ddx、ddy解析
- git push 之后如何不用回滚或者abandoned方式等修改已提交代码呢?
- matlab2019使用仿真,光学仿真matlab中的handles怎么用 终于明白了
- ftp文件搜索服务器,ftp服务器文件搜索
- 我从这篇文章中受到不少启发!
- Docker+Consul+Registrator实现服务注册与发现
- 有服务器可以远程连接电脑软件,支持远程控制电脑的工具有哪些?这几款软件值得一试!...
- Java实现 蓝桥杯 算法提高 奥运会开幕式
- BIOS知识枝桠——FV
- 堆积木(动态数组vector)