当前位置: 首页 > news >正文

MongoDB Shard 集群 Docker 部署

MongoDB Shard Docker 部署

部署环境

主机地址主机配置主机系统
Mongodb1/192.168.31.1352CPU 4GBDebian12
Mongodb2/192.168.31.1092CPU 4GBDebian12
Mongodb3/192.168.31.1652CPU 4GBDebian12

镜像版本

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_alldocker 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_alldocker 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_alldocker 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_alldocker 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_alldocker 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_alldocker 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()
http://www.lryc.cn/news/400409.html

相关文章:

  • MacOS 开发 — Packages 程序 macOS新版本 演示选项卡无法显示
  • Hive的分区表分桶表
  • PostgreSQL17索引优化之支持并行创建BRIN索引
  • 在Vue中,子组件向父组件传递数据
  • 数据结构(顺序表)
  • MySQL之基本查询(上)-表的增删查改
  • RocketMQ源码学习笔记:Producer发送消息流程
  • kotlin flow collect collectLatest 区别
  • ELK集群搭建
  • zookeeper+kafka消息队列集群部署
  • LLM_入门指南(零基础搭建大模型)
  • Element Plus 与 Vue 3:构建现代化 Web 应用的完美搭档
  • 线程间通信与变量修改感知:几种常用方法
  • 前后端通信 —— HTTP/HTTPS
  • 人工智能 (AI) 应用:一个高精度ASD 诊断和照护支持系统
  • C# 1.方法
  • 【C++进阶学习】第七弹——AVL树——树形结构存储数据的经典模块
  • px,em,rem之间的关系换算
  • HTTP——POST请求详情
  • 外包干了1个月,技术明显退步。。。
  • LeetCode加油站(贪心算法/暴力,分析其时间和空间复杂度)
  • 5.1 软件工程基础知识-软件工程概述
  • HttpUtil工具
  • 并发编程-锁的分类
  • K8S系列-Kubernetes基本概念及Pod、Deployment、Service的使用
  • 在VSCode上创建Vue项目详细教程
  • Go语言入门之流程控制简述
  • 接口测试框架基于模板自动生成测试用例!
  • C++ STL stable_sort用法
  • YOLO v8进行目标检测的遇到的bug小结