MongoDB集群部署(基于docker)

打印 上一主题 下一主题

主题 766|帖子 766|积分 2298

单机部署

运行docker下令创建mongo容器即可
  1. docker run -d \
  2.         --restart=always \
  3.         --name mongo-single \
  4.         -p 27097:27017 \
  5.         -v /app/mongo/mongo-single/data:/data/db \
  6.         -e MONGO_INITDB_ROOT_USERNAME=admin \
  7.         -e MONGO_INITDB_ROOT_PASSWORD=Wq@123456 \
  8.         mongo:latest --auth
复制代码
主从集群

1、准备工作

(1)创建docker网络
  1. docker network create cluster
复制代码
(2)利用openssl创建集群认证的秘钥
  1. # 创建秘钥
  2. openssl rand -base64 756 > keyfile.key
  3. # 给秘钥创建赋予权限
  4. chmod 600 keyfile.key
  5. # 修改秘钥文件组
  6. chown 999:999 keyfile.key
复制代码
可能会碰到的题目:
(1)启动容器报错 bad file ,可能是由于秘钥文件没有权限大概组权限不敷,须要执行赋予权限以及分配组,权限要 600 ,太高也会报错
2、运行docker下令

  1. sudo docker run -d \
  2.         --name mongo1 \
  3.         --network cluster \
  4.         -p 27017:27017 \
  5.         -e MONGO_INITDB_ROOT_USERNAME=root \
  6.         -e MONGO_INITDB_ROOT_PASSWORD=123456 \
  7.         -v /app/mongo/mongo1/data:/data/db \
  8.         -v /app/mongo/mongo1/conf:/data/configdb \
  9.         -v /app/mongo/mongo1/conf/mongoKeyfile.key:/data/configdb/mongoKeyfile.key \
  10.         mongo:latest --replSet rs0 --bind_ip_all --keyFile /data/configdb/mongoKeyfile.key --wiredTigerCacheSizeGB 1
  11.        
  12. docker run -d \
  13.         --name mongo2 \
  14.         --network cluster \
  15.         -p 27018:27017 \
  16.         -e MONGO_INITDB_ROOT_USERNAME=root \
  17.         -e MONGO_INITDB_ROOT_PASSWORD=123456 \
  18.         -v /app/mongo/mongo2/data:/data/db \
  19.         -v /app/mongo/mongo2/conf:/data/configdb \
  20.         -v /app/mongo/mongo2/conf/mongoKeyfile.key:/data/configdb/mongoKeyfile.key \
  21.         mongo:latest --replSet rs0 --bind_ip_all --keyFile /data/configdb/mongoKeyfile.key --wiredTigerCacheSizeGB 1
  22.        
  23. docker run -d \
  24.         --name mongo3 \
  25.         --network cluster \
  26.         -p 27019:27017 \
  27.         -e MONGO_INITDB_ROOT_USERNAME=root \
  28.         -e MONGO_INITDB_ROOT_PASSWORD=123456 \
  29.         -v /app/mongo/mongo3/data:/data/db \
  30.         -v /app/mongo/mongo3/conf:/data/configdb \
  31.         -v /app/mongo/mongo3/conf/mongoKeyfile.key:/data/configdb/mongoKeyfile.key \
  32.         mongo:latest --replSet rs0 --bind_ip_all --keyFile /data/configdb/mongoKeyfile.key --wiredTigerCacheSizeGB 1
复制代码
留意点:


  • mongoKeyfile.key 秘钥文件须要同一份,可创建完成后复制到每个节点的配置目录下,例如:/app/mongo/mongo3/conf
  • --keyFile /data/configdb/mongoKeyfile.key 中的 /data/configdb/mongoKeyfile.key 目录须要填写的是容器内的目录,宿主机上的目录容器访问不到
3、初始化副本集

(1)进入任一节点容器中
  1. docker exec -it mongo1 bash
复制代码
(2)查询MongoDB的下令地点目录(容器中的目录)
  1. whereis mongosh
复制代码
(3)利用下令进入MongoDB
  1. mongosh
