脚本宝典收集整理的这篇文章主要介绍了『MongoDB』MongoDB部署架构——复制集篇(Replica Set),脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
MongoDB 复制集的主要意义在于实现服务高可用
它的现实依赖于两个方面的功能: 1.数据写入时将数据迅速复制到另一个独立节点上 2.在接受写入的节点发生故障时自动选举出一个新的替代节点
在实现高可用的同时,复制集实现了其他几个附加作用: 1.数据分发:将数据从一个区域复制到另一个区域,减少另一个区域的读延迟 2.读写分离:不同类型的压力分别在不同的节点上执行 3.异地容灾:在数据中心故障时候快速切换到异地
当一个修改操作,无论是插入、更新或删除,到达主节点时,它对数据的操作将被记录下来(经过一些必要的转换),这些记录称为 oplog。
从节点通过在主节点上打开一个 tailable 游标不断获取新进入主节点的 oplog,并在自己的数据上回放,以此保持跟主节点的数据一致。
5次心跳
未收到时判断为节点失联;RAFT一致性算法
实现,选举成功的必要条件是大多数
投票节点存活;50个节点
,但具有投票权的节点最多7个
。整个集群必须有大多数
节点存活;
被选举为主节点的节点必须:
关于硬件: 因为正常的复制集节点都有可能成为主节点,它们的地位是一样的,因此硬件配置上尽可能一致; 为了保证节点不会同时宕机,各节点使用的硬件必须具有独立性。
关于软件: 复制集各节点软件版本必须一致,以避免出现不可预知的问题。
增加节点不会增加系统写性能!!!
搭建目标 本实验中,我将通过在一台机器上运行3个实例来搭建一个最简单的复制集。我将会带展示以下几点:
- 如何启动一个 MongoDB 实例
- 如何将3个 MongoDB 实例搭建成一个复制集
- 如何对复制集运行参数做一些常规调整
安装最新的 MongoDB 版本
Windows 系统请事先配置好 MongoDB 可执行文件的环境变量
Linux 和 Mac 系统请配置 PATH 变量
确保有 10GB 以上的硬盘空间
MongoDB 启动时将使用一个数据目录存放所有数据文件。我们将为3个复制集节点创建各自的数据目录。
复制集的每个mongod进程应该位于不同的服务器。现在在一台机器上运行3个进程,因此要为它们各自配置:
不同的端口。示例中将使用28017/28018/28019
不同的数据目录。示例中将使用: /data/db1 /data/db2 /data/db3
不同日志文件路径。示例中将使用: /data/db1/mongod.log /data/db2/mongod.log /data/db3/mongod.log
在相应的数据目录下创建以下mongod.conf文件,注意:#注释的代表那行是需要修改的
# /data/db1/mongod.conf
systemLog:
destination: file
path: /data/db1/mongod.log # log path
logAppend: true
storage:
dbPath: /data/db1 # data directory
net:
bindIp: 0.0.0.0 port: 28017 # port
replication:
replSetName: rs0
processManagement:
fork: true
mongod -f /data/db1/mongod.conf
mongod -f /data/db2/mongod.conf
mongod -f /data/db3/mongod.conf
注意:如果启用了 SELinux,可能阻止上述进程启动。简单起见请关闭 SELinux。
如果以上步骤都已完成,那么离成功就差一小步了,跳到
第三点
查看复制集的配置。
复制集的每个mongod进程应该位于不同的服务器。现在在一台机器上运行3个进程,因此要为它们各自配置:
不同的端口。示例中将使用28017/28018/28019
不同的数据目录。示例中将使用: c:datadb1 c:datadb2 c:datadb3
不同日志文件路径。示例中将使用: c:datadb1mongod.log c:datadb2mongod.log c:datadb3mongod.log
在相应的数据目录下创建以下mongod.conf文件,注意:#注释的代表那行是需要修改的
# c:datadb1mongod.conf
systemLog:
destination: file
path: c:data1mongod.log # 日志文件路径
logAppend: true
storage:
dbPath: c:data1 # 数据目录
net:
bindIp: 0.0.0.0
port: 28017 # 端口
replication:
replSetName: rs0
mongod -f c:data1mongod.conf
mongod -f c:data2mongod.conf
mongod -f c:data3mongod.conf
因为 Windows 不支持 fork,以上命令需要在3个不同的窗口执行,执行后不可关闭窗口否则进程将直接结束。
# mongo --port 28017
> rs.initiate({
_id: "rs0", members: [{
_id: 0,
host: "localhost:28017"
},{
_id: 1,
host: "localhost:28018"
},{
_id: 2,
host: "localhost:28019"
}]
# mongo localhost:28017
> db.test.insert({ a:1 })
> db.test.insert({ a:2 });
# mongo localhost:28018
> rs.slaveOk()
> db.test.find()
以上是脚本宝典为你收集整理的『MongoDB』MongoDB部署架构——复制集篇(Replica Set)全部内容,希望文章能够帮你解决『MongoDB』MongoDB部署架构——复制集篇(Replica Set)所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。