mongodb在centos上如何负载均衡
导读:MongoDB 在 CentOS 上的负载均衡实践 一、总体架构与选择 副本集 Replica Set:同一份数据在多个节点间同步,提供高可用与读扩展。写操作仅在Primary节点,读操作可分发到Secondary节点,天然实现读负载分担...
MongoDB 在 CentOS 上的负载均衡实践
一、总体架构与选择
- 副本集 Replica Set:同一份数据在多个节点间同步,提供高可用与读扩展。写操作仅在Primary节点,读操作可分发到Secondary节点,天然实现读负载分担。适合大多数业务扩容与容灾场景。
- 分片集群 Sharded Cluster:按分片键将数据分布到多个分片,实现水平扩展与容量/吞吐提升。集群内置的负载均衡器会在分片间自动迁移数据块,过程对应用透明。
- 连接入口:分片集群使用 mongos 作为统一入口;副本集可直接连任一节点或使用代理/负载均衡器作为入口。
以上机制共同构成 MongoDB 在 CentOS 上的主流“负载均衡”方案。
二、基于副本集的负载均衡步骤
- 安装 MongoDB(以 CentOS 的 YUM 仓库为例):
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” }
]
} )’ - 读负载分担(应用侧配置):将读偏好设为 secondaryPreferred 或 nearest,写仍到 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、mongotop 或 Prometheus/Grafana 监控复制延迟、连接数、迁移状态与慢查询。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: mongodb在centos上如何负载均衡
本文地址: https://pptw.com/jishu/756917.html
