以下是在Debian上搭建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
在每个节点的/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 --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()