debian

MongoDB在Debian上的集群搭建方案

小樊
39
2025-08-10 04:34:09
栏目: 云计算

以下是在Debian上搭建MongoDB集群的方案,这里以分片集群为例:

安装MongoDB

更新系统,导入公钥,添加软件源并安装:

sudo apt update && sudo apt upgrade -y
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/debian bullseye/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

配置副本集(以3个节点为例)

在每个节点的/etc/mongod.conf中配置:

net:
  port: 27017
  bindIp: 0.0.0.0
replication:
  replSetName: rs0
storage:
  dbPath: /data/db
  journal:
    enabled: true

创建密钥文件:

openssl rand -base64 756 > /var/lib/mongodb/keyfile
chmod 600 /var/lib/mongodb/keyfile

将密钥文件复制到所有节点,并在配置文件中添加security: keyFile: /var/lib/mongodb/keyfile。启动服务:

sudo systemctl start mongod
sudo systemctl enable mongod

在主节点上初始化副本集:

mongo --host node1_ip --port 27017
rs.initiate({
  _id: "rs0",
  members: [
    { _id: 0, host: "node1_ip:27017" },
    { _id: 1, host: "node2_ip:27017" },
    { _id: 2, host: "node3_ip:27017" }
  ]
})

配置分片集群

启动配置服务器:

mkdir -p /data/configdb
mongod --configsvr --replSet configReplSet --dbpath /data/configdb --port 27019

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

mongo --port 27019
rs.initiate({
  _id: "configReplSet",
  configsvr: true,
  members: [
    { _id: 0, host: "localhost:27019" }
  ]
})

启动分片服务器(以2个分片为例):

mkdir -p /data/shard1 /data/shard2
mongod --shardsvr --replSet shard1 --dbpath /data/shard1 --port 27018
mongod --shardsvr --replSet shard2 --dbpath /data/shard2 --port 27017

分别初始化分片副本集:

mongo --port 27018
rs.initiate({ _id: "shard1", members: [{ _id: 0, host: "localhost:27018" }] })

mongo --port 27017
rs.initiate({ _id: "shard2", members: [{ _id: 0, host: "localhost:27017" }] })

启动Mongos路由器

mongos --configdb configReplSet/localhost:27019 --port 27017

添加分片到集群

mongo --port 27017
sh.addShard("shard1/shard1:27018,shard1:27019")
sh.addShard("shard2/shard2:27017,shard2:27018")

启用分片

sh.enableSharding("yourDatabaseName")
sh.shardCollection("yourDatabaseName.yourCollectionName", { "shardKey": 1 })

验证集群状态

sh.status()

0
看了该问题的人还看了