前言
MongoDB 有三种集群架构模式,分别为主从复制(Master-Slaver)、副本集(Replica Set)和分片(Sharding)模式。
Master-Slaver 是一种主从复制的模式,目前已经不推荐使用。从MongoDB 4.0版本开始,官方已经不再支持主从复制配置,转而推荐使用更先进的副本集(Replica Set)架构。副本集提供了自动故障转移、数据冗余和读写分离等高级功能,相比主从复制更加灵活和稳定。
Replica Set 模式取代了 Master-Slaver 模式,是一种互为主从的关系。Replica Set 将数据复制多份保存,不同服务器保存同一份数据,在出现故障时自动切换,实现故障转移,在实际生产中非常实用。
Sharding 模式适合处理大量数据,它将数据分开存储,不同服务器保存不同的数据,所有服务器数据的总和即为整个数据集。
本文以副本集搭建为例
开始搭建
mongodb服务安装我们先略过了,网上的教程一大把,直接开始讲配置
在主从节点的mongod.conf
配置文件中,加入以下设置
replication:
replSetName: "rs0"
oplogSizeMB: 5120 #限制操作日志(oplog)的大小为5G。类似mysql的binlog,这里限制大小即限制了mongodb保留的历史数据数量,需要根据数据量、数据入库速率、宕机允许时长、磁盘总空间等综合考量,默认限制不超过50G
rs0表示集群名字,同一集群的这项配置都要相同,根据项目自己起这个名字即可,后面初始化命令会用到
启动mongodb服务
mongod -f mongod.conf
选其中任意一台作为master,在集群模式里叫做"primary"了,只有primary节点才可以写入数据,slave节点即集群模式叫做"secondary"只能读取数据。和master/slave方式不同,集群模式可以随时切换primary节点到任意secondary节点上,可以经由故障转移自动切换也可以手动命令切换
初始化集群
所有集群mongo服务启动后,登录到primary节点命令行
use admin
rs.initiate({
_id: "netops",
members: [
{ _id: 0, host: "10.1.3.185:27017" },
{ _id: 1, host: "10.1.3.186:27017" },
{ _id: 1, host: "10.1.3.187:27017", arbiterOnly: true } // 如果是仲裁节点
]
})
MongoDB集群中的仲裁节点(Arbiter)是一种特殊类型的节点,它在副本集(Replica Set)架构中扮演着关键的角色。仲裁节点的主要功能集中在参与新主节点的选举过程中,它帮助维持投票的多数原则,确保集群能够迅速且确定性地选出新的主节点。而不涉及数据的存储或复制,换句话说仲裁节点不存储任何数据副本。
这样就搭建好了,是不是很简单?随后就能看到数据从主节点不断复制到从节点
*注意,mongodb集群的各个服务器,要保证数据一致性,以有数据的服务为primary,其他服务的库都置空,集群建起后,mongodb会自己拷贝数据的
一些命令
查看集群状态
rs.status()
重新配置现有的副本集
作用:rs.reconfig 用于重新配置现有的副本集。当你需要修改副本集的配置,比如添加或移除副本集成员、改变成员优先级、修改选举超时等,就需要使用这个命令。这个操作允许你在不中断整个服务的情况下动态调整副本集的结构和设置。
使用选项:通常建议使用 {force : true} 选项来避免由于大多数成员不可达而导致的配置更新失败。但是,强制重新配置可能会导致数据不一致或复制问题,因此应当谨慎使用。
rs.reconfig(
{
"_id": "rs0",
"members": [
{ _id: 0, host: "10.1.3.185:27017" },
{ _id: 1, host: "10.1.3.186:27017" }
]
},
{ force: true }
)
获取MongoDB实例当前的运行状态和各种统计信息。此命令返回一个详细的文档,包含了关于服务器性能、状态、硬件使用情况、存储引擎、索引、复制集信息(如果适用)、网络、内存使用、操作计数等多个方面的数据。这个命令对于监控MongoDB实例的健康状况、性能调优和故障排查极为有用
db.serverStatus()