docker 配置mongo 分片(mongo版本:6.0.6))

配置(三个配置服务副本集 + 六个分片副本集 + 一个mongos路由服务),如果对性能有较高的要求,可以在配置服务器和副本集中分别添加一个仲裁节点

  • 分片利用到了四个组件:mongos、config server、shard、repl set
  • 说明
  1. 配置服务器(configsvr):主要用于存储分片集群的元数据和配置信息,通常以副本集的形式部署。
  2. 副本集(replSet):主要提供了MongoDB的高可用性、数据冗余和容错能力,以及读取扩展性和负载均衡的功能。
  3. 路由服务器(mongos):它使得客户端可以透明地与整个分片集群进行交互,提供了查询路由、元数据管理、数据迁移和故障转移等功能,从而实现了数据的分布式存储和查询的扩展性。
  4. 分片服务器(shard server):它是MongoDB分片集群中存储和管理数据的节点。它们存储数据、划分数据集、处理查询和参与数据迁移,从而实现数据的分布式存储、负载均衡和扩展性。通过增加分片服务器,可以实现MongoDB系统的水平扩展,提高性能和容量。
  • 拉取镜像
    docker pull mongo
  • 一、运行配置服务容器

  • 指定配置服务器名称 - config-0、config-1、config-2,指定容器内部端口 --port 27017--configsvr 表示该副本集是用于存储配置数据的,指定副本集名称--replSet config
docker run -d --name config-0 -p 27018:27017 mongo mongod --configsvr --replSet config --bind_ip_all --port 27017 
docker run -d --name config-1 -p 27019:27017 mongo mongod --configsvr --replSet config --bind_ip_all --port 27017 
docker run -d --name config-2 -p 27020:27017 mongo mongod --configsvr --replSet config --bind_ip_all --port 27017  
  • 三个容器的地址
    docker inspect config-0
    docker inspect config-1
    docker inspect config-2

  • 本次测试的三个配置服务器地址分别如下:
    config-0 => 172.17.0.7:27017
    config-1 => 172.17.0.8:27017
    config-2 => 172.17.0.9:27017

  • 进入副本集容器
    docker exec -it config-0 bash
    mongosh 可以指定运行的端口(--port 27017)和地址(--host 127.0.0.1

  • 初始化配置服务的副本集

rs.initiate({
  _id:"config",
  configsvr: true, 
  members:[
    {_id:0, host:"172.17.0.7:27017"},
    {_id:1, host:"172.17.0.8:27017"},
    {_id:2, host:"172.17.0.9:27017"},
  ]
})
  • 上述参数剖析
键名 键值 备注
_id config --replSet config,和指定的副本集名称一致
configsvr true 表示该副本集是用于存储配置数据的
members._id 0 申明的 _id必须唯一,它是成员的唯一标识符,用于区分不同的成员,可以是数字、字符串,但是通常是数字
members.host host 需要添加副本集的地址,地址查看方法:docker inspect 容器ID/容器名称
  • 二、创建分片副本集

docker run -d --name shard-0 -p 27021:27018 mongo mongod --shardsvr --replSet shard --bind_ip_all --port 27018 
docker run -d --name shard-1 -p 27022:27018 mongo mongod --shardsvr --replSet shard --bind_ip_all --port 27018 
docker run -d --name shard-2 -p 27023:27018 mongo mongod --shardsvr --replSet shard --bind_ip_all --port 27018  
docker run -d --name shard-3 -p 27024:27018 mongo mongod --shardsvr --replSet shard1 --bind_ip_all --port 27018  
docker run -d --name shard-4 -p 27025:27018 mongo mongod --shardsvr --replSet shard1 --bind_ip_all --port 27018  
docker run -d --name shard-5 -p 27026:27018 mongo mongod --shardsvr --replSet shard1 --bind_ip_all --port 27018 
  • 上述分片集服务器指定端口为:27018
  • 本次测试的六个分片服务器地址分别如下:
mongo-shard-0: 172.17.0.10:27018
mongo-shard-1: 172.17.0.11:27018
mongo-shard-2: 172.17.0.12:27018   
mongo-shard-10: 172.17.0.13:27018
mongo-shard-11: 172.17.0.14:27018
mongo-shard-12: 172.17.0.15:27018   
  • 进入容器,初始化第一组分片副本集
    docker exec -it shard-1 bash
    mongosh --port 27018
  • 初始化分片副本集
rs.initiate({
_id:"shard",
  members:[
    {_id:0, host:"172.17.0.10:27018"},
    {_id:1, host:"172.17.0.11:27018"},
    {_id:2, host:"172.17.0.12:27018"},
  ]
}) 
  • 可以用rs.status()来查看副本集的状态,上一篇文章有详细的记载

  • 退出当前容器或者重新开一个shell窗口,进入容器,初始化第二组分片副本集
    docker exec -it shard-1 bash
    mongosh --port 27018

  • 初始化分片副本集,注意这里的_id:shard1,不是shard

rs.initiate({
_id:"shard1",
  members:[
    {_id:0, host:"172.17.0.13:27018"},
    {_id:1, host:"172.17.0.14:27018"},
    {_id:2, host:"172.17.0.15:27018"},
  ]
}) 
  • 同样也可以用rs.status()来查看副本集的状态

  • 三、创建mongos路由服务,连接mongos到分片集群

docker run -d 
--name mongos
-p 27017:27017 mongo mongos 
--configdb config/172.17.0.7:27017,172.17.0.8:27017,172.17.0.9:27017 
--bind_ip_all 
--port 27017
  • 参数剖析
键名 说明
-d 后台运行容器
--name 设置容器名为:mongos
-p 主机端口 :容器端口,将容器的 27017 端口映射到主机的 27017 端口
--configdb 用于指定分片集群的配置服务器的连接信息,即:服务容器信息
--bind_ip_all 表示服务器可以接受来自任何网络接口的连接请求,即:表示将mongo配置文件中的 bindIp设置成 0.0.0.0
--port 表示指定容器内的端口为27017,即:表示将mongo配置文件中的 port设置成 27017
  • 添加分片集群
  • 进入容器
    docker exec -it mongos bash
  • 进入mongodb
    mongosh
  • 添加分片
sh.addShard("shard/172.17.0.10:27018,172.17.0.11:27018,172.17.0.12:27018")
sh.addShard("shard1/172.17.0.13:27018,172.17.0.14:27018,172.17.0.15:27018")
  • 启用分片
use admin
sh.enableSharding("test")
sh.shardCollection("test.user", {"_id": "hashed"})
  • 两组分片服务器上都有了test集合,配置完成!
    image.png
  • 测试插入数据
    use test
db.user.insertMany([
  { _id: 1, name: "Item 1",num:1, category: "Category A" },
  { _id: 2, name: "Item 2",num:2, category: "Category B" },
  { _id: 3, name: "Item 3",num:3, category: "Category A" },
  { _id: 4, name: "Item 4",num:4, category: "Category B" },
  { _id: 5, name: "Item 5",num:5, category: "Category A" }
])
  • 查看插入数据

  • mongos集群服务器


    image.png
  • 第一组分片服务器


    image.png
  • 第二组分片服务器


    image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容