当前位置:   article > 正文

docker搭建mongodb集群_mongodb docker --fork

mongodb docker --fork

1. 从Docker Hub上拉取MongoDB镜像

docker pull mongo:4.0.0

2. Docker网络配置

## 为MongoDB集群创建独立的docker网桥

 docker network create --subnet=10.1.1.0/24 mongodbnet

## 查看网络信息

 docker network ls

 docker network inspect 9d4910fdcf5a

3. 准备MongoDB集群配置文件

  • Mongos 配置文件

路径:/mongos/mongos.conf
说明:

mongos不需要存储因此去掉storage字段;

可任意配置net.port字段,需要指定processManagement.fork为true以–fork方式启动;

sharding.configDB字段用于指定Config-Server集群地址,格式为[replSetName]/[config-server1:port],[config-server2:port],[config-server3:port]…

  1. systemLog:
  2. destination: file
  3. logAppend: true
  4. path: /var/log/mongodb/mongos.log
  5. net:
  6. port: 27020
  7. bindIp: 127.0.0.1
  8. processManagement:
  9. fork: true
  10. timeZoneInfo: /usr/share/zoneinfo
  11. sharding:
  12. configDB: cfg/10.1.1.2:27019,10.1.1.3:27019,10.1.1.4:27019
  • Config-Server 配置文件

路径:/configsvr/mongod.conf
说明:MongoDB v3.4 之后要求Config-Server也需要组成副本集形式

  1. storage:
  2. dbPath: /data/db
  3. journal:
  4. enabled: true
  5. systemLog:
  6. destination: file
  7. logAppend: true
  8. path: /var/log/mongodb/mongod.log
  9. net:
  10. bindIp: 127.0.0.1
  11. processManagement:
  12. timeZoneInfo: /usr/share/zoneinfo
  13. replication:
  14. replSetName: cfg
  15. sharding:
  16. clusterRole: configsvr
  • Shard-Server 配置文件 

路径:E:\hj-usingtools\mongoClusterConfig\shared1/mongod.conf
说明:此处配置3个分片为shard1,shard2,shard3;每个分片都需要组成副本集。
shard2,shard3目录下配置文件同名,修改replSetName字段的值分别为’shard2’和’shard3’

  1. storage:
  2. dbPath: /data/db
  3. journal:
  4. enabled: true
  5. systemLog:
  6. destination: file
  7. logAppend: true
  8. path: /var/log/mongodb/mongod.log
  9. net:
  10. bindIp: 127.0.0.1
  11. processManagement:
  12. timeZoneInfo: /usr/share/zoneinfo
  13. replication:
  14. replSetName: shard1
  15. sharding:
  16. clusterRole: shardsvr

4. 启动docker容器

  • 启动3个Config-Server容器:
  1. docker run -d --name=cfg_1 --network=mongodbnet --ip=10.1.1.2 -v E:\hj-usingtools\mongoClusterConfig\configsvr:/etc/mongodb hj_mongo:1.1 -f /etc/mongodb/mongod.conf
  2. docker run -d --name=cfg_2 --network=mongodbnet --ip=10.1.1.3 -v E:\hj-usingtools\mongoClusterConfig\configsvr:/etc/mongodb hj_mongo:1.1 -f /etc/mongodb/mongod.conf
  3. docker run -d --name=cfg_3 --network=mongodbnet --ip=10.1.1.4 -v E:\hj-usingtools\mongoClusterConfig\configsvr:/etc/mongodb hj_mongo:1.1 -f /etc/mongodb/mongod.conf

进入其中一个容器配置Config-Server副本集: 

  1. # 宿主机
  2. docker exec -it cfg_1 bash
  3. # 容器中
  4. mongo --port 27019
  5. # Mongo Shell中
  6. rs.initiate({
  7. "_id":"cfg",
  8. "members":[
  9. {
  10. "_id":0,
  11. "host":"10.1.1.2:27019"
  12. },
  13. {
  14. "_id":1,
  15. "host":"10.1.1.3:27019"
  16. },
  17. {
  18. "_id":2,
  19. "host":"10.1.1.4:27019"
  20. }
  21. ]
  22. })
  • 启动3*3个Shard-Server容器: 

说明:分片服务器启动后默认是以27018作为端口。

  1. #启动第一个分片 - shard1
  2. docker run -d --name=shared1_1 --network=mongodbnet --ip=10.1.1.5 -v E:\hj-usingtools\mongoClusterConfig\shared1:/etc/mongodb hj_mongo:1.1 -f /etc/mongodb/mongod.conf
  3. docker run -d --name=shared1_2 --network=mongodbnet --ip=10.1.1.6 -v E:\hj-usingtools\mongoClusterConfig\shared1:/etc/mongodb hj_mongo:1.1 -f /etc/mongodb/mongod.conf
  4. docker run -d --name=shared1_3 --network=mongodbnet --ip=10.1.1.7 -v E:\hj-usingtools\mongoClusterConfig\shared1:/etc/mongodb hj_mongo:1.1 -f /etc/mongodb/mongod.conf

