创建配置服务复制集

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. Android编程之常识 - 混淆

    1,什么是混淆编译 ProGuard是一个免费的java类文件压缩,优化,混淆器.它探测并删除没有使用的类,字段,方法和属性.它删除没有用的说明并使用字节码得到最大优化.它使用无意义的名字来重命名类, ...

  2. Redis 3.2.8 集群模式+Sentinel多Master部署

    环境准备CentOS 7.3redis1 172.18.1.101:7001 masterredis2 172.18.1.102:7002 masterredis3 172.18.1.103:7003 ...

  3. AMQP 协议介绍

    RabbitMQ 是遵从AMQP 协议的, 换句话说, RabbitMQ 就是AMQP 协议的Erlang 的实现(当然RabbitMQ 还支持STOMP2 .MQTT3 等协议) 0 AMQP 的模 ...

  4. C语言 指向结构体变量的指针

    一个指向变量的指针表示的是占内存中起始位置 一个指向结构体的变量的指针表示的是这个结构体变量占内存中的起始位置,同样它也可以指向结构体变量数组 定义结构体变量的指针: //假设已有一个结构体名为Stu ...

  5. atitit.编程语言 类与对象的 扩展机制.doc

    atitit.编程语言 类与对象的 扩展机制.doc 1.1. Java 下一代: 没有继承性的扩展1 1.2. 继承1 1.3. 使用cglib动态为Java类添加方法1 1.4. 工具类 1 1. ...

  6. Windows下免费软件的首选推荐

    PS:以下按装机顺序排列,“|”号后面是备选软件. 启动引导:EasyBCD 虚拟机:VirtualBox Linux:Zorin | Linux Mint(Mate) | Ubuntu 驱动工具:驱 ...

  7. 实战c++中的string系列--std::string与MFC中CString的转换

    搞过MFC的人都知道cstring,给我们提供了非常多便利的方法. CString 是一种非常实用的数据类型. 它们非常大程度上简化了MFC中的很多操作,使得MFC在做字符串操作的时候方便了非常多.无 ...

  8. Java并发编程(七)线程封闭

    当访问共享的可变数据时,通常需要使用同步.一种避免使用同步的方式就是不共享数据. 如果仅在单线程内访问数据,就不需要同步.这种技术被称为线程封闭(Thread Confinement),它是实现线程安 ...

  9. [开源]C#中开源软件大汇总(外国的)

    一.博客类项目 1.SubText 项目介绍:Subtext 是一个个人博客发布平台,详细的介绍请进SubText 项目分类:博客 项目license:BSD License 项目主页:http:// ...

  10. Centos 7 启动错误:XFS_WANT_CORRUPTED_GOTO 修复

    参考源 如果出现以下报错 [sda] Assuming drive cache: write through Internal error xfs XFS_WANT_CORRUPTED_GOTO at ...