首页主机资讯mongodb在centos上如何负载均衡

mongodb在centos上如何负载均衡

时间2025-11-26 18:07:03发布访客分类主机资讯浏览1408
导读:MongoDB 在 CentOS 上的负载均衡实践 一、总体架构与选择 副本集 Replica Set:同一份数据在多个节点间同步,提供高可用与读扩展。写操作仅在Primary节点,读操作可分发到Secondary节点,天然实现读负载分担...

MongoDB 在 CentOS 上的负载均衡实践

一、总体架构与选择

  • 副本集 Replica Set:同一份数据在多个节点间同步,提供高可用读扩展。写操作仅在Primary节点,读操作可分发到Secondary节点,天然实现读负载分担。适合大多数业务扩容与容灾场景。
  • 分片集群 Sharded Cluster:按分片键将数据分布到多个分片,实现水平扩展容量/吞吐提升。集群内置的负载均衡器会在分片间自动迁移数据块,过程对应用透明。
  • 连接入口:分片集群使用 mongos 作为统一入口;副本集可直接连任一节点或使用代理/负载均衡器作为入口。
    以上机制共同构成 MongoDB 在 CentOS 上的主流“负载均衡”方案。

二、基于副本集的负载均衡步骤

  • 安装 MongoDB(以 CentOSYUM 仓库为例):
    sudo yum install -y mongodb-org
  • 配置每个节点的 /etc/mongod.conf(关键项):
    storage:
    dbPath: /var/lib/mongo
    journal: { enabled: true }
    systemLog:
    destination: file; logAppend: true; path: /var/log/mongodb/mongod.log
    net:
    port: 27017; bindIp: 0.0.0.0
    replication:
    replSetName: rs0
  • 启动服务:
    sudo systemctl start mongod
  • 初始化副本集(在其中一台执行):
    mongo --eval ‘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” }
    ]
    } )’
  • 读负载分担(应用侧配置):将读偏好设为 secondaryPreferrednearest,写仍到 Primary。示例(驱动/Shell 均可):
    db.getMongo().setReadPref(‘secondaryPreferred’)
    以上即可获得读扩展与故障自动切换能力。

三、基于分片集群的负载均衡步骤

  • 配置服务器(CSRS,至少 3 节点,端口 27019):
    mongod --configsvr --replSet configReplSet --dbpath /data/configdb --port 27019
    在其中一台初始化:
    mongo --port 27019
    rs.initiate({
    _id: “configReplSet”, configsvr: true,
    members: [{ _id:0,host:“10.0.0.21:27019”} ,{ _id:1,host:“10.0.0.22:27019”} ,{ _id:2,host:“10.0.0.23:27019”} ]
    } )
  • 分片服务器(每个分片为副本集,端口 27018):
    mongod --shardsvr --replSet shardReplSet1 --dbpath /data/shard1 --port 27018
    初始化分片副本集(略,同副本集步骤)。
  • 路由进程 mongos(应用统一入口,端口 27017):
    mongos --configdb configReplSet/10.0.0.21:27019,10.0.0.22:27019,10.0.0.23:27019 --port 27017
  • 添加分片与启用分片:
    mongo --port 27017
    sh.addShard(“shardReplSet1/10.0.0.31:27018,10.0.0.32:27018,10.0.0.33:27018”)
    sh.enableSharding(“mydb”)
    sh.shardCollection(“mydb.mycol”, { “shardKey”: 1 } )
  • 集群内置负载均衡:MongoDB 在 CSRS 主节点上运行负载均衡器,按数据量阈值在分片间自动迁移数据块,对应用透明;可设置均衡窗口或临时禁用以控制影响。

四、使用 HAProxy 统一入口与故障切换(可选)

  • 安装:sudo yum install -y haproxy
  • 建议以 TCP 模式转发 MongoDB 27017 端口,示例 /etc/haproxy/haproxy.cfg:
    global
    log /dev/log local0 info
    daemon
    defaults
    mode tcp
    option tcplog
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms
    frontend mongo_frontend
    bind *:27017
    default_backend mongo_backend
    backend mongo_backend
    balance roundrobin
    server mongo1 10.0.0.11:27017 check
    server mongo2 10.0.0.12:27017 check
    server mongo3 10.0.0.13:27017 check
  • 启动:sudo systemctl start haproxy
  • 连接测试:mongo --host < haproxy_ip> --port 27017
    说明:副本集场景下,应用仍需开启读偏好以利用从节点读扩展;分片集群建议直接连 mongos 入口。

五、生产要点与常见误区

  • 读/写路径:写只能在 Primary;读可到 Secondary(通过 readPreference),不要把“负载均衡”理解为写也能被代理均摊。
  • 连接策略:副本集建议直接提供多个节点连接字符串,驱动会自动发现拓扑;如使用 HAProxy,仍建议开启读偏好以利用从节点。
  • 分片设计:合理选择分片键,避免热点与跨分片排序/聚合;必要时使用 hashed 分片键或组合键。
  • 变更窗口:分片集群的均衡器可设置运行时间窗口,避免高峰迁移影响性能。
  • 监控与维护:使用 mongostat、mongotopPrometheus/Grafana 监控复制延迟、连接数、迁移状态与慢查询。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: mongodb在centos上如何负载均衡
本文地址: https://pptw.com/jishu/756917.html
centos中mongodb如何升级 centos下mongodb如何日志管理

游客 回复需填写必要信息