温馨提示×

Ubuntu MongoDB集群搭建流程是怎样的

小樊
45
2025-10-31 19:59:03
栏目: 云计算

Ubuntu MongoDB集群搭建流程(以副本集为例)

MongoDB集群主要有两种类型:副本集(Replica Set)(提供高可用性)和分片集群(Sharding Cluster)(提供水平扩展能力)。以下分别介绍两者的搭建流程,其中副本集是基础架构,更适合作为入门选择。

一、副本集集群搭建流程(适用于高可用需求)

副本集通过多个节点(至少3个)同步数据,当主节点故障时自动选举新的主节点,确保服务连续性。

1. 前提准备

  • 环境要求:至少3台Ubuntu服务器(或同一服务器的不同端口模拟多节点),确保节点间网络互通。
  • 安装MongoDB:在所有节点上执行以下命令安装MongoDB(以Ubuntu 22.04为例):
    wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
    echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
    sudo apt update
    sudo apt install -y mongodb-org
    

2. 配置MongoDB实例

编辑每个节点的MongoDB配置文件(/etc/mongod.conf),修改以下关键参数:

storage:
  dbPath: /var/lib/mongodb  # 数据存储路径(需提前创建:sudo mkdir -p /var/lib/mongodb)
  journal:
    enabled: true           # 启用日志(确保数据持久化)
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log  # 日志路径
net:
  port: 27017               # 端口(默认27017,多节点需修改为不同端口,如27018、27019)
  bindIp: 0.0.0.0           # 允许所有IP访问(生产环境建议限制为节点IP)
replication:
  replSetName: rs0          # 副本集名称(所有节点必须一致)

3. 启动MongoDB服务

在所有节点上执行以下命令启动服务并设置开机自启:

sudo systemctl start mongod
sudo systemctl enable mongod
sudo systemctl status mongod  # 检查服务状态(需显示"active (running)")

4. 初始化副本集

连接到任意一个节点的MongoDB实例(如节点1的27017端口):

mongo --host <节点1_IP> --port 27017

在Mongo Shell中执行初始化命令(将<节点IP>替换为实际IP):

rs.initiate({
  _id: "rs0",
  members: [
    { _id: 0, host: "<节点1_IP>:27017" },
    { _id: 1, host: "<节点2_IP>:27017" },
    { _id: 2, host: "<节点3_IP>:27017" }
  ]
})

初始化成功后会返回"ok": 1

5. 验证副本集状态

在Mongo Shell中执行以下命令,查看节点角色(PRIMARY/SECONDARY)和同步状态:

rs.status()

正常情况下,会显示3个节点,其中一个为PRIMARY(主节点,处理写请求),另外两个为SECONDARY(从节点,同步主节点数据)。

二、分片集群搭建流程(适用于水平扩展需求)

分片集群将数据分散到多个分片(Shard)上,通过路由节点(Mongos)统一管理,解决单节点数据量过大的问题。需包含配置服务器(Config Server)、**分片服务器(Shard Server)路由服务器(Mongos)**三部分。

1. 前提准备

  • 环境要求:至少3台服务器(用于配置服务器)、2台以上服务器(用于分片服务器)、1台以上服务器(用于路由服务器)。
  • 安装MongoDB:同副本集步骤1。

2. 配置配置服务器(Config Server)

配置服务器存储集群元数据(如分片信息、集合分片规则),需以副本集形式部署(至少3个节点)。

2.1 启动配置服务器实例

在每个配置服务器上执行(以端口27019为例):

sudo mkdir -p /data/configdb  # 数据目录
sudo chown -R `id -un` /data/configdb  # 授权
mongod --configsvr --replSet configReplSet --dbpath /data/configdb --port 27019

2.2 初始化配置服务器副本集

连接到任意配置服务器:

mongo --port 27019

执行初始化命令:

rs.initiate({
  _id: "configReplSet",
  configsvr: true,
  members: [
    { _id: 0, host: "<配置服务器1_IP>:27019" },
    { _id: 1, host: "<配置服务器2_IP>:27019" },
    { _id: 2, host: "<配置服务器3_IP>:27019" }
  ]
})

3. 配置分片服务器(Shard Server)

分片服务器存储实际数据,每个分片也是一个副本集(建议至少3个节点)。

3.1 启动分片服务器实例

在每个分片服务器上执行(以端口27018为例,分片名称为shard1):

sudo mkdir -p /data/shard1  # 数据目录
sudo chown -R `id -un` /data/shard1  # 授权
mongod --shardsvr --replSet shard1ReplSet --dbpath /data/shard1 --port 27018

3.2 初始化分片服务器副本集

连接到任意分片服务器:

mongo --port 27018

执行初始化命令:

rs.initiate({
  _id: "shard1ReplSet",
  members: [
    { _id: 0, host: "<分片服务器1_IP>:27018" },
    { _id: 1, host: "<分片服务器2_IP>:27018" },
    { _id: 2, host: "<分片服务器3_IP>:27018" }
  ]
})

重复上述步骤,创建其他分片(如shard2shard3)。

4. 配置路由服务器(Mongos)

路由服务器是应用程序的入口,负责将请求路由到对应的分片。

4.1 启动路由服务器

在路由服务器上执行(需指定配置服务器地址):

mongos --configdb configReplSet/<配置服务器1_IP>:27019,<配置服务器2_IP>:27019,<配置服务器3_IP>:27019 --port 27017

5. 添加分片到集群

连接到路由服务器:

mongo --port 27017

添加分片(以shard1为例):

sh.addShard("shard1ReplSet/<分片服务器1_IP>:27018,<分片服务器2_IP>:27018,<分片服务器3_IP>:27018")

重复上述命令,添加其他分片。

6. 启用分片

6.1 启用数据库分片

sh.enableSharding("yourDatabaseName")  # 替换为你的数据库名

6.2 对集合进行分片

选择一个分片键(如userId),执行分片操作:

sh.shardCollection("yourDatabaseName.yourCollectionName", { "userId": 1 })  # 1表示升序索引

7. 验证分片状态

sh.status()  # 查看集群状态(包括分片、配置服务器、路由服务器信息)

注意事项

  1. 安全配置:生产环境需启用身份验证(security.authorization: enabled)和加密(TLS/SSL)。
  2. 时间同步:所有节点需安装ntp服务,确保时间一致(sudo apt install ntp)。
  3. 防火墙设置:开放MongoDB端口(默认27017、27018、27019),允许节点间通信。
  4. 监控维护:使用mongostatmongotop等工具监控集群性能,定期备份数据。

以上流程覆盖了Ubuntu环境下MongoDB集群的基本搭建步骤,可根据实际需求调整节点数量和配置参数。

0