如何将MongoDB集群创建为Docker容器

Vig*_*ran 3 mongodb docker

我可以使用以下Docker命令在Mongo上运行单个实例

docker run -it --rm -d -p 27017:27017 --user mongodb mongo:3.4

但我无法了解如何配置Config Server和查询路由器以及如何使用Replication添加分片

提前致谢

p.s*_*eef 6

我自己使用本教程:https://medium.com/@gargar454/deploy-a-mongodb-cluster-in-steps-9-using-docker-49205e231319#.mle6a8wmg

第0步:创建文件夹

创建文件夹(在所有节点上本地):

sudo mkdir -p /dockerlocalstorage/data/mongodb
sudo mkdir -p /dockerlocalstorage/backup/mongodb
sudo mkdir -p /dockersharedstorage/config/mongodb/
Run Code Online (Sandbox Code Playgroud)

第1步:创建密钥文件

以root用户身份创建密钥文件并提供正确的权限:

sudo su
cd /dockersharedstorage/config/mongodb/
openssl rand -base64 741 > mongodb-keyfile
chmod 600 mongodb-keyfile
sudo chown 999 mongodb-keyfile
Run Code Online (Sandbox Code Playgroud)

根据安装类型,您可能需要使用/ dockerlocalstorage /来保留证书.如果权限设置不正确,Mongodb会抱怨(这可能更难实现,比如cifs mount)

第3步:设置第一个节点

在没有auth/keyfile的情况下创建mongodb容器:

docker run --name mongodb \
-v /dockerlocalstorage/data/mongodb:/data/db \
-v /dockersharedstorage/config/mongodb:/opt/keyfile \
--hostname="dock01" \
-p 27017:27017 \
-d mongo
Run Code Online (Sandbox Code Playgroud)

登录到容器:

docker exec -it mongodb mongo
Run Code Online (Sandbox Code Playgroud)

创建root用户,别忘了更改密码

use admin
db.createUser( {
     user: "admin",
     pwd: "PASSWORD",
     roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
   });

db.createUser( {
     user: "root",
     pwd: "PASSWORD",
     roles: [ { role: "root", db: "admin" } ]
   });   
Run Code Online (Sandbox Code Playgroud)

退出并删除容器

exit
docker stop mongodb
docker rm mongodb
Run Code Online (Sandbox Code Playgroud)

第4步:启动节点

改变NODE_NR:

docker run \
-d \
--name mongodb \
-v /dockerlocalstorage/data/mongodb:/data/db \
-v /dockerlocalstorage/backup/mongodb:/data/backup \
-v /dockersharedstore/config/mongodb:/opt/keyfile \ 
--restart=always \
--hostname="dock01" \
-p 27017:27017 mongo \
--keyFile /opt/keyfile/mongodb-keyfile \
--replSet "SET_NAME"
Run Code Online (Sandbox Code Playgroud)

第5步:设置复制

连接到节点1:

docker exec -it mongodb mongo
use admin
db.auth("root", "PASSWORD");
Run Code Online (Sandbox Code Playgroud)

初始化复制集:

rs.initiate()
Run Code Online (Sandbox Code Playgroud)

检查副本集:rs.conf()rs.status()

添加其他人:

rs.add("dock02:27017")
rs.add("dock03:27017")
Run Code Online (Sandbox Code Playgroud)

第6步:设置mongodump

编辑crontab:

sudo su
crontab -l > tempcron
Run Code Online (Sandbox Code Playgroud)

将新的cron回到cron文件中

echo "0 4 * * *  docker exec -it mongodb mongodump -u root -p PASSWORD -o /data/backup/daily"  >> tempcron
echo "30 4 * * 5 docker exec -it mongodb mongodump -u root -p PASSWORD -o /data/backup/weekly" >> tempcron
Run Code Online (Sandbox Code Playgroud)

安装新的cron文件

crontab tempcron
rm tempcron
exit
Run Code Online (Sandbox Code Playgroud)