复制代码
(4)利用Mongo下令初始化副本集
  1. //验证身份
  2. use admin;
  3. db.auth("root", "123456");
  4. //初始化副本
  5. rs.initiate({
  6.   _id: "rs0",
  7.   members: [
  8.     { _id: 0, host: "192.168.2.17:27017" },
  9.     { _id: 1, host: "192.168.2.17:27018" },
  10.     { _id: 2, host: "192.168.2.17:27019" }
  11.   ]
  12. });
  13. //查看副本状态
  14. rs.status();
  15. //切换到对应的库
  16. use boatol;
  17. //给对应的库添加可读写权限的用户
  18. db.createUser(
  19.   {
  20.     user: "admin",
  21.     pwd: "123456",
  22.     roles: [ { role: "readWrite", db: "boatol" } ]
  23.   }
  24. );
复制代码
题目:
1、BadValue: security.keyFile is required when authorization is enabled with replica sets
开启认证后,秘钥文件可能读取不到大概权限不敷,查抄秘钥文件的地点目录,也可创建一个空的测试容器,挂载当前目录看看是否将秘钥文件挂载到容器中的对应目录下
分片集群

1、概念

将原来容器重新部署为分片集群,分片集群的三要素


  • 分片服务器 (Shard Servers)
    分片服务器存储实际的数据,每个分片服务器都是一个独立的MongoDB实例。数据被分片后,每个分片服务器只存储部分数据。分片的目标是为了在多个服务器上分布数据和负载,以提高数据库的读写性能和存储容量。
    在分片架构中,每个分片可以是一个独立的MongoDB服务器或副本集。通过水中分片(sharding),数据被分割成更小的部分,并分布到多个分片服务器上。
  • 配置服务器 (Config Servers)
    配置服务器存储集群的元数据,包括分片配置信息和分片的分布情况。元数据包括每个分片存储的数据范围、每个分片的服务器信息等。
    在分片集群中,配置服务器是不可或缺的,集群中的每个组件都须要查询配置服务器以了解数据的分布。配置服务器通常是一个由三个服务器构成的副本集,以确保元数据的高可用性和一致性。
  • 路由器 (Mongos)
    Mongos是MongoDB的路由器组件,负责吸收应用程序的查询请求并将它们路由到正确的分片服务器。Mongos查询配置服务器以了解数据的分布情况,并根据元数据将查询请求分发到相应的分片服务器。
    Mongos本身不存储数据,它是一个中心层,提供一个统一的接口,让应用程序可以透明地访问分片数据。Mongos将查询结果从各个分片服务器汇总并返回给应用程序。
分片的工作流程
1、客户端应用程序Mongos路由器发送查询请求。
2、Mongos路由器查询配置服务器以了解数据的分布情况。
3、 Mongos路由器将查询请求分发到相应的分片服务器
4、分片服务器处理查询并返回结果给Mongos路由器
5、 Mongos路由器汇总查询结果并返回给客户端应用程序。
2、停止容器

将三台容器全部停止
  1. docker stop mongo1 mongo2 mongo3
  2. # 移除三个容器,但不删除数据
  3. docker rm -f mongo1 mongo2 mongo3
复制代码
3、重新配置并启动容器

(1)配置服务器 (Config Servers)

先执行下令创建容器
  1. docker run -d \
  2.         --name mongo-config1 \
  3.         --network cluster \
  4.         -p 27039:27019 \
  5.         -v /app/mongo-cluster/mongo-config1/data:/data/db \
  6.         -v /app/mongo-cluster/mongo-config1/configdb:/data/configdb \
  7.         -v /app/mongo-cluster/mongoKeyfile.key:/data/mongoKeyfile.key \
  8.         mongo:latest --replSet configReplSet --configsvr --keyFile /data/mongoKeyfile.key --auth --wiredTigerCacheSizeGB 1
  9.        
  10. docker run -d \
  11.         --name mongo-config2 \
  12.         --network cluster \
  13.         -p 27049:27019 \
  14.         -v /app/mongo-cluster/mongo-config2/data:/data/db \
  15.         -v /app/mongo-cluster/mongo-config2/configdb:/data/configdb \
  16.         -v /app/mongo-cluster/mongoKeyfile.key:/data/mongoKeyfile.key \
  17.         mongo:latest --replSet configReplSet --configsvr --keyFile /data/mongoKeyfile.key --auth --wiredTigerCacheSizeGB 1
  18.        
  19. docker run -d \
  20.         --name mongo-config3 \
  21.         --network cluster \
  22.         -p 27059:27019 \
  23.         -v /app/mongo-cluster/mongo-config3/data:/data/db \
  24.         -v /app/mongo-cluster/mongo-config3/configdb:/data/configdb \
  25.         -v /app/mongo-cluster/mongoKeyfile.key:/data/mongoKeyfile.key \
  26.         mongo:latest --replSet configReplSet --configsvr --keyFile /data/mongoKeyfile.key --auth --wiredTigerCacheSizeGB 1
