部署概述
版本要求
- MongoDB: 7.x / 8.0
- 端口: 37017, 37018, 37019
配置文件
主节点配置
dbpath=/data/mongo/data/server1
bind_ip=0.0.0.0
port=37017
fork=true
logpath=/data/mongo/logs/server1.log
replSet=WzkCluster
初始化复制集
var cfg = {
"_id": "WzkCluster",
"protocolVersion": 1,
"members": [
{"_id": 1, "host": "10.10.52.38:37017", "priority": 10},
{"_id": 2, "host": "10.10.52.38:37018"}
]
}
rs.initiate(cfg)
添加/移除节点
// 添加节点
rs.add("ip:37019")
// 移除节点
rs.remove("ip:37019")
节点角色
- PRIMARY: 可以查询和插入数据
- SECONDARY: 只能查询,不能插入,可被选举为主
- ARBITER: 不能查询和插入数据,不能成为主节点
常见错误
| 问题 | 根因 | 解决方案 |
|---|
| 节点未加入 | replSetName不匹配 | 统一replSetName |
| 选举问题 | 少于多数派 | 添加第三个节点 |
| 从节点读取失败 | 读偏好未设置 | 添加readPreference |
回滚操作
// 降级主节点
rs.stepDown(60)
// 修改成员优先级
cfg = rs.conf()
cfg.members[2].priority = 0
rs.reconfig(cfg)
关键点
- 默认从节点不能读取数据,需要使用
rs.slaveOk()
- 主节点故障时,从节点自动选举新主节点