一、准备工作
本次安装在同一台虚拟机上安装,端口分别是27017、27018、27019。这里假设你的服务器或者虚拟机上已经安装了Docker。
1、创建挂载目录
mkdir -p /data/mongo1/{conf,db,key}
mkdir -p /data/mongo2/{conf,db,key}
mkdir -p /data/mongo3/{conf,db,key}
2、创建配置文件mongod.conf
在/data/mongo1/conf创建mongod.conf配置文件,内容如下
storage:
dbPath: /data/db/
journal:
enabled: true
net:
port: 27017
bindIp: 0.0.0.0
replication:
replSetName: mycluster
security:
authorization: enabled
keyFile: /data/key/mongo.keyfile
在/data/mongo2/conf创建mongod.conf配置文件,内容如下
storage:
dbPath: /data/db/
journal:
enabled: true
net:
port: 27018
bindIp: 0.0.0.0
replication:
replSetName: mycluster
security:
authorization: enabled
keyFile: /data/key/mongo.keyfile
在/data/mongo3/conf创建mongod.conf配置文件,内容如下
storage:
dbPath: /data/db/
journal:
enabled: true
net:
port: 27019
bindIp: 0.0.0.0
replication:
replSetName: mycluster
security:
authorization: enabled
keyFile: /data/key/mongo.keyfile
keyFile对应容器内的路径,不是宿主机的路径。
3、创建mongo.keyfile
openssl rand -base64 753 > /data/mongo1/key/mongo.keyfile
然后将上面生成的key复制到mongo2、mongo3对应的key目录下
cp /data/mongo1/key/mongo.keyfile /data/mongo2/key/
cp /data/mongo1/key/mongo.keyfile /data/mongo3/key/
然后授权文件
chmod 600 /data/mongo1/key/mongo.keyfile
chmod 600 /data/mongo2/key/mongo.keyfile
chmod 600 /data/mongo3/key/mongo.keyfile
#这个一定要执行,不然启动容器的时候,读取不到keyfile文件时会提示bad file
chown 999 /data/mongo1/key/mongo.keyfile
chown 999 /data/mongo2/key/mongo.keyfile
chown 999 /data/mongo3/key/mongo.keyfile
二、创建mongo容器
docker run -di --name=mongo1 -p 27017:27017 \
-v /data/mongo1/conf:/data/configdb/ \
-v /data/mongo1/db:/data/db/ \
-v /data/mongo1/key/mongo.keyfile:/data/key/mongo.keyfile \
mongo:6.0.8 \
--replSet mycluster --bind_ip_all --keyFile /data/key/mongo.keyfile
docker run -di --name=mongo2 -p 27018:27017 \
-v /data/mongo2/conf:/data/configdb/ \
-v /data/mongo2/db:/data/db/ \
-v /data/mongo2/key/mongo.keyfile:/data/key/mongo.keyfile \
mongo:6.0.8 \
--replSet mycluster --bind_ip_all --keyFile /data/key/mongo.keyfile
docker run -di --name=mongo3 -p 27019:27017 \
-v /data/mongo3/conf:/data/configdb/ \
-v /data/mongo3/db:/data/db/ \
-v /data/mongo3/key/mongo.keyfile:/data/key/mongo.keyfile \
mongo:6.0.8 \
--replSet mycluster --bind_ip_all --keyFile /data/key/mongo.keyfile
三、初始化集群
# 进入容器
docker exec -it mongo1 mongosh admin
# 配置节点
rs.initiate({_id:"mycluster", members:[{_id:0, host:"192.168.139.184:27017"}, {_id:1, host:"192.168.139.184:27018"}, {_id:2, host:"192.168.139.184:27019"}]});
#查看状态
rs.status();
#创建账号
db.createUser({
user: 'root',
pwd: '123456',
roles: [
{ role: "root", db: "admin" }
]
});
连接前请关闭防火墙