2018年07月21日 16:17:41 vincerom 閱讀數 3611mongodb
版權聲明:本文爲博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接和本聲明。docker
本文連接:https://blog.csdn.net/vincerom/article/details/81145938shell
簡單地在Docker環境上搭建一個無認證的MongoDB集羣。
本文基於CentOS 7.4,MongoDB版本爲4.0.0,Docker版本爲17.09.0-ce數據庫
集羣角色 | ContainerName | IP:port |
---|---|---|
Config Server | cfg_1 | 10.1.1.2:27019 |
Config Server | cfg_2 | 10.1.1.3:27019 |
Config Server | cfg_3 | 10.1.1.4:27019 |
Shard Server | shard1_1 | 10.1.1.5:27018 |
Shard Server | shard1_2 | 10.1.1.6:27018 |
Shard Server | shard1_3 | 10.1.1.7:27018 |
Shard Server | shard2_1 | 10.1.1.8:27018 |
Shard Server | shard2_2 | 10.1.1.9:27018 |
Shard Server | shard2_3 | 10.1.1.10:27018 |
Shard Server | shard3_1 | 10.1.1.11:27018 |
Shard Server | shard3_2 | 10.1.1.12:27018 |
Shard Server | shard3_3 | 10.1.1.13:27018 |
Mongos | mongos_1 | 10.1.1.14:27020 |
Mongos | mongos_2 | 10.1.1.15:27020 |
Mongos | mongos_3 | 10.1.1.16:27020 |
docker pull mongo:4.0.0
爲MongoDB集羣建立獨立的docker網橋bash
docker network create --subnet=10.1.1.0/24 mongodb0
準備Docker掛載的目錄服務器
mkdir -p /home/dmc/configsvr mkdir -p /home/dmc/shard1 mkdir -p /home/dmc/shard2 mkdir -p /home/dmc/shard3 mkdir -p /home/dmc/mongos
storage: dbPath: /data/db journal: enabled: true systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log net: bindIp: 127.0.0.1 processManagement: timeZoneInfo: /usr/share/zoneinfo replication: replSetName: cfg sharding: clusterRole: configsvr
storage: dbPath: /data/db journal: enabled: true systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log net: bindIp: 127.0.0.1 processManagement: timeZoneInfo: /usr/share/zoneinfo replication: replSetName: shard1 sharding: clusterRole: shardsvr
systemLog: destination: file logAppend: true path: /var/log/mongodb/mongos.log net: port: 27020 bindIp: 127.0.0.1 processManagement: fork: true timeZoneInfo: /usr/share/zoneinfo sharding: configDB: cfg/10.1.1.2:27019,10.1.1.3:27019,10.1.1.4:27019
docker run -d --name=cfg_1 --network=mongodb0 --ip=10.1.1.2 -v /home/dmc/configsvr:/etc/mongodb mongo:4.0.0 -f /etc/mongodb/mongod.conf docker run -d --name=cfg_2 --network=mongodb0 --ip=10.1.1.3 -v /home/dmc/configsvr:/etc/mongodb mongo:4.0.0 -f /etc/mongodb/mongod.conf docker run -d --name=cfg_3 --network=mongodb0 --ip=10.1.1.4 -v /home/dmc/configsvr:/etc/mongodb mongo:4.0.0 -f /etc/mongodb/mongod.conf
進入其中一個容器配置Config-Server副本集:網絡
# 宿主機 docker exec -it cfg_1 bash # 容器中 mongo --port 27019 # Mongo Shell中 rs.initiate({ "_id":"cfg", "members":[ { "_id":0, "host":"10.1.1.2:27019" }, { "_id":1, "host":"10.1.1.3:27019" }, { "_id":2, "host":"10.1.1.4:27019" } ] })
# 啓動第一個分片 - shard1 docker run -d --name=shard1_1 --network=mongodb0 --ip=10.1.1.5 -v /home/dmc/shard1:/etc/mongodb mongo:4.0.0 -f /etc/mongodb/mongod.conf docker run -d --name=shard1_2 --network=mongodb0 --ip=10.1.1.6 -v /home/dmc/shard1:/etc/mongodb mongo:4.0.0 -f /etc/mongodb/mongod.conf docker run -d --name=shard1_3 --network=mongodb0 --ip=10.1.1.7 -v /home/dmc/shard1:/etc/mongodb mongo:4.0.0 -f /etc/mongodb/mongod.conf
進入其中一個容器配置Shard-Server副本集:dom
# 宿主機 docker exec -it shard1_1 bash # 容器中 mongo --port 27018 # Mongo Shell中 rs.initiate({ "_id":"shard1", "members":[ { "_id":0, "host":"10.1.1.5:27018" }, { "_id":1, "host":"10.1.1.6:27018" }, { "_id":2, "host":"10.1.1.7:27018" } ] })
# 啓動第二個分片 - shard2 docker run -d --name=shard2_1 --network=mongodb0 --ip=10.1.1.8 -v /home/dmc/shard2:/etc/mongodb mongo:4.0.0 -f /etc/mongodb/mongod.conf docker run -d --name=shard2_2 --network=mongodb0 --ip=10.1.1.9 -v /home/dmc/shard2:/etc/mongodb mongo:4.0.0 -f /etc/mongodb/mongod.conf docker run -d --name=shard2_3 --network=mongodb0 --ip=10.1.1.10 -v /home/dmc/shard2:/etc/mongodb mongo:4.0.0 -f /etc/mongodb/mongod.conf
進入其中一個容器配置Shard-Server副本集:spa
# 宿主機 docker exec -it shard2_1 bash # 容器中 mongo --port 27018 # Mongo Shell中 rs.initiate({ "_id":"shard2", "members":[ { "_id":0, "host":"10.1.1.8:27018" }, { "_id":1, "host":"10.1.1.9:27018" }, { "_id":2, "host":"10.1.1.10:27018" } ] })
# 啓動第三個分片 - shard3 docker run -d --name=shard3_1 --network=mongodb0 --ip=10.1.1.11 -v /home/dmc/shard3:/etc/mongodb mongo:4.0.0 -f /etc/mongodb/mongod.conf docker run -d --name=shard3_2 --network=mongodb0 --ip=10.1.1.12 -v /home/dmc/shard3:/etc/mongodb mongo:4.0.0 -f /etc/mongodb/mongod.conf docker run -d --name=shard3_3 --network=mongodb0 --ip=10.1.1.13 -v /home/dmc/shard3:/etc/mongodb mongo:4.0.0 -f /etc/mongodb/mongod.conf
進入其中一個容器配置Shard-Server副本集:.net
# 宿主機 docker exec -it shard3_1 bash # 容器中 mongo --port 27018 # Mongo Shell中 rs.initiate({ "_id":"shard3", "members":[ { "_id":0, "host":"10.1.1.11:27018" }, { "_id":1, "host":"10.1.1.12:27018" }, { "_id":2, "host":"10.1.1.13:27018" } ] })
docker run -d --name=mongos_1 --network=mongodb0 --ip=10.1.1.14 -v /home/dmc/mongos:/etc/mongodb mongo:4.0.0 docker run -d --name=mongos_2 --network=mongodb0 --ip=10.1.1.15 -v /home/dmc/mongos:/etc/mongodb mongo:4.0.0 docker run -d --name=mongos_3 --network=mongodb0 --ip=10.1.1.16 -v /home/dmc/mongos:/etc/mongodb mongo:4.0.0
進入每一個容器中,啓動mongos進程(此處能夠改進一下,自動運行mongos進程)
# 宿主機 docker exec -it mongos_1 bash # 容器中 mongos -f /etc/mongodb/mongos.conf
能夠就在其中一個mongos容器中使用mongo shell鏈接mongos進程配置分片集羣。
# 鏈接mongos,端口號與mongos配置文件中設定一致 mongo -port 27020 # 將分片加入集羣 sh.addShard("shard1/10.1.1.5:27018,10.1.1.6:27018,10.1.1.7:27018") sh.addShard("shard2/10.1.1.8:27018,10.1.1.9:27018,10.1.1.10:27018") sh.addShard("shard3/10.1.1.11:27018,10.1.1.12:27018,10.1.1.13:27018") # 對數據庫開啓分片功能 sh.enableSharding("[dbName]") # 對數據庫中集合開啓分片,並指定片鍵 sh.shardCollection("[dbName.collectionName]",{[keyName]:1})
# 插入5百萬個簡單的文檔,耐心等待插入結束 for(var i=1;i<=5000000;i++){ db.coll1.insert({ name:i, age:Math.round(Math.random() * 100), score1:Math.round(Math.random() * 100), score2:Math.round(Math.random() * 100), score3:Math.round(Math.random() * 100), score4:Math.round(Math.random() * 100), score5:Math.round(Math.random() * 100) }); } # 查看分片狀態 sh.status()