MongoDB Shard 集群 Docker 部署

MongoDB Shard Docker 部署

部署环境

主机地址 主机配置 主机系统
Mongodb1/192.168.31.135 2CPU 4GB Debian12
Mongodb2/192.168.31.109 2CPU 4GB Debian12
Mongodb3/192.168.31.165 2CPU 4GB Debian12

镜像版本

mongodb/mongodb-community-server:5.0.27-ubuntu2004

部署集群

部署 Config Server 集群

分别在三台上启动 Config Server 容器

# mongodb1
docker run -d --name configsvr1 \
  --log-opt max-size=100m --log-opt max-file=3 --restart=unless-stopped \
  -v configsvr1_data:/data/configdb \
  -p 27019:27019 \
  mongodb/mongodb-community-server:5.0.27-ubuntu2004 \
  mongod --configsvr --replSet configReplSet --bind_ip_all
  
# mongodb2
docker run -d --name configsvr2 \
  --log-opt max-size=100m --log-opt max-file=3 --restart=unless-stopped \
  -v configsvr2_data:/data/configdb \
  -p 27019:27019 \
  mongodb/mongodb-community-server:5.0.27-ubuntu2004 \
  mongod --configsvr --replSet configReplSet --bind_ip_all

# mongodb3
docker run -d --name configsvr3 \
  --log-opt max-size=100m --log-opt max-file=3 --restart=unless-stopped \
  -v configsvr3_data:/data/configdb \
  -p 27019:27019 \
  mongodb/mongodb-community-server:5.0.27-ubuntu2004 \
  mongod --configsvr --replSet configReplSet --bind_ip_all

初始化 Config Server 复制集

  1. 登录 configsvr1 容器
docker exec -it configsvr1 mongo --port 27019
  1. 执行初始化脚本
rs.initiate({
  _id: "configReplSet",
  configsvr: true,
  members: [
    { _id: 0, host: "192.168.31.135:27019" },
    { _id: 1, host: "192.168.31.109:27019" },
    { _id: 2, host: "192.168.31.165:27019" }
  ]
})
  1. 验证状态
rs.status()

部署 Shard Server 集群

在 mongo1 上部署容器

docker run -d --name shard1_node1 \
  --log-opt max-size=100m --log-opt max-file=3 --restart=unless-stopped \
  -v shard1_node1_data:/data/db \
  -p 27018:27018 \
  mongodb/mongodb-community-server:5.0.27-ubuntu2004 \
  mongod --shardsvr --replSet shard1ReplSet --bind_ip_all
  
docker run -d --name shard2_node1 \
  --log-opt max-size=100m --log-opt max-file=3 --restart=unless-stopped \
  -v shard2_node1_data:/data/db \
  -p 27017:27018 \
  mongodb/mongodb-community-server:5.0.27-ubuntu2004 \
  mongod --shardsvr --replSet shard2ReplSet --bind_ip_all

docker run -d --name shard3_node1 \
  --log-opt max-size=100m --log-opt max-file=3 --restart=unless-stopped \
  -v shard3_node1_data:/data/db \
  -p 27016:27018 \
  mongodb/mongodb-community-server:5.0.27-ubuntu2004 \
  mongod --shardsvr --replSet shard3ReplSet --bind_ip_all

在 mongo2 上部署容器

docker run -d --name shard1_node2 \
  --log-opt max-size=100m --log-opt max-file=3 --restart=unless-stopped \
  -v shard1_node2_data:/data/db \
  -p 27018:27018 \
  mongodb/mongodb-community-server:5.0.27-ubuntu2004 \
  mongod --shardsvr --replSet shard1ReplSet --bind_ip_all

docker run -d --name shard2_node2 \
  --log-opt max-size=100m --log-opt max-file=3 --restart=unless-stopped \
  -v shard2_node2_data:/data/db \
  -p 27017:27018 \
  mongodb/mongodb-community-server:5.0.27-ubuntu2004 \
  mongod --shardsvr --replSet shard2ReplSet --bind_ip_all

docker run -d --name shard3_node2 \
  --log-opt max-size=100m --log-opt max-file=3 --restart=unless-stopped \
  -v shard3_node2_data:/data/db \
  -p 27016:27018 \
  mongodb/mongodb-community-server:5.0.27-ubuntu2004 \
  mongod --shardsvr --replSet shard3ReplSet --bind_ip_all

在 mongo3 上部署容器

docker run -d --name shard1_node3 \
  --log-opt max-size=100m --log-opt max-file=3 --restart=unless-stopped \
  -v shard1_node3_data:/data/db \
  -p 27018:27018 \
  mongodb/mongodb-community-server:5.0.27-ubuntu2004 \
  mongod --shardsvr --replSet shard1ReplSet --bind_ip_all

