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……)

更多推荐