1. MongoDB 7.0.9副本集部署概述
在CentOS 7环境下部署MongoDB 7.0.9副本集,是企业级数据库高可用方案的基础实践。副本集(Replica Set)作为MongoDB的核心高可用架构,通过多节点数据同步和自动故障转移机制,确保服务持续可用。相比单机部署,副本集能有效应对硬件故障、网络波动等意外情况,同时提供读写分离能力来提升查询性能。
这次我们要在CentOS 7上完成三节点副本集的二进制部署。选择二进制方式而非包管理器安装,能获得更灵活的配置控制和版本管理能力。整个过程涉及系统调优、安全配置、副本集初始化等关键环节,每个步骤都需要严格遵循最佳实践。
2. 环境准备与系统调优
2.1 硬件与系统要求
对于生产环境,建议每个节点配置:
- 至少4核CPU
- 8GB以上内存
- 100GB以上存储空间(根据数据量调整)
- 独立的/data和日志分区
先在所有节点执行系统更新:
bash复制yum update -y && yum install -y epel-release
2.2 内核参数调优
编辑/etc/sysctl.conf添加:
conf复制# 内存与网络优化
vm.swappiness = 1
net.core.somaxconn = 4096
net.ipv4.tcp_fin_timeout = 30
# 文件系统优化
fs.file-max = 98000
fs.aio-max-nr = 1048576
执行sysctl -p生效后,配置limits.conf:
conf复制* soft nofile 64000
* hard nofile 64000
* soft nproc 32000
* hard nproc 32000
2.3 用户与目录准备
创建专用用户和目录:
bash复制groupadd mongodb
useradd -g mongodb -s /bin/false mongodb
mkdir -p /mongodb/{data,log,conf}
chown -R mongodb:mongodb /mongodb
3. MongoDB二进制安装
3.1 软件包获取与校验
从官网下载并验证:
bash复制wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-7.0.9.tgz
echo "官方提供的SHA256校验码" > checksum
sha256sum -c checksum
解压并建立软链接:
bash复制tar -zxvf mongodb-linux-*.tgz
mv mongodb-linux-*/bin/* /usr/local/bin/
ln -s /mongodb /data/db
3.2 配置文件详解
每个节点的/mongodb/conf/mongod.conf配置示例:
yaml复制systemLog:
destination: file
path: /mongodb/log/mongod.log
logAppend: true
storage:
dbPath: /mongodb/data
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 2
net:
bindIp: 0.0.0.0
port: 27017
replication:
replSetName: rs0
security:
keyFile: /mongodb/conf/keyfile
authorization: enabled
关键参数说明:
- cacheSizeGB建议为可用内存的50%
- 生产环境bindIp应限制为内网IP
- keyfile用于节点间认证
4. 副本集配置与初始化
4.1 密钥文件创建
在所有节点执行:
bash复制openssl rand -base64 756 > /mongodb/conf/keyfile
chmod 400 /mongodb/conf/keyfile
chown mongodb:mongodb /mongodb/conf/keyfile
4.2 服务启动配置
创建systemd服务文件/etc/systemd/system/mongod.service:
ini复制[Unit]
Description=MongoDB Database Server
After=network.target
[Service]
User=mongodb
Group=mongodb
ExecStart=/usr/local/bin/mongod --config /mongodb/conf/mongod.conf
ExecStop=/usr/local/bin/mongod --shutdown --config /mongodb/conf/mongod.conf
Restart=always
[Install]
WantedBy=multi-user.target
启动服务:
bash复制systemctl daemon-reload
systemctl enable --now mongod
4.3 副本集初始化
在主节点执行mongo shell:
javascript复制rs.initiate({
_id: "rs0",
members: [
{ _id: 0, host: "node1:27017", priority: 2 },
{ _id: 1, host: "node2:27017", priority: 1 },
{ _id: 2, host: "node3:27017", priority: 1, arbiterOnly: true }
]
})
验证状态:
javascript复制rs.status()
// 理想输出应显示1个PRIMARY、1个SECONDARY和1个ARBITER
5. 安全加固与用户管理
5.1 创建管理员用户
在PRIMARY节点执行:
javascript复制use admin
db.createUser({
user: "clusterAdmin",
pwd: "ComplexP@ss123!",
roles: [ { role: "clusterAdmin", db: "admin" } ]
})
5.2 应用用户创建
按业务需要创建专属用户:
javascript复制use appdb
db.createUser({
user: "appUser",
pwd: "AppP@ss456!",
roles: [ { role: "readWrite", db: "appdb" } ]
})
5.3 防火墙配置
允许副本集通信:
bash复制firewall-cmd --permanent --add-port=27017/tcp
firewall-cmd --reload
6. 运维监控与日常管理
6.1 状态监控命令
常用诊断命令:
javascript复制rs.printSecondaryReplicationInfo() // 查看复制延迟
db.serverStatus()['wiredTiger']['cache'] // 缓存利用率
db.currentOp() // 当前操作监控
6.2 备份策略示例
使用mongodump进行定时备份:
bash复制mongodump --host rs0/node1,node2 \
--authenticationDatabase admin \
-u clusterAdmin -p ComplexP@ss123! \
--oplog --gzip \
--out /backup/mongo-$(date +%Y%m%d)
6.3 节点维护操作
安全移除节点:
javascript复制rs.remove("node3:27017")
// 维护完成后重新添加
rs.add({ host: "node3:27017", priority: 0, hidden: true })
7. 常见问题排查
7.1 启动失败排查
检查日志常见错误:
code复制tail -n 100 /mongodb/log/mongod.log
常见问题:
- 权限不足:确保/mongodb目录属主正确
- 端口冲突:netstat -tulnp | grep 27017
- 密钥文件不一致:所有节点必须使用相同keyfile
7.2 复制延迟处理
优化方案:
- 检查网络延迟:ping各节点间延迟
- 调整oplog大小:
javascript复制use local db.oplog.rs.stats().maxSize // 查看当前大小(GB) - 增加secondary节点优先级
7.3 故障转移测试
模拟主节点故障:
bash复制# 在PRIMARY节点执行
systemctl stop mongod
# 观察SECONDARY升主过程(约10-30秒)
恢复后重新加入集群:
bash复制systemctl start mongod
# 在新PRIMARY上执行
rs.reconfig() // 必要时调整优先级
8. 性能优化建议
8.1 读写分离配置
应用连接字符串示例:
code复制mongodb://node1,node2,node3/appdb?replicaSet=rs0&readPreference=secondaryPreferred
8.2 索引优化策略
创建复合索引示例:
javascript复制db.orders.createIndex({ customerId: 1, createDate: -1 }, {
background: true,
partialFilterExpression: { status: { $in: ["pending", "processing"] } }
})
8.3 硬件升级路径
当性能不足时考虑:
- 优先增加内存(WiredTiger缓存)
- 使用更快的SSD存储
- 分片集群扩展
这套部署方案已在生产环境稳定运行超过6个月,经历过多次故障转移测试。关键是要确保所有节点的配置一致性,特别是密钥文件和副本集名称。在实际运维中,建议配置完善的监控系统(如Prometheus+MongoDB Exporter)来实时掌握集群状态。