复制代码
进入此中一个容器内,初始化集群副本集
  1. # 进入容器内部docker exec -it mongo-config1 bash# 进入数据库,初始化副本集,默认配置服务器集群的端口为27019./usr/bin/mongosh
  2. --port 27019
复制代码
初始化配置服务器的副本集
  1. //初始化副本集
  2. rs.initiate({
  3.   _id: "configReplSet",
  4.   configsvr: true,
  5.   members: [
  6.     { _id: 0, host: "mongo-config1:27019" },
  7.     { _id: 1, host: "mongo-config2:27019" },
  8.     { _id: 2, host: "mongo-config3:27019" }
  9.   ]
  10. })
  11. //查询主节点
  12. rs.status();
  13. //进入主节点添加用户
  14. db.getSiblingDB("admin").createUser({
  15.   user: "admin",
  16.   pwd: "Wq@123456",
  17.   roles: [{ role: "root", db: "admin" }]
  18. })
  19. use admin;
  20. db.auth("admin","Wq@123456");
复制代码
留意点:


  • --configsvr 配置的默认端口为27019
(2)配置分片服务器

第一个分片副本
配置为分片服务器,主要负责存储数据
  1. docker run -d \
  2.         --name mongo-shard1 \
  3.         --network cluster \
  4.         -p 27067:27018 \
  5.         -v /app/mongo/mongo-shard1/data:/data/db \
  6.         -v /app/mongo/mongo-shard1/configdb:/data/configdb \
  7.         -v /app/mongo/mongo-shard1/conf/mongoKeyfile.key:/data/configdb/mongoKeyfile.key \
  8.         mongo:latest --replSet shardSet1 --shardsvr --keyFile /data/configdb/mongoKeyfile.key --auth --wiredTigerCacheSizeGB 1
  9.        
  10. docker run -d \
  11.         --name mongo-shard2 \
  12.         --network cluster \
  13.         -p 27077:27018 \
  14.         -v /app/mongo/mongo-shard2/data:/data/db \
  15.         -v /app/mongo/mongo-shard2/configdb:/data/configdb \
  16.         -v /app/mongo/mongo-shard2/conf/mongoKeyfile.key:/data/configdb/mongoKeyfile.key \
  17.         mongo:latest --replSet shardSet1 --shardsvr --keyFile /data/configdb/mongoKeyfile.key --auth --wiredTigerCacheSizeGB 1
  18.        
  19. docker run -d \
  20.         --name mongo-shard3 \
  21.         --network cluster \
  22.         -p 27087:27018 \
  23.         -v /app/mongo/mongo-shard3/data:/data/db \
  24.         -v /app/mongo/mongo-shard3/configdb:/data/configdb \
  25.         -v /app/mongo/mongo-shard3/conf/mongoKeyfile.key:/data/configdb/mongoKeyfile.key \
  26.         mongo:latest --replSet shardSet1 --shardsvr --keyFile /data/configdb/mongoKeyfile.key --auth --wiredTigerCacheSizeGB 1
复制代码
进入此中一个容器内,初始化集群副本集
  1. # 进入容器内部docker exec -it mongo-shard1 bash# 进入数据库,初始化副本集,默认分片集群的端口为27018./usr/bin/mongosh
  2. --port 27018
复制代码
初始化副本集
  1. //初始化分片副本集
  2. rs.initiate({
  3.   _id: "shardSet1",
  4.   members: [
  5.     { _id: 0, host: "mongo-shard1:27018" },
  6.     { _id: 1, host: "mongo-shard2:27018" },
  7.     { _id: 2, host: "mongo-shard3:27018" }
  8.   ]
  9. });
  10. //初始化完成后,查询主节点,并切换到主节点添加用户认证
  11. rs.status();
  12. //添加用户
  13. db.getSiblingDB("admin").createUser({
  14.   user: "admin",
  15.   pwd: "Wq@123456",
  16.   roles: [{ role: "root", db: "admin" }]
  17. });
  18. use admin;
  19. db.auth("admin","Wq@123456");
