admin 发表于 2026-8-11 18:29:42

MongoDB副本集搭建与数据高可用配置

MongoDB 副本集搭建与数据高可用配置

MongoDB 副本集是一组维护相同数据集的 mongod 实例,提供数据冗余和高可用性。以下是搭建 MongoDB 副本集的详细步骤:

1. 准备工作

硬件/环境要求

[*]至少3个服务器节点(生产环境建议奇数个节点)
[*]确保节点间网络互通
[*]相同的 MongoDB 版本


节点规划示例
| 节点类型 | 主机名/IP | 端口 | 角色 |
|---------|----------|------|------|
| Primary | node1 | 27017 | 主节点 |
| Secondary | node2 | 27017 | 备节点 |
| Secondary/Arbiter | node3 | 27017 | 备节点或仲裁节点 |

2. 配置副本集

2.1 修改配置文件

在每个节点的 mongod.conf 文件中添加或修改以下配置:

storage:
dbPath: /var/lib/mongodb
journal:
    enabled: true

systemLog:
destination: file
path: /var/log/mongodb/mongod.log
logAppend: true

net:
port: 27017
bindIp: 0.0.0.0# 或特定IP

replication:
replSetName: rs0# 副本集名称,所有节点需相同

2.2 启动 MongoDB 实例

# 在每个节点上启动 mongod
sudo systemctl start mongod
# 或
mongod --config /etc/mongod.conf

3. 初始化副本集

3.1 连接到主节点

mongo --host node1 --port 27017

3.2 初始化副本集

rs.initiate({
_id: "rs0",
members: [
    { _id: 0, host: "node1:27017" },
    { _id: 1, host: "node2:27017" },
    { _id: 2, host: "node3:27017" }
]
})

3.3 验证副本集状态

rs.status()

4. 配置高可用性

4.1 读写关注配置

// 设置写关注为"majority",确保大多数节点确认写入
use admin
db.runCommand({setParameter: 1, w: "majority"})

// 或者在应用连接字符串中指定
// mongodb://host1,host2,host3/?replicaSet=rs0&w=majority

4.2 选举配置

[*]确保副本集有奇数个成员(3,5,7...)
[*]考虑使用仲裁节点(Arbiter)作为第3个节点(不存储数据,只参与选举)


4.3 优先级配置

// 设置节点优先级(0-1000),优先级高的节点更可能成为主节点
cfg = rs.conf()
cfg.members.priority = 2// 节点1优先级更高
cfg.members.priority = 1
cfg.members.priority = 1
rs.reconfig(cfg)

5. 监控与维护

5.1 常用管理命令

// 查看副本集状态
rs.status()

// 手动触发选举
rs.stepDown()

// 查看副本集配置
rs.conf()

// 重新配置副本集
var cfg = rs.conf()
// 修改配置...
rs.reconfig(cfg)

5.2 监控指标

[*]复制延迟:rs.printSlaveReplicationInfo()
[*]选举状态
[*]心跳信息


6. 故障转移测试

[*]模拟主节点故障(停止主节点服务)
[*]观察副本集自动选举新主节点
[*]验证应用能否自动连接到新主节点


7. 最佳实践

[*]节点分布:将副本集成员分布在不同的物理机、机架或可用区
[*]磁盘配置:使用高性能SSD,确保足够的IOPS
[*]网络配置:低延迟、高带宽的网络连接
[*]备份策略:定期备份oplog和快照
[*]安全配置:启用认证和加密
[*]版本升级:滚动升级,保持版本一致


8. 仲裁节点(Arbiter)

如果资源有限,可以使用仲裁节点:

[*]不存储数据,只参与选举
[*]减少存储成本
[*]配置方法:在初始化时添加 { _id: 2, host: "arbiter:27017", arbiterOnly: true }


通过以上配置,MongoDB 副本集能够提供自动故障转移、数据冗余和读取扩展能力,确保数据库的高可用性。
页: [1]
查看完整版本: MongoDB副本集搭建与数据高可用配置