进入其中一个容器配置Shard-Server副本集:

  1. # 宿主机
  2. docker exec -it shard1_1 bash
  3. # 容器中
  4. mongo --port 27018
  5. # Mongo Shell中
  6. rs.initiate({
  7. "_id":"shard1",
  8. "members":[
  9. {
  10. "_id":0,
  11. "host":"10.1.1.5:27018"
  12. },
  13. {
  14. "_id":1,
  15. "host":"10.1.1.6:27018"
  16. },
  17. {
  18. "_id":2,
  19. "host":"10.1.1.7:27018"
  20. }
  21. ]
  22. })

 

  1. # 启动第二个分片 - shard2
  2. docker run -d --name=shared2_1 --network=mongodbnet --ip=10.1.1.8 -v E:\hj-usingtools\mongoClusterConfig\shared2:/etc/mongodb hj_mongo:1.1 -f /etc/mongodb/mongod.conf
  3. docker run -d --name=shared2_2 --network=mongodbnet --ip=10.1.1.8 -v E:\hj-usingtools\mongoClusterConfig\shared2:/etc/mongodb hj_mongo:1.1 -f /etc/mongodb/mongod.conf
  4. docker run -d --name=shared2_3 --network=mongodbnet --ip=10.1.1.10 -v E:\hj-usingtools\mongoClusterConfig\shared2:/etc/mongodb hj_mongo:1.1 -f /etc/mongodb/mongod.conf
  5. # 启动第三个分片 - shard3
  6. docker run -d --name=shared3_1 --network=mongodbnet --ip=10.1.1.11 -v E:\hj-usingtools\mongoClusterConfig\shared3:/etc/mongodb hj_mongo:1.1 -f /etc/mongodb/mongod.conf
  7. docker run -d --name=shared3_2 --network=mongodbnet --ip=10.1.1.12 -v E:\hj-usingtools\mongoClusterConfig\shared3:/etc/mongodb hj_mongo:1.1 -f /etc/mongodb/mongod.conf
  8. docker run -d --name=shared3_3 --network=mongodbnet --ip=10.1.1.13 -v E:\hj-usingtools\mongoClusterConfig\shared3:/etc/mongodb hj_mongo:1.1 -f /etc/mongodb/mongod.conf

 分别进入第二个分片、第三个分配的任意一个容器,操作同分片1,配置Shard-Server副本集,注意"_id"的修改

  1. rs.initiate({
  2. "_id":"shard2",
  3. "members":[
  4. {
  5. "_id":0,
  6. "host":"10.1.1.8:27018"
  7. },
  8. {
  9. "_id":1,
  10. "host":"10.1.1.9:27018"
  11. },
  12. {
  13. "_id":2,
  14. "host":"10.1.1.10:27018"
  15. }
  16. ]
  17. })
  1. rs.initiate({
  2. "_id":"shard3",
  3. "members":[
  4. {
  5. "_id":0,
  6. "host":"10.1.1.11:27018"
  7. },
  8. {
  9. "_id":1,
  10. "host":"10.1.1.12:27018"
  11. },
  12. {
  13. "_id":2,
  14. "host":"10.1.1.13:27018"
  15. }
  16. ]
  17. })
  • 启动3个mongos服务器 

说明:这里也使用了mongo镜像,但是需要开启mongos进程,mongod进程并不需要用到。

  1. docker run -d --name=mongos_1 --network=mongodbnet --ip=10.1.1.14 -v E:\hj-usingtools\mongoClusterConfig\mongos:/etc/mongodb hj_mongo:1.1
  2. docker run -d --name=mongos_2 --network=mongodbnet --ip=10.1.1.15 -v E:\hj-usingtools\mongoClusterConfig\mongos:/etc/mongodb hj_mongo:1.1
  3. docker run -d --name=mongos_3 --network=mongodbnet --ip=10.1.1.16 -v E:\hj-usingtools\mongoClusterConfig\mongos:/etc/mongodb hj_mongo:1.1

进入每个容器中,启动mongos进程(此处可以改进一下,自动运行mongos进程) 

  1. # 宿主机
  2. docker exec -it mongos_1 bash
  3. # 容器中
  4. mongos -f /etc/mongodb/mongos.conf

可以就在其中一个mongos容器中使用mongo shell连接mongos进程配置分片集群。

  1. # 连接mongos,端口号与mongos配置文件中设定一致
  2. mongo -port 27020
  3. # 将分片加入集群
  4. sh.addShard("shard1/10.1.1.5:27018,10.1.1.6:27018,10.1.1.7:27018")
  5. sh.addShard("shard2/10.1.1.8:27018,10.1.1.9:27018,10.1.1.10:27018")
  6. sh.addShard("shard3/10.1.1.11:27018,10.1.1.12:27018,10.1.1.13:27018")
  7. # 对数据库开启分片功能
  8. sh.enableSharding("[dbName]")
  9. # 对数据库中集合开启分片,并指定片键
  10. sh.shardCollection("[dbName.collectionName]",{[keyName]:1})

5. 尝试写入数据观察数据分块 

 

  1. # 插入5百万个简单的文档,耐心等待插入结束
  2. for(var i=1;i<=5000000;i++){
  3. db.coll1.insert({
  4. name:i,
  5. age:Math.round(Math.random() * 100),
  6. score1:Math.round(Math.random() * 100),
  7. score2:Math.round(Math.random() * 100),
  8. score3:Math.round(Math.random() * 100),
  9. score4:Math.round(Math.random() * 100),
  10. score5:Math.round(Math.random() * 100)
  11. });
  12. }
  13. # 查看分片状态
  14. sh.status()

Docker MongoDB v4.0.0 集群搭建_vincerom的博客-CSDN博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/906322
推荐阅读
相关标签
  

闽ICP备14008679号