温馨提示×

Debian系统中MongoDB的集群搭建步骤

小樊
34
2025-12-09 05:44:12
栏目: 云计算

在 Debian 上搭建 MongoDB 集群的两种常见形态是副本集与分片集群。副本集提供高可用与自动故障转移,适合大多数业务;分片集群用于水平扩展,适合海量数据与高并发。下面给出可直接落地的步骤与关键注意事项。


一 前置准备

  • 准备至少3 台 Debian 服务器(副本集建议 3 节点起步;分片集群需额外配置服务器与路由)。
  • 安装 MongoDB(以 6.0 为例,Debian 11 Bullseye):
    • 导入公钥并添加官方仓库:
      • wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
      • echo “deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/debian bullseye/mongodb-org/6.0 multiverse” | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
    • 安装软件包:sudo apt update && sudo apt install -y mongodb-org
  • 目录与权限:确保数据目录(如 /var/lib/mongodb)存在且 mongod 可写。
  • 网络与防火墙:开放 27017(mongod/mongos)、27018(分片服务,可选)、27019(配置服务,可选)端口;保证节点间可互通。
  • 主机名解析:建议在所有节点的 /etc/hosts 中写入各节点 IP 与主机名 映射,避免 DNS 依赖。

二 搭建副本集 Replica Set(高可用)

  • 配置每个节点的 /etc/mongod.conf(示例):
    • net:
      • port: 27017
      • bindIp: 0.0.0.0(或指定内网 IP)
    • replication:
      • replSetName: rs0
    • storage:
      • dbPath: /var/lib/mongodb
  • 启动服务:sudo systemctl start mongod && sudo systemctl enable mongod
  • 任选一节点初始化副本集(Mongo Shell):
    • rs.initiate({
      • _id: “rs0”,
      • members: [
        • { _id: 0, host: “node1:27017” },
        • { _id: 1, host: “node2:27017” },
        • { _id: 2, host: “node3:27017” }
      • ]
    • })
  • 添加更多节点(如需要):rs.add(“node4:27017”)
  • 验证状态:rs.status()(应看到 PRIMARY/SECONDARY 角色与同步进度)
  • 可选优化:
    • 调整优先级控制主节点:cfg = rs.conf(); cfg.members[0].priority = 2; rs.reconfig(cfg)
    • 读写分离:在连接字符串中设置 readPreference=secondaryPreferred

三 搭建分片集群 Sharding(水平扩展)

  • 组件与端口规划(建议 3 台服务器各承载一种角色,或混布但端口隔离):
    • 配置服务器(CSRS,3 节点,端口 27019
    • 分片服务器(每个分片为副本集,示例 1 个分片 3 节点,端口 27018
    • 路由服务器(mongos,端口 27017
  • 配置服务器(CSRS):
    • 配置 /etc/mongod.conf:
      • sharding: clusterRole: configsvr
      • replication: replSetName: configReplSet
      • storage: dbPath: /var/lib/mongodb/configdb
    • 启动:sudo systemctl start mongod
    • 初始化:
      • rs.initiate({
        • _id: “configReplSet”, configsvr: true,
        • members: [{_id:0,host:“cfg1:27019”},{_id:1,host:“cfg2:27019”},{_id:2,host:“cfg3:27019”}]
      • })
  • 分片服务器(示例 shard1):
    • 配置 /etc/mongod.conf:
      • sharding: clusterRole: shardsvr
      • replication: replSetName: shard1
      • storage: dbPath: /var/lib/mongodb/shard1
    • 启动:sudo systemctl start mongod
    • 初始化:
      • rs.initiate({
        • _id: “shard1”,
        • members: [{_id:0,host:“sh1a:27018”},{_id:1,host:“sh1b:27018”},{_id:2,host:“sh1c:27018”}]
      • })
  • 路由服务器(mongos):
    • 配置 /etc/mongos.conf:
      • sharding: configDB: configReplSet/cfg1:27019,cfg2:27019,cfg3:27019
    • 启动:sudo mongos --config /etc/mongos.conf
  • 接入分片与启用分片:
    • 连接 mongos:mongo --host <mongos_ip>:27017
    • 添加分片:sh.addShard(“shard1/sh1a:27018,sh1b:27018,sh1c:27018”)
    • 启用数据库分片:sh.enableSharding(“mydb”)
    • 对集合分片(示例按字段 uid 哈希分片):sh.shardCollection(“mydb.users”, { “uid”: “hashed” })
  • 验证:sh.status()(查看分片、数据库、集合分布与均衡状态)

四 生产环境关键配置与运维要点

  • 安全加固:
    • 启用 SCRAM 认证,创建管理员与应用用户;
    • 使用 TLS/SSL 加密节点间与客户端通信;
    • 限制 bindIp 为内网网段,仅开放必要端口。
  • 高可用与容量:
    • 副本集建议 3 或 5 节点;分片集群每个分片也建议 3 节点 副本集;
    • 为关键业务设置合理的 优先级/隐藏/延迟 节点策略。
  • 监控与备份:
    • 启用 mongostat/mongotop 与日志审计;
    • 定期执行 mongodump/物理备份,并演练恢复流程;
    • 结合 MongoDB Compass 或企业监控平台观测延迟、复制滞后与连接数。
  • 客户端连接:
    • 副本集连接字符串示例:mongodb://host1:27017,host2:27017,host3:27017/?replicaSet=rs0&readPreference=secondaryPreferred
    • 分片集群连接字符串示例:mongodb://mongos:27017

0