复制代码
第二个分片副本
  1. docker run -d \
  2.         --name mongo-shard4 \
  3.         --network cluster \
  4.         -p 27066:27018 \
  5.         -v /app/mongo/mongo-shard4/data:/data/db \
  6.         -v /app/mongo/mongo-shard4/configdb:/data/configdb \
  7.         -v /app/mongo/mongo-shard4/conf/mongoKeyfile.key:/data/configdb/mongoKeyfile.key \
  8.         mongo:latest --replSet shardSet2 --shardsvr --keyFile /data/configdb/mongoKeyfile.key --auth --wiredTigerCacheSizeGB 1
  9.        
  10. docker run -d \
  11.         --name mongo-shard5 \
  12.         --network cluster \
  13.         -p 27076:27018 \
  14.         -v /app/mongo/mongo-shard5/data:/data/db \
  15.         -v /app/mongo/mongo-shard5/configdb:/data/configdb \
  16.         -v /app/mongo/mongo-shard5/conf/mongoKeyfile.key:/data/configdb/mongoKeyfile.key \
  17.         mongo:latest --replSet shardSet2 --shardsvr --keyFile /data/configdb/mongoKeyfile.key --auth --wiredTigerCacheSizeGB 1
  18.        
  19. docker run -d \
  20.         --name mongo-shard6 \
  21.         --network cluster \
  22.         -p 27086:27018 \
  23.         -v /app/mongo/mongo-shard6/data:/data/db \
  24.         -v /app/mongo/mongo-shard6/configdb:/data/configdb \
  25.         -v /app/mongo/mongo-shard6/conf/mongoKeyfile.key:/data/configdb/mongoKeyfile.key \
  26.         mongo:latest --replSet shardSet2 --shardsvr --keyFile /data/configdb/mongoKeyfile.key --auth --wiredTigerCacheSizeGB 1
复制代码
进入容器
  1. # 进入容器内部docker exec -it mongo-shard4 bash# 进入数据库,初始化副本集,默认分片集群的端口为27018./usr/bin/mongosh
  2. --port 27018
复制代码
初始化副本集
  1. //初始化分片副本集
  2. rs.initiate({
  3.   _id: "shardSet2",
  4.   members: [
  5.     { _id: 0, host: "mongo-shard4:27018" },
  6.     { _id: 1, host: "mongo-shard5:27018" },
  7.     { _id: 2, host: "mongo-shard6:27018" }
  8.   ]
  9. });
  10. //初始化完成后,查询主节点,并切换到主节点添加用户认证
  11. rs.status();
  12. //添加用户
  13. db.getSiblingDB("admin").createUser({
  14.   user: "admin",
  15.   pwd: "Wq@123456",
  16.   roles: [{ role: "root", db: "admin" }]
  17. });
  18. use admin;
  19. db.auth("admin","Wq@123456");
复制代码
分片副本可以在后续添加
留意点:


  • --shardsvr: 默认端口为27018
4、Mongos路由容器

创建一个新的容器,充当路由器,并连接到配置服务器,此中配置的ip地点为各个配置服务器
  1. docker run -d \
  2.     --name mongos \
  3.     --network cluster \
  4.     --restart=true \
  5.     -p 27017:27017 \
  6.     -e MONGO_INITDB_ROOT_USERNAME=admin \
  7.         -e MONGO_INITDB_ROOT_PASSWORD=gxmnDb358597 \
  8.         -v /app/mongo-cluster/mongoKeyfile.key:/data/mongoKeyfile.key \
  9.     mongo:latest mongos --bind_ip_all --keyFile /data/mongoKeyfile.key --configdb configReplSet/mongo-config1:27019,mongo-config2:27019,mongo-config3:27019
复制代码
进入容器内部,配置分片服务器
  1. # 进入容器内部docker exec -it mongos bash# 进入数据库,初始化副本集./usr/bin/mongosh
  2. --port 27017
复制代码
进入数据库后,验证用户
  1. //切换数据库并验证用户
  2. use admin;
  3. db.auth("admin","Wq@123456");
  4. //添加分片集群
  5. sh.addShard("shardSet1/mongo-shard1:27018,mongo-shard2:27018,mongo-shard3:27018")
  6. sh.addShard("shardSet2/mongo-shard4:27018,mongo-shard5:27018,mongo-shard6:27018")
  7. db.getSiblingDB("admin").createUser({
  8.   user: "admin",
  9.   pwd: "Wq@123456",
  10.   roles: [{ role: "root", db: "admin" }]
  11. });
  12. //查看分片状态
  13. sh.status();
