MongoDB集群分为**副本集(Replica Set)和分片集群(Sharded Cluster)**两种常见模式。副本集通过数据冗余实现高可用,分片集群通过水平分片提升数据处理能力。以下是CentOS系统下的详细搭建步骤:
wget、vim等基础工具。sudo firewall-cmd --zone=public --add-port=27017/tcp --permanent
sudo firewall-cmd --reload
在所有集群节点上执行以下步骤安装MongoDB:
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
副本集是MongoDB的核心高可用方案,至少需要3个节点(1主2从)。
mongod.conf编辑/etc/mongod.conf,添加以下配置(以节点1为例,节点2、3需修改port和dbPath):
storage:
dbPath: /var/lib/mongo/node1 # 数据存储路径
journal:
enabled: true
systemLog:
destination: file
path: /var/log/mongodb/node1.log # 日志路径
logAppend: true
net:
bindIp: 0.0.0.0 # 允许所有IP连接
port: 27017 # 节点端口
replication:
replSetName: rs0 # 副本集名称(所有节点必须一致)
sudo mkdir -p /var/lib/mongo/node1
sudo chown -R mongod:mongod /var/lib/mongo/node1
sudo systemctl start mongod
sudo systemctl enable mongod
连接到任意节点(如节点1),执行初始化命令:
mongo --host 192.168.1.10 --port 27017 # 替换为节点1的IP
在Mongo shell中输入:
rs.initiate({
_id: "rs0",
members: [
{ _id: 0, host: "192.168.1.10:27017" }, # 节点1
{ _id: 1, host: "192.168.1.11:27017" }, # 节点2
{ _id: 2, host: "192.168.1.12:27017" } # 节点3
]
})
rs.status()
正常状态应显示所有节点为SECONDARY(从节点)或PRIMARY(主节点)。
分片集群适用于大规模数据存储,由配置服务器(Config Server)、分片服务器(Shard)、**路由服务器(mongos)**三部分组成。
配置服务器存储集群元数据,必须为副本集。
mongod.conf(每个节点):storage:
dbPath: /var/lib/mongo/configdb # 数据路径
systemLog:
destination: file
path: /var/log/mongodb/configdb.log
logAppend: true
net:
bindIp: 0.0.0.0
port: 27019 # 配置服务器端口
sharding:
clusterRole: configsvr # 指定为配置服务器角色
sudo systemctl start mongod
sudo systemctl enable mongod
mongo --host 192.168.1.10 --port 27019
输入:rs.initiate({
_id: "configReplSet",
configsvr: true,
members: [
{ _id: 0, host: "192.168.1.10:27019" },
{ _id: 1, host: "192.168.1.11:27019" },
{ _id: 2, host: "192.168.1.12:27019" }
]
})
分片服务器存储实际数据,每个分片建议为副本集。
mongod.conf(每个分片节点,如分片1的节点1):storage:
dbPath: /var/lib/mongo/shard1 # 数据路径
systemLog:
destination: file
path: /var/log/mongodb/shard1.log
logAppend: true
net:
bindIp: 0.0.0.0
port: 27018 # 分片端口
sharding:
clusterRole: shardsvr # 指定为分片角色
sudo systemctl start mongod
sudo systemctl enable mongod
mongos是应用与集群的接口,负责请求路由。
mongos.conf:systemLog:
destination: file
path: /var/log/mongodb/mongos.log
logAppend: true
net:
bindIp: 0.0.0.0
port: 27017 # mongos端口
sharding:
configDB: configReplSet/192.168.1.10:27019,192.168.1.11:27019,192.168.1.12:27019 # 配置服务器副本集
mongos -f /etc/mongos.conf
连接到mongos,执行以下命令:
mongo --host 192.168.1.10 --port 27017
输入:
sh.addShard("shard1/192.168.1.20:27018,192.168.1.21:27018,192.168.1.22:27018") # 替换为分片1的节点IP
sh.enableSharding("mydatabase") # 替换为目标数据库
id字段):use mydatabase
db.mycollection.createIndex({ id: 1 }) # 创建索引(分片键必须有索引)
sh.shardCollection("mydatabase.mycollection", { id: 1 }) # 分片集合
sh.status()
正常状态应显示配置服务器、分片服务器、路由服务器均已连接,且分片键配置正确。
通过以上步骤,即可在CentOS系统上搭建MongoDB副本集或分片集群,满足高可用或水平扩展需求。