1.介绍
MongoDB副本集群(Replica Set)是一种用于实现高可用性和冗余的架构。副本集群包含多个节点,其中包含一个主节点(Primary)和多个副本节点(Secondary)。主节点负责处理客户端的读写请求,副本节点则负责复制主节点的数据,以保持与主节点的数据同步。
副本集有三个主要成员主节点(Primary)、副本节点(Secondary)仲裁节点(Arbiter)
副本集群的工作原理
1. 初始化副本集:首先,需要创建一个配置文件,该文件定义了副本集的各个节点信息以及选举规则等。然后,启动多个mongod进程,每个进程使用相同的配置文件。最后,使用mongo工具连接到副本集,将各个节点加入副本集中。
2. 选主过程:当副本集初始化完成后,将开始选主过程。选主过程通过选举算法选举出一个主节点,负责处理客户端的读写请求。如果主节点宕机,副本节点将自动发起新的选主过程,选举出新的主节点。
3. 数据同步:副本节点的主要任务是从主节点复制数据,以保持与主节点的数据同步。复制过程分为两个阶段:初始化同步和持续同步。初始化同步发生在副本节点加入副本集时,副本节点将从主节点复制全部数据。持续同步发生在初始化同步完成后,副本节点定期从主节点复制新的数据。
4. 读写操作:客户端可以通过连接到主节点或副本节点进行读写操作。默认情况下,客户端将连接到主节点进行读写操作。如果主节点不可用,客户端可以自动切换到其他副本节点进行读写操作。
2.环境准备
1.确保你已经安装了MongoDB并且每个实例都在运行
2.启动MongoDB实例,并指定--replSet
参数来定义副本集的名称。
例如,你可以在启动MongoDB服务时使用以下命令来定义副本集名称:
主节点:
从节点1:
从节点2:
以上三个节点启动的都是一次性服务,所以窗口不要关闭!
这里rs0
是副本集的名称,端口27017
、27019
和27020
是分别运行的MongoDB实例的端口。
3.配置副本集
维持服务不要关闭,进入任何一个节点内:
进行配置:
1.切换到admin数据库
2.配置集群
说明:第一个“_id”为副本集名称,“priority”为优先级,数字越大,优先级越高。
3.使得配置生效
4.使用命令来查看复制集状态
5.验证MongoDB复制集
接下来需要验证一下复制集的数据同步。
在主节点(127.0.0.1:27017)上的test库collection集合c1中插入数据。
usetest
db.c1.insert({name:"zpq",age:1})
登陆另一个从节点(127.0.0.1:27019)验证是否同步,命令
mongo127.0.0.1:27019
或者
mongolocalhost:27019
或者
mongo-port27019(因为IP都是一样的,就不需要指定IP了)
我们需要运行命令: 副本集的从库持久设置
rs.slaveOk()
6.MongoDB复制集简单维护
我们可以通过修改上面这些参数来进行复制集的维护;首先登陆到主节点mongo 127.0.0.1:27017,因为只能在主节点上操作。
1.增加从节点
rs.add(“ip:port”)
rs.add({"_id":4,“host”:“ip:port”,“priority”:1,“hidden”:false})
2.增加投票节点
rs.addArb(“ip:port”)
rs.addArb({"_id":5,“host”:“ip:port”})
rs.add({"_id":5,“host”:“new_node:port”,“arbiterOnly”:true})
3.删除节点
rs.remove(“ip:port”)
4.修改节点参数
(1)config=rs.conf()
(2)config.members[i].参数=值
(3)rs.reconfig(config,{“force”:true})或
rs.reconfig(config),前面是强制重新配置
7.最后
副本集的优点
1. 高可用性:副本集提供了自动故障转移功能,确保在主节点宕机时,副本节点能够自动接替主节点,继续提供服务。
2. 冗余性:副本集提供了数据冗余,确保了数据的安全性和可靠性。即使个别节点出现故障,整个系统仍然可以继续运行。
3. 负载均衡:副本集可以实现负载均衡,将读写操作分布在多个节点上,提高系统性能。
4. 回滚支持:副本集支持回滚操作,当发现数据不一致时,可以通过回滚操作恢复到一致的状态。