复制代码
5、数据分片

进入路由服务器的数据库
  1. # 进入容器内部docker exec -it mongos bash# 进入数据库,初始化副本集./usr/bin/mongosh
  2. --port 27017
复制代码
指定须要分片的库
  1. use admin;
  2. db.auth("admin","Wq@123456");
  3. use boatol;
  4. //给对应的库加上用户以及读写权限
  5. db.createUser({
  6.   user: "admin",
  7.   pwd: "Wq@123456",
  8.   roles: [
  9.     {
  10.       role: "readWrite",
  11.       db: "boatol"
  12.     }
  13.   ]
  14. });
  15. //查看当前库的用户
  16. db.getUsers();
  17. //创建索引
  18. db.motorHistoricalTrack.createIndex({ motorDeviceSn: "hashed", trackTime:1 });
  19. //指定需要分片的库,库名为 boatol
  20. sh.enableSharding("boatol");
  21. //指定分片的减名,boatol为库名,motorHistoricalTrack为文档名,motorDeviceSn为分片的键名,使用哈希分片
  22. sh.shardCollection("boatol.motorHistoricalTrack", { motorDeviceSn: "hashed", trackTime:1 });
  23. //验证分片状态
  24. db.getSiblingDB("config").collections.find({ _id: "boatol.motorHistoricalTrack" }).pretty();
  25. //查看集合分片的分布情况(数据分布在哪个分片上)
  26. db.motorHistoricalTrack.getShardDistribution();
  27. //查看分片状态
  28. sh.status();
复制代码
留意点:


  • 须要创建索引后才可指定分片键,分片键基于索引
  • 初始的分片库可能会将数据存在一个片区或一个块中,后续数据量多就会自动将数据分布到其他片区
结果:
分片信息
  1. Shard shardSet2 at shardSet2/mongo-shard4:27018,mongo-shard5:27018,mongo-shard6:27018
  2. {
  3.   data: '235KiB',
  4.   docs: 1061,
  5.   chunks: 2,
  6.   'estimated data per chunk': '117KiB',
  7.   'estimated docs per chunk': 530
  8. }
  9. ---
  10. Shard shardSet1 at shardSet1/mongo-shard1:27018,mongo-shard2:27018,mongo-shard3:27018
  11. {
  12.   data: '145KiB',
  13.   docs: 657,
  14.   chunks: 2,
  15.   'estimated data per chunk': '72KiB',
  16.   'estimated docs per chunk': 328
  17. }
  18. ---
  19. Totals
  20. {
  21.   data: '380KiB',
  22.   docs: 1718,
  23.   chunks: 4,
  24.   'Shard shardSet2': [
  25.     '61.75 % data',
  26.     '61.75 % docs in cluster',
  27.     '227B avg obj size on shard'
  28.   ],
  29.   'Shard shardSet1': [
  30.     '38.24 % data',
  31.     '38.24 % docs in cluster',
  32.     '227B avg obj size on shard'
  33.   ]
  34. }
复制代码
6、一键部署

