一、创建集群认证文件
mkdir ./data ./conf
openssl rand -base64 756 > ./conf/keyfile
chmod 400 ./conf/keyfile
docker network create mongo-cluster
二、部署configsever副本集
#!/bin/bash
iname=mongodb:8.0.9
conf_name=mongo_conf_
replset_name=confrs
echo "----------------- create configserver start -------------------------"
for i in 1 2
do
docker run -d --name ${conf_name}${i} \
--network mongo-cluster \
-v ./data/conf-rs$i:/datadb \
-v ./conf/keyfile:/data/configdb/keyfile \
-p 270${i}9:27019 $iname \
mongod --configsvr --replSet $replset_name --port 27019 --keyFile /data/configdb/keyfile --bind_ip_all
done
docker exec -it mongo_conf_1 mongosh --port 27019 --eval "rs.initiate({
_id: 'confrs',
configsvr: true,
members: [
{_id: 0, host: 'mongo_conf_1:27019'},
{_id: 1, host: 'mongo_conf_2:27019'}
]
})"
三、部署shard副本集
#!/bin/bash
iname=mongodb:8.0.9
shard_name=mongo_shard_
replset_name=shardrs
echo "----------------- create shard replSet start -------------------------"
#部署分片
for i in 1 2
do
docker run -d --name ${shard_name}${i} \
--network mongo-cluster \
-v ./data/shard-rs$i:/data/db \
-v ./conf/keyfile:/data/configdb/keyfile \
-p 270${i}8:27018 $iname \
mongod --shardsvr --replSet $replset_name$i --port 27018 --keyFile /data/configdb/keyfile --bind_ip_all
done
docker exec -it mongo_shard_1 mongosh --port 27018 --eval "rs.initiate({
_id: 'shardrs1',
members: [
{_id: 0, host: 'mongo_shard_1:27018'}
]
})"
docker exec -it mongo_shard_2 mongosh --port 27018 --eval "rs.initiate({
_id: 'shardrs2',
members: [
{_id: 0, host: 'mongo_shard_2:27018'}
]
})"
4、部署路由mongos
#!/bin/bash
iname=mongodb:8.0.9
conf_name=mongo_conf_
mongos_name=mongo_mongos
echo "----------------- create mongos start -------------------------"
docker run \
-d --name $mongos_name \
--network mongo-cluster \
-v ./data/mongos-rs:/data/db \
-v ./conf/keyfile:/data/configdb/keyfile \
-p 27017:27017 \
$iname mongos --configdb confrs/${conf_name}1:27019,${conf_name}2:27019 --keyFile /data/configdb/keyfile --bind_ip_all
添加分片
docker exec -it mongo_mongos mongosh --port 27017
sh.addShard("shardrs1/mongo_shard_1:27018")
sh.addShard("shardrs2/mongo_shard_2:27018")
#查看副本rs.status()
#查看分片
sh.status()
五、创建用户
use admin
db.createUser({
user: "admin",
pwd: "123456",
roles: [ { role: "root", db: "admin" } ]
})
mongosh --port 27017 -u admin -p 123456
# 启用分片数据库
sh.enableSharding("langchain_test_db")
# 对集合分片(按字段哈希)
sh.shardCollection("langchain_test_db.langchain_test_collection", { "shardKey": "hashed" })