MongoDB在Ubuntu上的集群配置方法
导读:MongoDB在Ubuntu上的集群配置方法 一、准备工作 系统要求:确保所有节点运行Ubuntu 18.04及以上版本,且MongoDB版本一致(建议4.0及以上)。 网络配置:所有节点之间需能互相通信,开放MongoDB默认端口(27...
MongoDB在Ubuntu上的集群配置方法
一、准备工作
- 系统要求:确保所有节点运行Ubuntu 18.04及以上版本,且MongoDB版本一致(建议4.0及以上)。
- 网络配置:所有节点之间需能互相通信,开放MongoDB默认端口(27017)及配置服务器(27019)、mongos(27017)端口。
- 节点信息:收集所有节点的IP地址或DNS主机名(生产环境推荐使用DNS主机名,避免IP变更导致配置失效)。
二、安装MongoDB
在所有节点上执行以下命令安装MongoDB官方版本:
sudo apt update
sudo apt install -y mongodb-org
安装完成后,MongoDB服务会自动启动,可通过systemctl status mongod
验证状态。
三、配置副本集(高可用基础)
副本集是MongoDB实现高可用的核心组件,至少需要3个节点(1主2从)。
1. 修改配置文件
编辑每个节点的/etc/mongod.conf
,添加/修改以下配置:
storage:
dbPath: /var/lib/mongodb # 数据存储路径
journal:
enabled: true # 启用日志(确保数据持久化)
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log # 日志路径
net:
port: 27017 # 默认端口
bindIp: 0.0.0.0 # 绑定所有IP(生产环境建议限制为节点IP)
replication:
replSetName: rs0 # 副本集名称(所有节点需一致)
2. 重启MongoDB服务
sudo systemctl restart mongod
sudo systemctl enable mongod # 设置开机自启
3. 初始化副本集
连接到任意一个节点(如节点1)的MongoDB shell:
mongo --host <
node1_ip>
--port 27017
在shell中执行初始化命令(替换为实际节点IP/主机名):
rs.initiate({
_id: "rs0",
members: [
{
_id: 0, host: "<
node1_ip>
:27017" }
,
{
_id: 1, host: "<
node2_ip>
:27017" }
,
{
_id: 2, host: "<
node3_ip>
:27017" }
]
}
)
4. 验证副本集状态
rs.status()
正常情况下,会显示所有节点状态为SECONDARY
(从节点)或PRIMARY
(主节点)。
四、配置分片集群(大规模数据扩展)
分片集群用于水平扩展数据存储,由配置服务器(存储元数据)、分片服务器(存储实际数据)、mongos(路由请求)三部分组成。
1. 配置配置服务器(3节点)
配置服务器存储集群元数据,必须为副本集。
(1)启动配置服务器
在每个配置服务器节点上执行:
mongod --configsvr --replSet configReplSet --dbpath /data/configdb --port 27019
(2)初始化配置服务器副本集
连接到任意配置服务器节点:
mongo --port 27019
执行初始化命令:
rs.initiate({
_id: "configReplSet",
configsvr: true,
members: [
{
_id: 0, host: "cfg1.example.com:27019" }
,
{
_id: 1, host: "cfg2.example.com:27019" }
,
{
_id: 2, host: "cfg3.example.com:27019" }
]
}
)
2. 配置分片服务器(至少1个分片,每个分片为副本集)
(1)启动分片服务器
在每个分片节点上执行(以分片1为例):
mongod --shardsvr --replSet shard1 --dbpath /data/shard1 --port 27018
(2)初始化分片副本集
连接到分片1的节点:
mongo --port 27018
执行初始化命令:
rs.initiate({
_id: "shard1",
members: [
{
_id: 0, host: "shard1a.example.com:27018" }
,
{
_id: 1, host: "shard1b.example.com:27018" }
,
{
_id: 2, host: "shard1c.example.com:27018" }
]
}
)
重复以上步骤,配置其他分片(如shard2、shard3)。
3. 配置mongos(路由服务器)
mongos是应用程序与分片集群的接口,需指向配置服务器副本集。
(1)启动mongos
在mongos节点上执行:
mongos --configdb configReplSet/cfg1.example.com:27019,cfg2.example.com:27019,cfg3.example.com:27019 --port 27017
4. 添加分片到集群
连接到mongos节点:
mongo --port 27017
添加分片(以shard1为例):
sh.addShard("shard1/shard1a.example.com:27018,shard1b.example.com:27018,shard1c.example.com:27018")
重复以上命令,添加所有分片。
5. 启用分片
(1)启用数据库分片
sh.enableSharding("mydatabase") // 替换为实际数据库名
(2)对集合分片
sh.shardCollection("mydatabase.mycollection", {
"shardKey": 1 }
) // 替换为实际集合名和分片键
注意:分片键选择至关重要,直接影响分片效率(如使用_id
、user_id
等高频查询字段)。
五、验证集群状态
- 查看副本集状态:连接到任意节点,执行
rs.status()
。 - 查看分片集群状态:连接到mongos,执行
sh.status()
,确认所有分片、配置服务器已加入集群。
六、注意事项
- 安全性:生产环境需启用身份验证(如SCRAM或x.509证书),并配置防火墙限制访问。
- 备份:定期备份数据(可使用
mongodump
或MongoDB Ops Manager)。 - 监控:使用MongoDB Atlas、Prometheus+Grafana等工具监控集群性能。
- 分片键优化:避免选择单调递增的字段(如时间戳)作为分片键,防止数据分布不均。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: MongoDB在Ubuntu上的集群配置方法
本文地址: https://pptw.com/jishu/728555.html