创建配置服务复制集

docker run --name configsvr0 -d mongo:3.6.2-jessie --configsvr --replSet "rs_configsvr"  --bind_ip_all
docker run --name configsvr1 -d mongo:3.6.2-jessie --configsvr --replSet "rs_configsvr" --bind_ip_all
docker run --name configsvr2 -d mongo:3.6.2-jessie --configsvr --replSet "rs_configsvr" --bind_ip_all
$ docker ps
IMAGE COMMAND CREATED STATUS PORTS NAMES
mongo:3.6.2-jessie "docker-entrypoint..." 8 seconds ago Up 6 seconds 27019/tcp configsvr2
mongo:3.6.2-jessie "docker-entrypoint..." 9 seconds ago Up 7 seconds 27019/tcp configsvr1
mongo:3.6.2-jessie "docker-entrypoint..." 19 seconds ago Up 16 seconds 27019/tcp configsvr0

通过 docker inspect 找到三个配置服务实例的 IP。

比如 docker inspect configsvr0 | grep IPAddress,

又由于--configsvr 的默认端口为 27019。所以配置服务的地址为

  • configsvr0: 172.17.0.2:27019
  • configsvr1: 172.17.0.3:27019
  • configsvr2: 172.17.0.4:27019

初始化

docker exec -it configsvr0 bash

mongo --host 172.17.0.2 --port 27019

rs.initiate(
{
_id: "rs_configsvr",
configsvr: true,
members: [
{ _id : 0, host : "172.17.0.2:27019" },
{ _id : 1, host : "172.17.0.3:27019" },
{ _id : 2, host : "172.17.0.4:27019" }
]
}
)

连接字符串为

mongodb://172.17.0.2:27019,172.17.0.3:27019,172.17.0.4:27019/test?replicaSet=rs_configsvr

创建分片复制集

与上面同理,不再赘述,直接上命令行。

docker run --name shardsvr00 -d mongo:3.6.2-jessie --shardsvr --replSet "rs_shardsvr0"  --bind_ip_all
docker run --name shardsvr01 -d mongo:3.6.2-jessie --shardsvr --replSet "rs_shardsvr0" --bind_ip_all
docker run --name shardsvr02 -d mongo:3.6.2-jessie --shardsvr --replSet "rs_shardsvr0" --bind_ip_all
docker run --name shardsvr10 -d mongo:3.6.2-jessie --shardsvr --replSet "rs_shardsvr1" --bind_ip_all
docker run --name shardsvr11 -d mongo:3.6.2-jessie --shardsvr --replSet "rs_shardsvr1" --bind_ip_all
docker run --name shardsvr12 -d mongo:3.6.2-jessie --shardsvr --replSet "rs_shardsvr1" --bind_ip_all

通过 docker inspect 找到对应实例的 IP。

比如 docker inspect shardsvr00 | grep IPAddress,

又由于--shardsvr 的默认端口为 27018。所以地址为

  • shardsvr00: 172.17.0.5:27018
  • shardsvr01: 172.17.0.6:27018
  • shardsvr02: 172.17.0.7:27018

由于后来才增加的 shardsvr1,所以 IP 末尾是 9 而不是 8。

  • shardsvr10: 172.17.0.9:27018
  • shardsvr11: 172.17.0.10:27018
  • shardsvr12: 172.17.0.11:27018
$ docker exec -it shardsvr00 bash

mongo --host 172.17.0.5 --port 27018

> rs.initiate(
{
_id : "rs_shardsvr",
members: [
{ _id : 0, host : "172.17.0.5:27018" },
{ _id : 1, host : "172.17.0.6:27018" },
{ _id : 2, host : "172.17.0.7:27018" }
]
}
) # 输出 { "ok" : 1 }
mongo --host 172.17.0.9 --port 27018

> rs.initiate(
{
_id : "rs_shardsvr1",
members: [
{ _id : 0, host : "172.17.0.9:27018" },
{ _id : 1, host : "172.17.0.10:27018" },
{ _id : 2, host : "172.17.0.11:27018" }
]
}
)

连接字符串为

mongodb://172.17.0.5:27018,172.17.0.6:27018,172.17.0.7:27018/test?replicaSet=rs_shardsvr0

mongodb://172.17.0.9:27018,172.17.0.10:27018,172.17.0.11:27018/test?replicaSet=rs_shardsvr1

连接 mongos 到分片集群

由于镜像的默认入口是 mongod,所以要通过 --entrypoint "mongos" 将其改为 mongos:

docker run --name mongos0 -d --entrypoint "mongos" mongo:3.6.2-jessie --configdb rs_configsvr/172.17.0.2:27019,172.17.0.3:27019,172.17.0.4:27019 --bind_ip_all

地址为 172.17.0.8:27017

增加分片到集群

$ docker exec -it mongos bash

$ mongo --host 172.17.0.8 --port 27017

> sh.addShard("rs_shardsvr0/172.17.0.5:27018,172.17.0.6:27018,172.17.0.7:27018")
{
"shardAdded" : "rs_shardsvr",
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1518405986, 8),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1518405986, 8)
} > sh.addShard("rs_shardsvr1/172.17.0.9:27018,172.17.0.10:27018,172.17.0.11:27018")

数据库启用分片

> sh.enableSharding("test")