在确保docker-compose安装之后,编写docker-compose.yml文件,创建好每个分片的目录
  1. version: '2'
  2. services:
  3.   mongo-config1:
  4.     image: mongo:latest
  5.     ports:
  6.       - 27039:27019
  7.     networks:
  8.       - cluster
  9.     restart: always
  10.     hostname: mongo-config1
  11.     container_name: mongo-config1
  12.     volumes:
  13.       - /app/mongo/mongo-config1/data:/data/db
  14.       - /app/mongo/mongo-config1/configdb:/data/configdb
  15.       - /app/mongo/mongo-config1/log:/var/log/mongodb
  16.       - /app/mongo/keyfile.key:/data/keyfile.key
  17.     command:
  18.       --replSet configReplSet
  19.       --configsvr
  20.       --keyFile /data/keyfile.key
  21.       --auth
  22.       --wiredTigerCacheSizeGB 1
  23.   mongo-config2:
  24.     image: mongo:latest
  25.     ports:
  26.       - 27049:27019
  27.     networks:
  28.       - cluster
  29.     restart: always
  30.     hostname: mongo-config2
  31.     container_name: mongo-config2
  32.     volumes:
  33.       - /app/mongo/mongo-config2/data:/data/db
  34.       - /app/mongo/mongo-config2/configdb:/data/configdb
  35.       - /app/mongo/mongo-config2/log:/var/log/mongodb
  36.       - /app/mongo/keyfile.key:/data/keyfile.key
  37.     command:
  38.       --replSet configReplSet
  39.       --configsvr
  40.       --keyFile /data/keyfile.key
  41.       --auth
  42.       --wiredTigerCacheSizeGB 1
  43.   mongo-config3:
  44.     image: mongo:latest
  45.     ports:
  46.       - 27059:27019
  47.     networks:
  48.       - cluster
  49.     restart: always
  50.     hostname: mongo-config3
  51.     container_name: mongo-config3
  52.     volumes:
  53.       - /app/mongo/mongo-config3/data:/data/db
  54.       - /app/mongo/mongo-config3/configdb:/data/configdb
  55.       - /app/mongo/mongo-config3/log:/var/log/mongodb
  56.       - /app/mongo/keyfile.key:/data/keyfile.key
  57.     command:
  58.       --replSet configReplSet
  59.       --configsvr
  60.       --keyFile /data/keyfile.key
  61.       --auth
  62.       --wiredTigerCacheSizeGB 1
  63.   mongo-shard1:
  64.     image: mongo:latest
  65.     ports:
  66.       - 27067:27018
  67.     networks:
  68.       - cluster
  69.     restart: always
  70.     hostname: mongo-shard1
  71.     container_name: mongo-shard1
  72.     volumes:
  73.       - /app/mongo/mongo-shard1/data:/data/db
  74.       - /app/mongo/mongo-shard1/configdb:/data/configdb
  75.       - /app/mongo/mongo-shard1/log:/var/log/mongodb
  76.       - /app/mongo/keyfile.key:/data/keyfile.key
  77.     command:
  78.       --replSet shardSet1
  79.       --shardsvr
  80.       --keyFile /data/keyfile.key
  81.       --auth
  82.       --wiredTigerCacheSizeGB 1
  83.   mongo-shard2:
  84.     image: mongo:latest
  85.     ports:
  86.       - 27077:27018
  87.     networks:
  88.       - cluster
  89.     restart: always
  90.     hostname: mongo-shard2
  91.     container_name: mongo-shard2
  92.     volumes:
  93.       - /app/mongo/mongo-shard2/data:/data/db
  94.       - /app/mongo/mongo-shard2/configdb:/data/configdb
  95.       - /app/mongo/mongo-shard2/log:/var/log/mongodb
  96.       - /app/mongo/keyfile.key:/data/keyfile.key
  97.     command:
  98.       --replSet shardSet1
  99.       --shardsvr
  100.       --keyFile /data/keyfile.key
  101.       --auth
  102.       --wiredTigerCacheSizeGB 1
  103.   mongo-shard3:
  104.     image: mongo:latest
  105.     ports:
  106.       - 27087:27018
  107.     networks:
  108.       - cluster
  109.     restart: always
  110.     hostname: mongo-shard3
  111.     container_name: mongo-shard3
  112.     volumes:
  113.       - /app/mongo/mongo-shard3/data:/data/db
  114.       - /app/mongo/mongo-shard3/configdb:/data/configdb
  115.       - /app/mongo/mongo-shard3/log:/var/log/mongodb
  116.       - /app/mongo/keyfile.key:/data/keyfile.key
  117.     command:
  118.       --replSet shardSet1
  119.       --shardsvr
  120.       --keyFile /data/keyfile.key
  121.       --auth
  122.       --wiredTigerCacheSizeGB 1
  123.   mongo-shard4:
  124.     image: mongo:latest
  125.     ports:
  126.       - 27066:27018
  127.     networks:
  128.       - cluster
  129.     restart: always
  130.     hostname: mongo-shard4
  131.     container_name: mongo-shard4
  132.     volumes:
  133.       - /app/mongo/mongo-shard4/data:/data/db
  134.       - /app/mongo/mongo-shard4/configdb:/data/configdb
  135.       - /app/mongo/mongo-shard4/log:/var/log/mongodb
  136.       - /app/mongo/keyfile.key:/data/keyfile.key
  137.     command:
  138.       --replSet shardSet2
  139.       --shardsvr
  140.       --keyFile /data/keyfile.key
  141.       --auth
  142.       --wiredTigerCacheSizeGB 1
  143.   mongo-shard5:
  144.     image: mongo:latest
  145.     ports:
  146.       - 27076:27018
  147.     networks:
  148.       - cluster
  149.     restart: always
  150.     hostname: mongo-shard5
  151.     container_name: mongo-shard5
  152.     volumes:
  153.       - /app/mongo/mongo-shard5/data:/data/db
  154.       - /app/mongo/mongo-shard5/configdb:/data/configdb
  155.       - /app/mongo/mongo-shard5/log:/var/log/mongodb
  156.       - /app/mongo/keyfile.key:/data/keyfile.key
  157.     command:
  158.       --replSet shardSet2
  159.       --shardsvr
  160.       --keyFile /data/keyfile.key
  161.       --auth
  162.       --wiredTigerCacheSizeGB 1
  163.   mongo-shard6:
  164.     image: mongo:latest
  165.     ports:
  166.       - 27086:27018
  167.     networks:
  168.       - cluster
  169.     restart: always
  170.     hostname: mongo-shard6
  171.     container_name: mongo-shard6
  172.     volumes:
  173.       - /app/mongo/mongo-shard6/data:/data/db
  174.       - /app/mongo/mongo-shard6/configdb:/data/configdb
  175.       - /app/mongo/mongo-shard6/log:/var/log/mongodb
  176.       - /app/mongo/keyfile.key:/data/keyfile.key
  177.     command:
  178.       --replSet shardSet2
  179.       --shardsvr
  180.       --keyFile /data/keyfile.key
  181.       --auth
  182.       --wiredTigerCacheSizeGB 1
  183.   mongos:
  184.     image: mongo:latest
  185.     ports:
  186.       - 27017:27017
  187.     networks:
  188.       - cluster
  189.     restart: always
  190.     hostname: mongos
  191.     container_name: mongos
  192.     environment:
  193.       MONGO_INITDB_ROOT_USERNAME: admin
  194.       MONGO_INITDB_ROOT_PASSWORD: Wq@123456
  195.     volumes:
  196.       - /app/mongo/keyfile.key:/data/keyfile.key
  197.       - /app/mongo/mongos/log:/var/log/mongodb
  198.       - /app/mongo/mongos/data:/data/db
  199.     command:
  200.       mongos
  201.       --configdb configReplSet/mongo-config1:27019,mongo-config2:27019,mongo-config3:27019
  202.       --bind_ip_all
  203.       --keyFile /data/keyfile.key
  204. networks:
  205.   cluster:
  206.     external: true
