MongoDB副本集部署(windows)

什么是副本集

副本集(Replica Set) 是一组MongoDB实例保持其相同数据集的集群,由一个主(Primary )服务器和多个副本 (Secondary)服务器构成。通过复制 (Replication) 将数据的更新由主服务器推送到其它副本服务器上,在一定的延迟之后,达到每个MongoDB实例维护相同的数据集副本。副本集通过维护冗余的数据库副本、读写分离和故障自动转移的功能,摆脱数据库在使用过程中出现的环境故障影响,是所有生产环境部署的基础。

副本集有三个主要成员主节点 (Primary)、副本节点 (Secondary)、仲裁节点 (Arbiter).
主节点是副本集中负责处理客户端请求和读写数据主要成员。主节点通过oplog (操作日志) 记录所有操作。副本集中有且只有一个主节点,如果当前主节点不可用,则会从副本节点中选举出新的主节点。
副本节点定期轮询主节点获取oplog记录的操作内容,然后对自己的数据副本执行这些操作,从而保证副本节点的数据副本与主节点保持一致。副本集中可以有一个或多个副本节点。当主节点宕机时,副本集会根据优先级选举出新的主节点
仲裁节点不会同步主节点的数据副本,也不会被选举为主节点,它主要是参与选举投票。仲裁节点需要的资源很小。当副本集中成员个数为偶数时,建议添加一个仲裁节点,防止选举新的主节点过程中出现票数一致,导致无法选举出新的主节点。

副本集成员架构

客户端程序 (Client Application) 通过驱动器(Driver) 连接副本集主节点 (Primary) 进行读写操作,当主节点数据副本发生变化,此时副本节点 (Secondary) 通过Replication (复制) 同步主节点的数据副本,使副本集中副本节点与主节点存储相同数据副本。
副本集中的各节点还会通过传递心跳信息(Heartbeat) 来检测各自的健康状态。当主节点故障时,拥有投票权的副本节点和仲裁节点 (Arbiter) 会触发一次新的选举操作,并从副本节点中选举出新的主节点,以确保副本集正常运行。

MongoDB副本集成员数与oplog
MongoDB官网建议当副本集成员个数大于二时,推荐副本集成员个数为奇数个,而不使用仲裁节点。从MongoDB3.0版本起,副本集可以多达五十名成员,最多七个参与主节点选举投票的成员,并且其它成员不得拥有投票权。
oplog是一个特殊的固定集合,它保存了副本集主节点中所有的数据变化记录,所有副本集成员(除仲裁节点) 都在local.oplog.rs集合中包含一个oplog的副本,每个副本节点的oplog都会保持与主节点的oplog完全一致的状态(可能会有一些延迟)。

环境准备
本教程演示mongodb4.4 副本集部署(一主两从,伪分布式)

节点配置
主节点localhost:27017
从节点1localhost:27018
从节点2localhost:27019

每一个节点(实例)都创建对应的数据文件(data)和日志文件(log),例如:

启动实例(服务)  

语法:

bin>mongod -port 端口号  -dbpath 数据路径 -logpath 日志路径 -replSet 副本集名称

 示例:

>mongod -port 27018 -dbpath D:\MongoDB1\data -logpath D:\MongoDB1\log\mongo1.log -replSet rs0

 主节点:

从节点1(以管理员身份启动):

 从节点2:

以上三个节点启动的都是一次性服务,所以窗口不要关闭!

tips:
节点启动可能会遇到问题,主要检查端口是否被占用,和路径配置问题。若都没问题则考虑以管理员身份启动cmd.

配置副本集 

维持服务不要关闭,进入任何一个节点内:

进行配置:

1.切换到admin数据库

use admin

2.配置集群 

config={_id:"rs0",members:[
... {_id:0,host:"localhost:27017","priority":3},
... {_id:1,host:"localhost:27018","priority":2},
... {_id:2,host:"localhost:27019","priority":1}]}

 说明:第一个“_id”为副本集名称,“priority”为优先级,数字越大,优先级越高。
3.使得配置生效 

rs.initiate(config)

 

生效后可能会出现节点显示错误:
(明明是主节点,但却显示从节点)

只需要查看副本集状态即可更正:

 rs.status()

从节点配置

刚刚配置好的副本集中的从节点是无法进行数据库操作的:

要先进行从节点永久化设置:

rs.slaveOk()

 或者使用(推荐使用):

rs.secondaryOk() 

 

 副本集验证

在主节点中增加数据

在从节点上验证:

到这一步就说明副本集群部署成功。

  • 25
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值