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]