CentOS MongoDB集群搭建步骤是什么
导读:CentOS 上搭建 MongoDB 集群的两种常见方式 副本集 Replica Set:用于高可用与数据冗余,至少 3 个节点(生产建议),应用直连任一节点即可,内部自动故障切换。适合大多数业务起步与中小规模场景。 分片集群 Shard...
CentOS 上搭建 MongoDB 集群的两种常见方式
- 副本集 Replica Set:用于高可用与数据冗余,至少 3 个节点(生产建议),应用直连任一节点即可,内部自动故障切换。适合大多数业务起步与中小规模场景。
- 分片集群 Sharding:用于水平扩展,由 mongos 路由、Config Server 配置服务器(建议 3 节点副本集)、多个 **Shard 分片(每个分片为副本集)**组成,适合大数据量或高并发场景。
一、准备与通用配置
- 系统要求:CentOS 7/8/Stream,时间同步(如 chrony),SELinux 建议为 permissive 或按策略放行,防火墙开放相应端口。
- 安装 MongoDB(YUM 方式,示例为 4.4,可按需调整版本):
- 导入公钥并添加仓库
sudo rpm --import https://www.mongodb.org/static/pgp/server-4.4.asc
echo “[mongodb-org-4.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc” | sudo tee /etc/yum.repos.d/mongodb-org-4.4.repo - 安装并启动
sudo yum install -y mongodb-org
sudo systemctl start mongod & & sudo systemctl enable mongod
- 导入公钥并添加仓库
- 防火墙放行(示例端口 27017):
sudo firewall-cmd --zone=public --add-port=27017/tcp --permanent & & sudo firewall-cmd --reload - 基础配置要点(/etc/mongod.conf):
net.bindIp: 0.0.0.0(或指定内网 IP)
replication.replSetName: rs0(副本集名称,集群内一致)
日志与数据目录保持默认或按需自定义,注意目录权限为 mongod:mongod。
二、搭建副本集 Replica Set(3 节点示例)
- 步骤
- 在 3 台机器上编辑 /etc/mongod.conf,加入:
replication:
replSetName: rs0 - 重启服务:sudo systemctl restart mongod
- 任选一台连接并初始化:
mongo --host < node1_ip> :27017
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 状态正常。
- 在 3 台机器上编辑 /etc/mongod.conf,加入:
- 说明
- 生产建议 3 个数据节点;如为资源受限环境可加 **Arbiter(仲裁者)**提供投票但不存数据,注意仲裁节点不要与数据节点同机。
- 客户端连接字符串示例:mongodb://< node1_ip> ,< node2_ip> ,< node3_ip> :27017/?replicaSet=rs0。
三、搭建分片集群 Sharding(最小可用示例)
- 架构与端口规划(示例)
- Config Server 副本集:3 节点,端口 27019,clusterRole: configsvr
- Shard1/2/3 副本集:每分片 3 节点,端口 27018/27019/27020,clusterRole: shardsvr
- mongos 路由:2 实例对外服务,端口 27017,configDB 指向 Config 副本集
- 部署步骤
- 部署并初始化 Config Server 副本集(3 节点)
- 配置示例:
sharding:
clusterRole: configsvr
net:
port: 27019
bindIp: 0.0.0.0
storage:
dbPath: /var/lib/mongo/configdb - 启动后在 mongo --port 27019 中:
rs.initiate({
_id: “configReplSet”,
configsvr: true,
members: [
{ _id: 0, host: “cfg1:27019” } ,
{ _id: 1, host: “cfg2:27019” } ,
{ _id: 2, host: “cfg3:27019” }
]
} )
- 配置示例:
- 部署 每个分片为副本集(以 Shard1 为例,3 节点)
- 配置示例:
sharding:
clusterRole: shardsvr
net:
port: 27018
bindIp: 0.0.0.0
storage:
dbPath: /var/lib/mongo/shard1 - 启动后在对应端口 mongo 中初始化副本集(如 rs.initiate({ _id:“shard1”, members:[…]} ))。
- 配置示例:
- 启动 mongos(建议 2 个实例做高可用)
- 命令示例:
mongos --configdb configReplSet/cfg1:27019,cfg2:27019,cfg3:27019 --port 27017 --bind_ip 0.0.0.0
- 命令示例:
- 连接 mongos 添加分片
- mongo --port 27017
sh.addShard(“shard1/sh1a:27018,sh1b:27018,sh1c:27018”)
sh.addShard(“shard2/sh2a:27019,sh2b:27019,sh2c:27019”)
sh.addShard(“shard3/sh3a:27020,sh3b:27020,sh3c:27020”)
- mongo --port 27017
- 启用数据库与集合分片
- sh.enableSharding(“mydb”)
- sh.shardCollection(“mydb.mycol”, { “shardKey”: 1 } )(请结合查询模式选择分片键)
- 验证
- sh.status() 查看集群概况;mongostat/mongotop 监控负载。
- 部署并初始化 Config Server 副本集(3 节点)
- 说明
- 生产强烈建议 Config Server 为 3 节点副本集;每个 Shard 为 3 节点副本集;mongos 可部署 2+ 实例避免单点。
- 客户端连接 mongos 的 27017 端口 即可,无需直连分片。
四、验证与运维要点
- 健康检查
- 副本集:rs.status()、rs.isMaster()
- 分片集群:sh.status()、mongostat、mongotop、日志(/var/log/mongodb/mongod.log)
- 安全建议(可选但强烈推荐)
- 启用 鉴权:创建管理员用户,启用 --auth;分片集群在 mongos 上创建用户并下发到各分片。
- 网络:仅开放内网端口,限制来源 IP;密钥文件用于分片间内部认证(keyFile)。
- 备份与恢复
- 副本集:mongodump/mongorestore、文件系统快照或 Ops Manager/Atlas 备份。
- 分片集群:通过 mongos 执行备份,确保一致性窗口。
- 常见排错
- 节点无法加入副本集:核对 replSetName 一致、网络互通、防火墙/SELinux、bindIp、时间同步。
- 分片不均衡:检查 balancer 是否开启、分片键选择是否合理、chunk 分布。
- mongos 路由异常:核对 configDB 地址与副本集名称、各分片健康状态。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS MongoDB集群搭建步骤是什么
本文地址: https://pptw.com/jishu/769851.html
