温馨提示×

如何在CentOS上管理MongoDB集群

小樊
41
2025-11-15 20:49:56
栏目: 云计算

在CentOS上管理MongoDB集群的实用指南

一 架构与前提

  • 常见形态:
    • 副本集 Replica Set:同机房高可用与自动故障切换,端口通常为27017
    • 分片集群 Sharded Cluster:由Config Server 副本集(端口 27019)、多个分片(Shard,建议每个分片为副本集,端口常用 27018)、**mongos 路由(端口 27017)**组成。
  • 系统与服务:
    • 操作系统:CentOS 7/8(示例使用 yum 与 systemd)。
    • 安装包:建议安装 mongodb-org 元包;如使用 mongos,需确保安装 mongodb-org-mongos
  • 网络与安全:
    • 开放端口:27017/27018/27019(或自定义端口),并限制来源网段。
    • 建议启用 TLS/认证(Keyfile/ x.509),生产环境务必开启鉴权。

二 常用管理操作清单

  • 服务与进程
    • 启动/停止/重启/开机自启:
      • 数据节点与配置节点:sudo systemctl start|stop|restart|enable mongod
      • 路由节点:sudo systemctl start|stop|restart|enable mongos(若以服务方式管理)
    • 以配置文件启动(适用于 mongos 或自定义实例):mongod/mongos --config /etc/mongod.conf
  • 配置管理
    • 修改配置后建议先备份:sudo cp /etc/mongod.conf /etc/mongod.conf.bak-$(date +%F)
    • 重新加载:sudo systemctl reload mongod(热加载有限,涉及网络/角色变更建议重启)
  • 复制集管理(rs)
    • 查看状态:rs.status()
    • 查看配置:rs.conf()
    • 添加节点:rs.add("host:port")
    • 移除节点:rs.remove("host:port")
    • 强制重选主(慎用):rs.stepDown(60)
  • 分片集群管理(mongos)
    • 连接路由:mongo --host <mongos_ip> --port 27017
    • 添加分片:sh.addShard("rsName/host1:port1,host2:port2,host3:port3")
    • 启用数据库分片:sh.enableSharding("dbName")
    • 对集合分片:sh.shardCollection("db.coll", { "shardKey": 1 })
    • 查看集群状态:sh.status()
  • 备份与恢复
    • 文件系统快照(LVM/ZFS 等):对数据目录一致性快照,适合副本集/分片环境。
    • mongodump/mongorestore:逻辑备份,适合小体量或按库/集合恢复。
    • 分片集群建议按分片分别备份,并在恢复时按顺序导入。

三 日常运维与故障排查

  • 健康检查
    • 复制集:rs.status() 关注 members.stateStr(PRIMARY/SECONDARY/ARBITER)、optimelastHeartbeat
    • 分片集群:sh.status() 检查 shardschunks 均衡、balancer 状态;db.printShardingStatus() 查看更细粒度元数据。
  • 日志与诊断
    • 数据/配置节点日志:默认 /var/log/mongodb/mongod.log;mongos 日志在配置中指定。
    • 慢查询:开启 profilingslowOpThresholdMs,分析 db.currentOp()db.system.profile
  • 常见故障
    • 节点无法加入复制集:核对 replSetNamebindIp网络连通性防火墙/SELinux时间同步(NTP)
    • 分片不均衡:检查 sh.status()balancer 是否开启,必要时 sh.startBalancer();观察 chunks 分布。
    • 路由异常:确认 mongosconfigDB 指向 Config Server 副本集 的完整连接串(含副本集名)。

四 安全与网络加固

  • 认证与授权
    • 启用 SCRAMx.509 认证;为 admin 与业务库创建最小权限角色。
    • 集群内部通信建议使用 内部认证(Keyfile),保证节点互信。
  • 传输加密
    • 配置 TLS/SSL,证书由受信 CA 签发;客户端、mongos、各分片与配置服务器间均启用加密。
  • 网络安全
    • 仅开放必要端口(如 27017/27018/27019)到受控网段;使用 firewalld/安全组 限制来源。
    • 禁用不必要的网络接口绑定,避免使用 0.0.0.0 暴露到公网。
  • 审计与合规
    • 启用 审计日志(auditLog) 记录关键操作;定期轮换密钥与证书。

五 快速命令示例

  • 复制集初始化(3 节点)
    • rs.initiate({ _id: "rs0", members: [{ _id: 0, host: "10.0.0.11:27017" }, { _id: 1, host: "10.0.0.12:27017" }, { _id: 2, host: "10.0.0.13:27017" }] })
    • 查看:rs.status()
  • 分片集群添加分片(每个分片为副本集)
    • sh.addShard("shard1/10.0.1.11:27018,10.0.1.12:27018,10.0.1.13:27018")
    • sh.addShard("shard2/10.0.2.11:27018,10.0.2.12:27018,10.0.2.13:27018")
  • 启用数据库与集合分片
    • sh.enableSharding("sales")
    • sh.shardCollection("sales.orders", { "customerId": 1 })
  • 状态查看
    • 分片集群:sh.status()
    • 复制集:rs.status()
  • 服务管理
    • 数据/配置节点:sudo systemctl restart mongod && sudo systemctl status mongod
    • 路由节点:mongos --config /etc/mongos.conf(或 sudo systemctl restart mongos

0