温馨提示×

在Debian上部署MongoDB集群步骤

小樊
53
2025-11-01 05:37:16
栏目: 云计算

在Debian上部署MongoDB集群步骤

一、准备工作

  1. 系统更新:确保Debian系统为最新状态,避免依赖冲突。
    sudo apt update && sudo apt upgrade -y
    
  2. 安装依赖包:MongoDB需要libcurl4openssl等库支持。
    sudo apt install -y libcurl4 openssl liblzma5 gnupg
    

二、添加MongoDB官方仓库

根据Debian版本选择对应仓库(以Debian 11 Bullseye为例):

  1. 导入MongoDB GPG密钥(验证软件包完整性):
    wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
    
  2. 创建仓库列表文件
    echo "deb [arch=amd64,arm64] https://repo.mongodb.org/apt/debian bullseye/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
    
  3. 更新包索引
    sudo apt update
    

三、安装MongoDB

使用APT安装MongoDB官方版本(推荐6.0及以上):

sudo apt install -y mongodb-org

四、配置MongoDB副本集(基础集群)

副本集是MongoDB高可用的核心组件,至少需要3个节点(1主2从)。

1. 配置每个节点的mongod.conf

编辑/etc/mongod.conf(主节点/从节点均需配置),关键参数如下:

net:
  port: 27017                # 监听端口(默认27017)
  bindIp: 0.0.0.0            # 允许所有IP访问(生产环境建议限制为节点IP)
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  # 日志路径
replication:
  replSetName: rs0           # 副本集名称(所有节点必须一致)

2. 启动MongoDB服务

在所有节点上启动服务并设置开机自启:

sudo systemctl start mongod
sudo systemctl enable mongod

3. 初始化副本集

连接到任意节点(如主节点)的MongoDB Shell,执行初始化命令:

mongo --host <主节点IP> --port 27017

在Shell中输入以下命令(替换为实际节点IP):

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

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

4. 验证副本集状态

rs.status()

正常状态应显示所有节点为PRIMARY(主节点)或SECONDARY(从节点)。

五、配置高可用(可选:添加仲裁者)

仲裁者不存储数据,仅参与投票,用于奇数节点集群的故障转移。

  1. 启动仲裁节点
    mongod --port 27018 --dbpath /data/db3 --replSet rs0 --arbiterOnly true
    
  2. 添加仲裁者到副本集
    连接到主节点Shell,执行:
    rs.addArb("<仲裁节点IP>:27018")
    

六、配置分片集群(可选:扩展存储)

若需要水平扩展数据存储,需配置分片集群(包含分片、配置服务器、路由服务器)。

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

Config Server存储集群元数据(如分片规则),需3个节点组成副本集。

  • 编辑配置文件/etc/mongodb/config.conf):
    systemLog:
      destination: file
      logAppend: true
      path: /var/log/mongodb/config.log
    storage:
      dbPath: /data/configdb
      journal:
        enabled: true
    processManagement:
      fork: true
      pidFilePath: /var/run/mongodb/mongod.pid
    net:
      port: 21000
      bindIp: 0.0.0.0
    replication:
      replSetName: cfgReplSet
    
  • 启动Config Server
    sudo mongod --config /etc/mongodb/config.conf
    
  • 初始化副本集
    mongo --host <config节点IP> --port 21000
    
    输入命令:
    rs.initiate({
      _id: "cfgReplSet",
      configsvr: true,
      members: [
        { _id: 0, host: "<config节点1IP>:21000" },
        { _id: 1, host: "<config节点2IP>:21000" },
        { _id: 2, host: "<config节点3IP>:21000" }
      ]
    })
    

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

Mongos负责路由请求到对应分片,需指向Config Server。

  • 编辑配置文件/etc/mongodb/mongos.conf):
    systemLog:
      destination: file
      logAppend: true
      path: /var/log/mongodb/mongos.log
    processManagement:
      fork: true
      pidFilePath: /var/run/mongodb/mongos.pid
    net:
      port: 20000
      bindIp: 0.0.0.0
    sharding:
      configDB: cfgReplSet/<config节点1IP>:21000,<config节点2IP>:21000,<config节点3IP>:21000
    
  • 启动Mongos
    sudo mongos --config /etc/mongodb/mongos.conf
    

3. 添加分片到集群

  • 连接到Mongos
    mongo --host <mongos节点IP> --port 20000
    
  • 添加分片(分片需为副本集,替换为实际分片名称和节点IP):
    sh.addShard("rs0/<分片节点1IP>:27017,<分片节点2IP>:27017,<分片节点3IP>:27017")
    

4. 启用分片

  • 启用数据库分片
    sh.enableSharding("myDatabase")
    
  • 指定集合分片键(如按user_id字段哈希分片):
    sh.shardCollection("myDatabase.myCollection", { user_id: "hashed" })
    

5. 验证分片状态

sh.status()

七、注意事项

  1. 安全配置
    • 启用认证:在mongod.conf中添加security.authorization: enabled,并创建用户。
    • 绑定IP:生产环境应将bindIp设置为节点实际IP,避免暴露给公网。
  2. 防火墙设置:开放27017(MongoDB)、21000(Config Server)、20000(Mongos)端口。
  3. 备份策略:定期使用mongodump备份数据,避免数据丢失。
  4. 监控维护:使用MongoDB Atlas、Prometheus+Granafa等工具监控集群性能。

以上步骤覆盖了Debian上MongoDB集群的基础部署(副本集)及高可用/扩展配置(分片集群)。根据实际业务需求调整节点数量、分片规则等参数。

0