docker run -d --name shard2_node3 \
  --log-opt max-size=100m --log-opt max-file=3 --restart=unless-stopped \
  -v shard2_node3_data:/data/db \
  -p 27017:27018 \
  mongodb/mongodb-community-server:5.0.27-ubuntu2004 \
  mongod --shardsvr --replSet shard2ReplSet --bind_ip_all

docker run -d --name shard3_node3 \
  --log-opt max-size=100m --log-opt max-file=3 --restart=unless-stopped \
  -v shard3_node3_data:/data/db \
  -p 27016:27018 \
  mongodb/mongodb-community-server:5.0.27-ubuntu2004 \
  mongod --shardsvr --replSet shard3ReplSet --bind_ip_all

将 shard1 shard2 shard3 容器初始化并验证

docker exec -it shard1_node1 mongo --port 27018
rs.initiate({
  _id: "shard1ReplSet",
  members: [
    { _id: 0, host: "192.168.31.135:27018" },
    { _id: 1, host: "192.168.31.109:27018" },
    { _id: 2, host: "192.168.31.165:27018" }
  ]
})

rs.status()
docker exec -it shard2_node1 mongo --port 27018
rs.initiate({
  _id: "shard2ReplSet",
  members: [
    { _id: 0, host: "192.168.31.135:27017" },
    { _id: 1, host: "192.168.31.109:27017" },
    { _id: 2, host: "192.168.31.165:27017" }
  ]
})

rs.status()
docker exec -it shard3_node1 mongo --port 27018
rs.initiate({
  _id: "shard3ReplSet",
  members: [
    { _id: 0, host: "192.168.31.135:27016" },
    { _id: 1, host: "192.168.31.109:27016" },
    { _id: 2, host: "192.168.31.165:27016" }
  ]
})

rs.status()

部署 Mongos 路由器

docker run -d --name mongos -p 27015:27017 \
  --log-opt max-size=100m --log-opt max-file=3 --restart=unless-stopped \
  mongodb/mongodb-community-server:5.0.27-ubuntu2004 mongos --bind_ip_all --configdb configReplSet/192.168.31.135:27019,192.168.31.109:27019,192.168.31.165:27019

关联 Shard 集群至 Config 集群

docker exec -it mongos mongo
sh.addShard("shard1ReplSet/192.168.31.135:27018,192.168.31.109:27018,192.168.31.165:27018")
sh.addShard("shard2ReplSet/192.168.31.135:27017,192.168.31.109:27017,192.168.31.165:27017")
sh.addShard("shard3ReplSet/192.168.31.135:27016,192.168.31.109:27016,192.168.31.165:27016")

数据库手动指定分片

使能分片数据库

sh.enableSharding("metadata")

指定分片集合

# sh.shardCollection("mydatabase.mycollection", { myfield: 1 })
sh.shardCollection("metadata.file-10-million", { key: 1 })

查看分片分布

# db.collection.getShardDistribution()
db['file-10-million'].getShardDistribution()

相关推荐

  1. 多节点 docker 部署 elastic

    2024-07-15 06:40:02       48 阅读
  2. Docker compose部署redis哨兵

    2024-07-15 06:40:02       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 06:40:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 06:40:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 06:40:02       58 阅读
  4. Python语言-面向对象

    2024-07-15 06:40:02       69 阅读

热门阅读

  1. 数据结构第27节 优先队列

    2024-07-15 06:40:02       21 阅读
  2. 速盾:cdn技术是什么意思?

    2024-07-15 06:40:02       23 阅读
  3. 使用adb连接安卓手机

    2024-07-15 06:40:02       23 阅读
  4. Android人脸解锁源码解析

    2024-07-15 06:40:02       17 阅读
  5. 速盾:高防cdn和普通cdn的区别?

    2024-07-15 06:40:02       29 阅读
  6. Tick数据的清洗和1分钟K线合成

    2024-07-15 06:40:02       18 阅读
  7. App测试自动化工具UIAutomator2的使用

    2024-07-15 06:40:02       23 阅读
  8. React@16.x(57)Redux@4.x(6)- 实现 bindActionCreators

    2024-07-15 06:40:02       28 阅读
  9. PyTorch构建一个肺部CT图像分类模型来分辨肺癌

    2024-07-15 06:40:02       19 阅读
  10. Python学生信息管理系统的设计与实现

    2024-07-15 06:40:02       28 阅读
  11. SQL优化

    SQL优化

    2024-07-15 06:40:02      30 阅读
  12. RocketMQ

    RocketMQ

    2024-07-15 06:40:02      24 阅读