使用 Docker 部署 MongoDB 分片
创建配置服务复制集
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 分片的更多相关文章
- (八) Docker 部署 mongodb
参考并感谢 官方文档 https://hub.docker.com/_/mongo 下载mongo镜像(不带tag标签则表示下载latest版本) docker pull mongo 启动 mongo ...
- docker 部署 mongodb 并且开启远程连接
mongodb 使用 docker 部署 mongodb 拉取镜像 docker pull mongo 可以查看镜像是否下载成功 docker images | grep mongo 应该会有如下的显 ...
- 使用Docker 部署MongoDB
使用 Docker 部署 MongoDB 查看官网安装教程后感觉直接使用包管理器安装mongo比较复杂,本文主要介绍使用docker安装部署mongo的方法,并对基本配置项进行自定义.保姆式全程指导. ...
- [原创]在Docker上部署mongodb分片副本集群。
一.安装docker. 请参考:http://www.cnblogs.com/hehexiaoxia/p/6150584.html 二.编写dockerfile. 1.在根目录下创建mongod的do ...
- 使用 Docker 部署 MongoDB 复制集
启用三个 mongod 建立复制集. MongoDB 版本选择目前最新的稳定版 3.6.2-jessie. docker run --name mongo0 -d mongo:3.6.2-jessie ...
- CentOS7+Docker+MangoDB下部署简单的MongoDB分片集群
简单的在Docker上快速部署MongoDB分片集群 前言 文中使用的环境如下 OS:CentOS Linux release 7.5.1804 (Core) Docker:Docker versio ...
- MongoDB分片群集的部署(用心描述,详细易懂)!!
概念: MongoDB分片是使用多个服务器存储数据的方法,以支持巨大的数据存储和对数据进行存储 优势: 1.减少了每个分片需啊哟处理的请求数,群集可以提高自己的存储容量和吞吐量 2.减少了每个分片存储 ...
- Mongodb分片集群技术+用户验证
随着数据量持续增多,后续迟早会出现一台机器硬件瓶颈问题的.而mongodb主打的就是海量数据架构,“分片”就用这个来解决这个问题. 从图中可以看到有四个组件:mongos.config server. ...
- MongoDB分片集群原理、搭建及测试详解
随着技术的发展,目前数据库系统对于海量数据的存储和高效访问海量数据要求越来越高,MongoDB分片机制就是为了解决海量数据的存储和高效海量数据访问而生. MongoDB分片集群由mongos路由进程( ...
随机推荐
- Joomla详细安装图文教程
Joomla 详细安装图文教程 第一步,配置网站信息 配置数据库:这里我选择MySQLi,可以根据自己的选择 安装-- 安装完成!
- 【Python3 爬虫】07_正则表达式(原子)
原子是正则表达式的最基本的组成单位,而且在每个模式中最少包含一个原子.原子是由所有那些未显示指定为元字符的打印和非打印字符组成. 原子分类 1.普通字符作为原子 普通字符是编写正则表达式时最常见的原子 ...
- Array,Vector,List,Deque的区别与联系【转+改】
数组 内存连续分配,长度大小固定,内置的最基础的数据结构之一.支持随机访问和随机存储. 该类型数据所占内存空间最小. Vector 是C++ STL中的一个容器.和数组类似,它拥有一段连续的内存空间, ...
- win10下iis绑定局域网ip无效的解决方案
win7不会出现此问题 win10会 win8未测试 问题描述 <binding protocol="http" bindingInformation="*:808 ...
- javascript 字符串对象新增 replaceAll 方法
String.prototype.replaceAll = function(reallyDo, replaceWith, ignoreCase) { if(! RegExp.prototype.is ...
- Jquery判断其中任意一个文本框的值是否被修改
<!doctype html><html lang="en"> <head> <meta charset="UTF-8&quo ...
- C#中怎样将List<自己定义>转为Json格式 及相关函数-DataContractJsonSerializer
对C#和.net使用List<自己定义>和Json格式相互转化的方法进行总结 关于JSON的入门介绍见http://www.json.org/ ,或者百度,这里不赘述,只是通过以下的样例会 ...
- 美团HD(8)-利用NSPredicate匹配搜索结果
监听文本框改变: DJSelectCityViewController.m /** 当searchBar内的文字发生改变时调用此方法 */ - (void)searchBar:(UISearchBar ...
- swoole-1.7.18 版本已发布,支持 PHP7
swoole-1.7.18 版本已发布,支持 PHP7 matyhtf 发布于: 2015年07月23日 (22评) 分享到: 收藏 +16 3月19日,深圳源创会火热报名中,go>> ...
- cmpp 短信平台
背景: 物联网一般是在设备上安装sim卡,通过2g网络来进行设备与云端系统的交互,网络都是通过移动的基站来进行网络传输的,所以一旦移动的基站有变动,比如流量降级,光缆割接,其他故障登 都会导致2g络的 ...