部署概述

版本要求

  • 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()
  • 主节点故障时,从节点自动选举新主节点