温馨提示×

mongodb集群搭建centos上如何操作

小樊
39
2025-12-17 11:21:11
栏目: 云计算

在 CentOS 上搭建 MongoDB 集群的实操指南

一、方案选型与准备

  • 常见两种形态:
    • 副本集 Replica Set:提供高可用与自动故障转移,适合中小规模或需要高可用的单机替代场景。
    • 分片集群 Sharded Cluster:由 mongos 路由配置服务器副本集(CSRS) 和多个 分片副本集 组成,适合大数据量/高吞吐场景。
  • 规划与要求:
    • 使用 奇数个节点(如 3/5/7),便于选举与容错;生产环境建议 CSRS 至少 3 成员,每个分片也建议 3 成员副本集
    • 组件与端口建议:Config Server 27019Shard 27018mongos 27017
    • 强烈建议使用 DNS 主机名 而非 IP 进行配置;自 MongoDB 5.0 起仅配置 IP 的节点可能无法通过启动验证;从 MongoDB 8.0 起可使用 directShardOperations 角色执行直连分片维护操作(谨慎使用)。
    • 网络与安全:集群各节点需互通,并配置防火墙放行相关端口;生产应启用身份验证内部成员认证(如 x.509)。

二、安装 MongoDB(CentOS 7/8 通用)

  • MongoDB 6.0 为例(可按需替换为 7.0 等版本):
    • 创建 YUM 源并安装:
      • 创建文件 /etc/yum.repos.d/mongodb-org-6.0.repo,内容:
        • [mongodb-org-6.0]
        • name=MongoDB Repository
        • baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/6.0/x86_64/
        • gpgcheck=1
        • enabled=1
        • gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc
      • 安装与启动:
        • sudo yum install -y mongodb-org
        • sudo systemctl start mongod
        • sudo systemctl enable mongod
    • 目录与权限(默认 dbPath 为 /var/lib/mongo,日志 /var/log/mongodb/mongod.log):
      • sudo chown -R mongod:mongod /var/lib/mongo /var/log/mongodb
    • 防火墙放行(示例):
      • sudo firewall-cmd --zone=public --add-port=27017/tcp --permanent
      • sudo firewall-cmd --zone=public --add-port=27018/tcp --permanent
      • sudo firewall-cmd --zone=public --add-port=27019/tcp --permanent
      • sudo firewall-cmd --reload
    • 提示:若使用 SELinux,建议设置为 permissive 或按官方指南配置策略;生产环境不建议直接关闭。

三、部署副本集(高可用入门)

  • 步骤概览:
    • 在所有节点编辑 /etc/mongod.conf,加入副本集名称(如 rs0):
      • replication:
        • replSetName: “rs0”
    • 重启服务:sudo systemctl restart mongod
    • 连接任一节点初始化副本集(使用主机名或 IP):
      • mongo --host <node1_ip> --port 27017
      • 在 mongo shell 中执行:
        • rs.initiate({ _id: “rs0”, members: [ { _id: 0, host: “<node1_ip>:27017” }, { _id: 1, host: “<node2_ip>:27017” }, { _id: 2, host: “<node3_ip>:27017” } ] })
    • 验证:rs.status() 应显示 PRIMARY/SECONDARY 状态。
  • 说明:副本集提供 自动故障转移数据冗余,写入仅在主节点,读可扩展到从节点。

四、部署分片集群(可横向扩展)

  • 架构与端口:
    • CSRS(3 节点):端口 27019
    • 分片副本集(每分片 3 节点):端口 27018
    • mongos(1 或多实例):端口 27017
  • 配置步骤(示例命令与配置片段):
    • 配置服务器副本集(CSRS):
      • 配置 /etc/mongod.conf(每台 CSRS 节点):
        • storage.dbPath: /var/lib/mongo/configdb
        • systemLog: { destination: file, path: /var/log/mongodb/configdb.log, logAppend: true }
        • net.bindIp: 0.0.0.0(或指定主机名/IP)
        • replication.replSetName: “csrs”
        • sharding.clusterRole: configsvr
      • 启动:sudo systemctl start mongod
      • 初始化(连接任一 CSRS 节点):
        • mongo --host <cfg1_host>:27019
        • rs.initiate({ _id: “csrs”, configsvr: true, members: [ { _id: 0, host: “<cfg1_host>:27019” }, { _id: 1, host: “<cfg2_host>:27019” }, { _id: 2, host: “<cfg3_host>:27019” } ] })
    • 配置分片副本集(示例为两个分片 shard1、shard2,每分片 3 节点):
      • 配置 /etc/mongod.conf(每台分片节点):
        • storage.dbPath: /var/lib/mongo/shard1(或 shard2)
        • systemLog: { destination: file, path: /var/log/mongodb/shard1.log, logAppend: true }
        • net.bindIp: 0.0.0.0
        • replication.replSetName: “shard1”(或 “shard2”)
        • sharding.clusterRole: shardsvr
      • 启动各分片节点后,分别连接并初始化副本集(rs.initiate),方法与 CSRS 类似。
    • 启动 mongos(建议以 systemd 管理,示例命令):
      • 配置 /etc/mongos.conf:
        • sharding.configDB: “csrs/<cfg1_host>:27019,<cfg2_host>:27019,<cfg3_host>:27019”
        • net.bindIp: 0.0.0.0
        • net.port: 27017
      • 启动:mongos --config /etc/mongos.conf
    • 添加分片(连接 mongos):
      • mongo --host <mongos_host>:27017
      • sh.addShard(“shard1/<s1_host1>:27018,<s1_host2>:27018,<s1_host3>:27018”)
      • sh.addShard(“shard2/<s2_host1>:27018,<s2_host2>:27018,<s2_host3>:27018”)
    • 对数据库与集合启用分片(示例):
      • sh.enableSharding(“mydb”)
      • sh.shardCollection(“mydb.mycoll”, { “shardKey”: 1 })(请结合业务选择分片键)
    • 验证:sh.status() 查看集群与分片状态。

五、验证与运维要点

  • 健康检查与常用命令:
    • 副本集:rs.status()、rs.conf()、rs.add()/rs.remove()
    • 分片集群:sh.status()、sh.addShard()、sh.enableSharding()、sh.shardCollection()
  • 安全与网络:
    • 生产环境务必启用 身份验证内部成员认证(如 x.509),并限制来源网段访问;使用 DNS 主机名 统一标识节点,避免 IP 变更带来维护成本。
    • 建议开启 NTP 时间同步,避免选举与复制异常。
  • 监控与工具:
    • 使用 mongostat、mongotop 与日志排查性能与阻塞;可用 MongoDB Compass 进行可视化监控与分片管理。

0