单机docker部署mongo集群【底部有FAQ】
·
1、创建本地文件夹作为各docker容器的挂载目录
sudo mkdir -p /data/application/mongo1/db
sudo mkdir -p /data/application/mongo2/db
sudo mkdir -p /data/application/mongo3/db
sudo mkdir -p /data/application/mongo1/configdb
sudo mkdir -p /data/application/mongo2/configdb
sudo mkdir -p /data/application/mongo3/configdb
sudo vim /data/application/mongo1/configdb/mongod.conf
net:
port: 27017
bindIp: 0.0.0.0
systemLog:
logAppend: true
security:
keyFile: "/data/configdb/mongodbKeyfile.key" # 注意该路径为稍后创建容器内的路径,非本地宿主机
clusterAuthMode: "keyFile"
authorization: "enabled"
replication:
replSetName: "mongoRs
2、在对应文件夹内创建配置文件
sudo cp /data/application/mongo1/configdb/mongod.conf /data/application/mongo2/configdb/
sudo cp /data/application/mongo1/configdb/mongod.conf /data/application/mongo3/configdb/
3、生成Key文件,这里需要切换至root
openssl rand -base64 756 > /data/application/mongo1/configdb/mongodbKeyfile.key
# 复制Key文件至各节点配置
sudo cp /data/application/mongo1/configdb/mongodbKeyfile.key /data/application/mongo2/configdb
sudo cp /data/application/mongo1/configdb/mongodbKeyfile.key /data/application/mongo3/configdb
# Key文件可读权限
sudo chmod 400 /data/application/mongo1/configdb/mongodbKeyfile.key
sudo chmod 400 /data/application/mongo2/configdb/mongodbKeyfile.key
sudo chmod 400 /data/application/mongo3/configdb/mongodbKeyfile.key
4、创建 Docker 网络
# 创建自定义网络(可选,便于容器间通信)
docker network create mongo-cluster
5、启动 MongoDB 容器
# 主节点
sudo docker run -di --name=mongo_server1 \
--network mongo-cluster \
-p 27017:27017 \
-v /data/application/mongo1/db:/data/db \
-v /data/application/mongo1/configdb:/data/configdb \
mongo:latest \
mongod --replSet mongoRs --bind_ip_all --keyFile /data/configdb/mongodbKeyfile.key
# 从节点1
sudo docker run -di --name=mongo_server2 \
--network mongo-cluster \
-p 27018:27017 \
-v /data/application/mongo2/db:/data/db \
-v /data/application/mongo2/configdb:/data/configdb \
mongo:latest \
mongod --replSet mongoRs --bind_ip_all --keyFile /data/configdb/mongodbKeyfile.key
# 仲裁节点
sudo docker run -di --name=mongo_server3 \
--network mongo-cluster \
-p 27019:27017 \
-v /data/application/mongo3/db:/data/db \
-v /data/application/mongo3/configdb:/data/configdb \
mongo:latest \
mongod --replSet mongoRs --bind_ip_all --keyFile /data/configdb/mongodbKeyfile.key
6、节点配置
# 进入容器
sudo docker exec -it mongo_server1 mongosh admin
# 配置节点
rs.initiate({_id:"mongoRs", members:[{_id:0, host:"mongo_server1:27017"}, {_id:1, host:"mongo_server1:27017"}, {_id:2, host:"mongo_server1:27017", arbiterOnly:true}]})
# 检查复制集状态
rs.status()
# 查看复制集配置
rs.conf()
7、安装mongosh
# 下载 mongosh
wget https://downloads.mongodb.com/compass/mongosh-2.0.1-linux-x64.tgz
# 解压
tar -xzf mongosh-2.0.1-linux-x64.tgz
# 移动到系统路径
sudo mv mongosh-2.0.1-linux-x64/bin/mongosh /usr/local/bin/
sudo mv mongosh-2.0.1-linux-x64/bin/mongosh_crypt_v1.so /usr/local/lib/
# 测试
mongosh --version
8、创建用户
docker exec -it mongo_server1 mongosh admin
use admin
db.createUser({
user: "root",
pwd: "123456",
roles: ["strole"]
})
exit
docker exec -it mongo_server1 mongosh -u root -p 123456 admin
db.createRole({
role: "strole",
privileges: [{
resource: { db: "", collection: "" },
actions: [
"splitVector",
"listDatabases",
"listCollections",
"collStats",
"find",
"changeStream"
]
}],
roles: [{ role: 'read', db: 'config' }]
})
db.createUser({
user: "seatunnel",
pwd: "seatunnel123",
roles: ["strole"]
})
db.getUser("seatunnel")
FAQ:
不要挂起虚拟机!!!不要挂起虚拟机!!!不要挂起虚拟机!!!最好选择关机!!!
必须挂起的话就先停止容器(docker stop mongo_server1……)
更多推荐

所有评论(0)