复制代码
如有新增分片,在后续加上即可
启动:
  1. docker-compose up -d
复制代码
停止:
  1. docker-compose stop
复制代码
停止并删除
  1. docker-compose down
复制代码
7、备份与规复

(1)备份

  1. # 压缩备份
  2. mongodump --host mongodb1.example.net --port 3017 --username user --password "pass" --authenticationDatabase admin | gzip > /path/to/backup/directory/backup.gz
  3. # 本地备份
  4. mongodump --host localhost --port 27017 --username admin --password Wq@123456 --authenticationDatabase admin --db boatol --out /data/db
  5. # 导出json
  6. mongoexport --host localhost --port 27017 --username admin --password Wq@123456 --authenticationDatabase admin --db boatol --collection motorHistoricalTrack --out /data/db/motorHistoricalTrack.json --jsonArray
复制代码
(2)规复

  1. # 导入bson数据
  2. mongorestore --host localhost --port 27017 --username admin --password Wq@123456 --authenticationDatabase admin --db boatol --batchSize 1000  --numParallelCollections 1 --collection motorHistoricalTrack /data/db/motorHistoricalTrack.bson
  3. # 导入json数据
  4. mongoimport --host localhost --port 27017 --username admin --password Wq@123456 --authenticationDatabase admin --db boatol --collection motorHistoricalTrack --file /data/db/motorHistoricalTrack.json
复制代码
参数解析:


  • --host : 主机地点
  • --port :主机端口
  • --username:用户名
  • --password:暗码
  • --authenticationDatabase:须要认证的数据库
  • --db:导入的目标库
  • --batchSize :一次性导入数量
  • --numParallelCollections :并行导入集合数
  • 末了是导入文件目录
留意点:


  • 导出的bson文件过大,在利用mongorestore导入时会消耗大量内存,导致有的片区节点宕机无法进行导入,须要指定 --batchSize 参数

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

河曲智叟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表