1. 序言
- 本博客是上一博客的进阶版:mac M2安装单机版 MongoDB 7.x,上一博客可以看做是单机、单节点部署MongoDB
- 本博客将介绍单机、多服务部署MongoDB,实际就是伪分布式部署
2. 副本集(Replica Set)方式部署
2.1 什么是副本集?
- 多节点部署、主从部署等其实都是为了 MongoDB 的高可用,支持数据多副本、读写分离等
- 较新版本的MongoDB Master/slave 被废弃,通过副本集提供高可用和数据冗余
"msg":"Master/slave replication is no longer supported"
- 一个副本集由多个节点组成,其中一个节点是主节点(Primary),其余是从节点(Secondary)
- 主节点处理所有的写操作,从节点复制主节点的数据并可以处理读操作(如果启用了读偏好)
- 副本集的特点:
- 高可用性: 如果主节点发生故障,从节点会自动选举一个新的主节点。
- 数据冗余:数据在多个节点上复制,提供数据冗余。
- 读扩展:可以配置从节点处理读操作,以减轻主节点的负载。
2.2 副本集部署
2.2.1 启动3个MongoDB服务
-
在本机以前台进程的方式启动3个 MongoDB 服务,且指定副本集为
rs0
mongod --replSet rs0 --dbpath /Users/bytedance/mongodb11/data --port 27031 --bind_ip_all mongod --replSet rs0 --dbpath /Users/bytedance/mongodb12/data --port 27032 --bind_ip_all mongod --replSet rs0 --dbpath /Users/bytedance/mongodb13/data --port 27033 --bind_ip_all
-
如果想通过配置文件部署,服务1的配置文件如下
# 数据存储相关配置 storage: dbPath: /Users/bytedance/mongodb2/data journal: enabled: true # 网络相关配置 net: port: 27030 bindIp: 0.0.0.0 # 允许从所有IP地址访问 # 副本集相关配置 replication: replSetName: "rs0" # 日志相关配置 systemLog: destination: file logAppend: true logRotate: rename path: /Users/xxx/mongodb11/log/mongo.log # 进程管理相关配置 processManagement: fork: true # 以守护进程方式运行(后台运行) # 安全相关配置 security: authorization: disabled # 关闭用户认证
2.2.2 初始化副本集
-
通过mongosh登录访问其中一个服务:
mongosh --port 27032
-
执行如下命令初始化副本集合:
rs.initiate({ _id: "rs0", members: [ { _id: 0, host: "localhost:27031" }, { _id: 1, host: "localhost:27032" }, { _id: 2, host: "localhost:27033" } ] })
-
执行
rs.status()
验证副本集状态rs0 [direct: primary] test> rs.status() { set: 'rs0', ... # 其他信息省略 members: [ { _id: 0, # initiate 时指定的id name: 'localhost:27031', health: 1, state: 2, stateStr: 'SECONDA