简体   繁体   English

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

[英]How to Create MongoDB cluster as Docker Containers

I can able to run single instance on Mongo using the following Docker command 我可以使用以下Docker命令在Mongo上运行单个实例

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

But I can't find out how to configure Config Server and Query Router and also how add shards with Replication 但是我找不到如何配置配置服务器和查询路由器以及如何通过复制添加分片的方法

Thanks in Advance 提前致谢

I used this tutorial myself: https://medium.com/@gargar454/deploy-a-mongodb-cluster-in-steps-9-using-docker-49205e231319#.mle6a8wmg 我本人使用了本教程: https : //medium.com/@gargar454/deploy-a-mongodb-cluster-in-steps-9-using-docker-49205e231319#.mle6a8wmg

Step 0: create folders 步骤0:建立资料夹

create folders (local on all nodes): 创建文件夹(在所有节点上都是本地的):

sudo mkdir -p /dockerlocalstorage/data/mongodb
sudo mkdir -p /dockerlocalstorage/backup/mongodb
sudo mkdir -p /dockersharedstorage/config/mongodb/

Step 1: create keyfile 步骤1:创建密钥文件

create keyfile as root user and give correct permissions: 以root用户身份创建密钥文件并提供正确的权限:

sudo su
cd /dockersharedstorage/config/mongodb/
openssl rand -base64 741 > mongodb-keyfile
chmod 600 mongodb-keyfile
sudo chown 999 mongodb-keyfile

Depending on the mount type you might need to use /dockerlocalstorage/ to keep the certs. 根据安装类型,您可能需要使用/ dockerlocalstorage /来保存证书。 Mongodb will complain if the permissions are not set correctly (which could be harder to achieve on lets say a cifs mount) 如果权限设置不正确,Mongodb将会抱怨(如果说CIF挂载可能很难实现)

Step 3: setup first node 步骤3:设置第一个节点

create mongodb container without auth/keyfile: 创建不带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

log in to container: 登录到容器:

docker exec -it mongodb mongo

create root users, dont forget to change the passwords 创建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" } ]
   });   

exit and remove the container 退出并取出容器

exit
docker stop mongodb
docker rm mongodb

Step 4: start nodes 步骤4:启动节点

change NODE_NR : 更改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"

Step 5: setup replication 第5步:设置复制

connect to node 1: 连接到节点1:

docker exec -it mongodb mongo
use admin
db.auth("root", "PASSWORD");

initialize the replication set: 初始化复制集:

rs.initiate()

Check the replica set with: rs.conf() or rs.status() 使用以下命令检查副本集: rs.conf()rs.status()

add others: 添加其他人:

rs.add("dock02:27017")
rs.add("dock03:27017")

Step 6: setup mongodump 第6步:设置mongodump

edit crontab: 编辑crontab:

sudo su
crontab -l > tempcron

echo new cron into cron file 将新的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

install new cron file 安装新的cron文件

crontab tempcron
rm tempcron
exit

You could use docker swarm mode if you want docker native mongodb cluster (Docker >= 1.12 needed). 如果要使用docker native mongodb集群(需要Docker> = 1.12),则可以使用docker swarm模式

Have a look at this nice tutorial . 一下这个不错的教程 This will show you how to get a mongodb cluster with docker, replicated with Config Server. 这将向您展示如何使用Docker获取mongodb集群,并使用Config Server复制该集群。 Basically, the steps are: 基本上,这些步骤是:

  1. Create multiple virtual machines (with docker-machine or whatever you use to create a new docker host) 创建多个虚拟机(使用docker-machine或用于创建新docker主机的任何设备)
  2. Create the swarm (docker cluster of multiple machines) 创建集群(多台机器的Docker集群)
  3. Create a swarm overlay network to deal with all your mongodb traffic 创建一个群集覆盖网络来处理所有mongodb流量
  4. Create the services on each swarm node (that will create your mongodb containers on your hosts) 在每个群集节点上创建服务(这将在主机上创建mongodb容器)
  5. Configure your mongodb replica set 配置您的mongodb副本集

This is a bit of work, but worth it, as when you get there, you'll have tools on docker swarm to orchestrate your mongodb cluster. 这是一项工作,但值得,因为到那里时,您将在docker swarm上拥有工具来编排mongodb集群。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM