温馨提示×

如何实现Linux MongoDB集群

小樊
31
2025-12-02 17:28:50
栏目: 云计算

Linux 上搭建 MongoDB 集群的实用指南

一、架构选型与规划

  • 常见形态有两种:
    1. 副本集 Replica Set:提供数据冗余与自动故障转移,适合大多数业务起步与中小规模场景。
    2. 分片集群 Sharded Cluster:在副本集基础上横向扩展容量与吞吐,由 Shard(分片)Config Server(配置服务器)mongos(路由) 三大组件构成。自 MongoDB 3.4 起,Config Server 必须为副本集;自 3.6 起,每个 Shard 也建议/必须为副本集。典型实践是:3 台 Config Server 副本集每个 Shard 为 3 节点副本集2 个及以上 mongos 路由器

二、通用前置准备

  • 系统与安全:
    • 建议 NTP 时间同步、关闭 SELinux 或放行端口、按需开放防火墙端口(如 27017/27018/27019/20000/21000 等)。
    • 规划 /etc/hosts 或使用 DNS,保证节点间可解析。
  • 资源与内核:
    • 官方建议在 Linux 上禁用 透明大页 THP,并调高 文件句柄数(如 nofile ≥ 64000;MongoDB 4.4 起低于 64000 可能报错)。
  • 目录与权限:
    • dbPath、logPath 预建目录并设定属主(常见为 mongod 用户)。
  • 安装方式:
    • 使用发行版官方仓库或 MongoDB 官方安装包安装对应版本,保持集群节点版本一致。

三、方案一 副本集快速落地(高可用起步)

  • 安装与配置(每台机器一个实例,示例端口 27017):
    • 配置文件 /etc/mongod.conf(关键项):
      • storage.dbPath、systemLog.path
      • net.port、net.bindIp(建议绑定内网地址或 0.0.0.0 并配合防火墙)
      • replication.replSetName: rs0
  • 启动与初始化:
    • 启动:mongod --config /etc/mongod.conf(或 systemctl start mongod)
    • 连接任一节点初始化:
      • rs.initiate({ _id: “rs0”, members: [{_id:0,host:“host1:27017”},{_id:1,host:“host2:27017”},{_id:2,host:“host3:27017”}] })
    • 验证:rs.status()、rs.conf()
    • 扩容:rs.add(“host4:27017”);如需仲裁:rs.addArb(“host5:27017”)
  • 客户端连接:
    • 连接字符串示例:mongodb://host1:27017,host2:27017,host3:27017/?replicaSet=rs0

四、方案二 分片集群部署(规模化与高吞吐)

  • 组件与端口规划(示例):
    • Config Server 副本集:3 节点,端口 20001
    • Shard1/2/3 副本集:每分片 3 节点,端口 20002/20003/20004
    • mongos 路由器:2 节点,端口 27017
  • 部署步骤:
    1. 部署并初始化 Config Server 副本集(mongod 配置中启用 configsvr: true,并以副本集方式启动与初始化)。
    2. 部署各 Shard 副本集(mongod 配置中设置 sharding.clusterRole: shardsvr,分别初始化各分片副本集)。
    3. 启动 mongos(–configdb 指向 Config Server 副本集连接串)。
    4. 连接 mongos 添加分片:sh.addShard(“shard1/host1:20002,host2:20002,host3:20002”)(对 shard2/shard3 同理)。
    5. 启用数据库与集合分片:
      • sh.enableSharding(“mydb”)
      • sh.shardCollection(“mydb.users”, { “user_id”: 1 })(请结合查询模式谨慎选择分片键)
    6. 验证:sh.status()、rs.status() 查看集群与副本集健康状态。

五、安全与运维要点

  • 认证与密钥:
    • 生成 keyFile 并分发到所有 mongod/mongos,配置 security.keyFileauthorization: enabled;应用通过 mongos 访问集群。
  • 网络与防火墙:
    • 仅开放必要端口,限制来源网段;跨机房部署时优先内网互联。
  • 监控与备份:
    • 使用 mongostat/mongotop、日志与监控平台观察连接、QPS、复制延迟;定期物理/逻辑备份(如 mongodump、文件系统快照)。
  • 连接与读写:
    • 应用统一连接 mongos;副本集读偏好可按需设置(如 secondaryPreferred),关键业务默认走 primary。
  • 常见排错:
    • 节点无法加入副本集:核对 replSetName、网络连通性、防火墙、keyFile 一致性;
    • 分片不均衡:检查 分片键 基数与分布,必要时使用 moveChunk/balancer 调整。

0