{
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1518406101, 8),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1518406101, 8)
}

分片 Collection

对 test.order 的 _id 字段进行哈希分片:

> sh.shardCollection("test.order", {"_id": "hashed" })

{
"collectionsharded" : "test.order",
"collectionUUID" : UUID("12b22b5d-93d7-4ccf-b989-2a0e550e750f"),
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1518406317, 12),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1518406317, 6)
}

插入数据

use test

for (i = 1; i <= 1000; i=i+1){
db.order.insert({'price': 1})
}

查看数据分布

mongos> db.order.find().count()
1000 rs_shardsvr0:PRIMARY> db.order.find().count()
526 rs_shardsvr1:PRIMARY> db.order.find().count()
474

使用 Docker 部署 MongoDB 分片的更多相关文章

  1. (八) Docker 部署 mongodb

    参考并感谢 官方文档 https://hub.docker.com/_/mongo 下载mongo镜像(不带tag标签则表示下载latest版本) docker pull mongo 启动 mongo ...

  2. docker 部署 mongodb 并且开启远程连接

    mongodb 使用 docker 部署 mongodb 拉取镜像 docker pull mongo 可以查看镜像是否下载成功 docker images | grep mongo 应该会有如下的显 ...

  3. 使用Docker 部署MongoDB

    使用 Docker 部署 MongoDB 查看官网安装教程后感觉直接使用包管理器安装mongo比较复杂,本文主要介绍使用docker安装部署mongo的方法,并对基本配置项进行自定义.保姆式全程指导. ...

  4. [原创]在Docker上部署mongodb分片副本集群。

    一.安装docker. 请参考:http://www.cnblogs.com/hehexiaoxia/p/6150584.html 二.编写dockerfile. 1.在根目录下创建mongod的do ...

  5. 使用 Docker 部署 MongoDB 复制集

    启用三个 mongod 建立复制集. MongoDB 版本选择目前最新的稳定版 3.6.2-jessie. docker run --name mongo0 -d mongo:3.6.2-jessie ...

  6. CentOS7+Docker+MangoDB下部署简单的MongoDB分片集群

    简单的在Docker上快速部署MongoDB分片集群 前言 文中使用的环境如下 OS:CentOS Linux release 7.5.1804 (Core) Docker:Docker versio ...

  7. MongoDB分片群集的部署(用心描述,详细易懂)!!

    概念: MongoDB分片是使用多个服务器存储数据的方法,以支持巨大的数据存储和对数据进行存储 优势: 1.减少了每个分片需啊哟处理的请求数,群集可以提高自己的存储容量和吞吐量 2.减少了每个分片存储 ...

  8. Mongodb分片集群技术+用户验证

    随着数据量持续增多,后续迟早会出现一台机器硬件瓶颈问题的.而mongodb主打的就是海量数据架构,“分片”就用这个来解决这个问题. 从图中可以看到有四个组件:mongos.config server. ...

  9. MongoDB分片集群原理、搭建及测试详解

    随着技术的发展,目前数据库系统对于海量数据的存储和高效访问海量数据要求越来越高,MongoDB分片机制就是为了解决海量数据的存储和高效海量数据访问而生. MongoDB分片集群由mongos路由进程( ...

随机推荐

  1. 长sql 语句拼接

    长sql 语句拼接

  2. 一站式学习Wireshark(转载)

    一站式学习Wireshark(一):Wireshark基本用法 2014/06/10 · IT技术 · 4 评论 · WireShark 分享到: 115 与<YII框架>不得不说的故事— ...

  3. .bat批处理基础

    批处理(Batch),也称为批处理脚本.顾名思义,批处理就是对某对象进行批量的处理,通常被认为是一种简化的脚本语言,它应用于DOS和Windows系统中.批处理文件的扩展名为bat .目前比较常见的批 ...

  4. SQL联查语句加上order排序之后速度超级慢

    项目中使用到了分页查询,形式如下 select * from ( select row_number() over (order by a.id0) as seq,a.* from PMS_T_D_S ...

  5. Atitit避免出现空指针异常解决方案

    Atitit避免出现空指针异常解决方案 1. Null的问题1 2. 强制区分一般引用vs 可空引用 vs 强制引用,或者说非空引用2 3. ?运算符(问号运算符) !感叹号运算符避免出现空指针异常, ...

  6. 在modelsim中加入quartus仿真库

    找到modelsim安装目录下的modelsim.ini文件. 将modelsim.ini的只读属性去掉. 打开quartus软件.选择Launch Simulation Library Compil ...

  7. 141. Linked List Cycle【easy】

    141. Linked List Cycle[easy] Given a linked list, determine if it has a cycle in it. Follow up:Can y ...

  8. 从零开始学习SSH框架笔记之四 几个关键配置文件备忘(模板)

    不多说,直接上代码.关于注释我尽量写详细点. 1.web.xml <?xml version="1.0" encoding="UTF-8"?> &l ...

  9. springmvc中action跳转

    return "redirect:/activity/listactivity.htm";

  10. Yarn源码分析之MRAppMaster上MapReduce作业处理总流程(一)

    我们知道,如果想要在Yarn上运行MapReduce作业,仅需实现一个ApplicationMaster组件即可,而MRAppMaster正是MapReduce在Yarn上ApplicationMas ...