MongoDB ShardingCluster
sharding集群中的组件:
1、mongos:router,可以通过keepalived实现高可用。
2、config server:元数据服务器,这里要借助zookeeper存放配置信息。
3、shard server:数据节点,即mongod实例,生产环境中这里的每一个shard都是一个复制集。

基于范围切片:range
基于列表切片:list
基于hash切片:hash
生产环境中,mongos需要两个节点实现高可用。config server需要三个节点,借助zookeeper实现高可用。
https://docs.mongodb.com/v2.6/core/sharded-cluster-architectures-production/

这里使用4个节点来演示,一个mongos,一个config server,两个shard节点。
https://docs.mongodb.com/v2.6/core/sharded-cluster-architectures-test/

准备四台机器,系统版本CentOS7.3。
`--configsvr`:declare this is a config db of a cluster; default port 27019; default dir /data/configdb. 声明该节点是一个configdb,默认监听27019端口,默认数据目录为/data/configdb。
`--shardsvr`:declare this is a shard db of a cluster; default port 27018. 声明该节点是一个sharddb,默认监听27018端口。
1、修改hosts
192.168.135.170 node1
192.168.135.171 node2
192.168.135.169 node3
192.168.135.172 node4
2、校对时间
#yum install -y ntp ntpdate && ntpdate pool.ntp.org
3、给各节点安装mongo
#yum install -y mongodb mongodb-server
4、这里把node2作为config server,修改配置文件,启动服务
#vim /etc/mongod.conf
#bind_ip = 127.0.0.1
configsvr = true
#systemctl start mongod
#netstat -tnlp
5、这里把node1作为mongos,mongos服务与mongod服务一样也是有mongodb-server包提供,而且同样也监听27017端口。修改配置文件,启动服务
#vim /etc/mongos.conf
#bind_ip = 127.0.0.1
configdb = 192.168.135.171:27019
#chunkSize = 64 指定chunk大小,默认为64mb。
#systemctl start mongos
#netstat -tnlp
#mongo
> help
> show dbs
admin (empty)
config 0.016GB
> sh.status()
--- Sharding Status ---
sharding version: {
"_id" : 1,
"version" : 4,
"minCompatibleVersion" : 4,
"currentVersion" : 5,
"clusterId" : ObjectId("58c3e3d46f8981dee1679406")
}
shards:
databases:
{ "_id" : "admin", "partitioned" : false, "primary" : "config" }
6、修改两个shard节点的配置文件,并启动服务
#vim /etc/mongod.conf
#bind_ip = 127.0.0.1
#systemctl start mongod
7、在mongos server上添加两个shard节点
> sh.help()
sh.addShard( host ):server:port OR setname/server:port. 添加shard节点。
sh.enableSharding(dbname):enables sharding on the database dbname. 在指定的数据库上启用shard。
sh.shardCollection(fullName,key,unique):shards the collection. 对指定的collection进行分片。
sh.getBalancerState():return true if enabled. 查看balancer是否启用。
sh.isBalancerRunning():return true if the balancer has work in progress on any mongos. 查看balancer是否在运行。
sh.setBalancerState( <bool on or not> ):turns the balancer on or off true=on, false=off. 设置是否启用balancer。
#mongo
> sh.addShard("node3:27017") 这里必须要用引号引起来,要不然会报语法错误
{ "shardAdded" : "shard0000", "ok" : 1 }
> sh.addShard("node4:27017")
{ "shardAdded" : "shard0001", "ok" : 1 }
> sh.status() 这时能看到两个shard
--- Sharding Status ---
sharding version: {
"_id" : 1,
"version" : 4,
"minCompatibleVersion" : 4,
"currentVersion" : 5,
"clusterId" : ObjectId("58c3e3d46f8981dee1679406")
}
shards:
{ "_id" : "shard0000", "host" : "node3:27017" }
{ "_id" : "shard0001", "host" : "node4:27017" }
databases:
{ "_id" : "admin", "partitioned" : false, "primary" : "config" }
8、在指定的库上启用分片。数据库无需事先存在,可以直接启用分片,再创建数据库。
> use testdb
switched to db testdb
> for (i=1;i<=10000;i++) db.students.insert({name: "student"+i, age: (i%120), address: "#85 Wenhua Road, Zhengzhou, China"})
WriteResult({ "nInserted" : 1 })
> sh.enableSharding("testdb") 在testdb库上启用分片,注意要用引号
{ "ok" : 1 }
> sh.status()
--- Sharding Status ---
sharding version: {
"_id" : 1,
"version" : 4,
"minCompatibleVersion" : 4,
"currentVersion" : 5,
"clusterId" : ObjectId("58c3e3d46f8981dee1679406")
}
shards:
{ "_id" : "shard0000", "host" : "node3:27017" }
{ "_id" : "shard0001", "host" : "node4:27017" }
databases:
{ "_id" : "admin", "partitioned" : false, "primary" : "config" }
{ "_id" : "testdb", "partitioned" : true, "primary" : "shard0000" }
不做分片的collection都保存在primary shard上。
9、对指定的collection进行分片,这里基于年龄分片
> sh.shardCollection("testdb.sudents",{"age": 1})
{ "collectionsharded" : "testdb.sudents", "ok" : 1 }
> sh.status()
--- Sharding Status ---
sharding version: {
"_id" : 1,
"version" : 4,
"minCompatibleVersion" : 4,
"currentVersion" : 5,
"clusterId" : ObjectId("58c3e3d46f8981dee1679406")
}
shards:
{ "_id" : "shard0000", "host" : "node3:27017" }
{ "_id" : "shard0001", "host" : "node4:27017" }
databases:
{ "_id" : "admin", "partitioned" : false, "primary" : "config" }
{ "_id" : "testdb", "partitioned" : true, "primary" : "shard0000" }
testdb.sudents
shard key: { "age" : 1 }
chunks:
shard0000 1
{ "age" : { "$minKey" : 1 } } -->> { "age" : { "$maxKey" : 1 } } on : shard0000 Timestamp(1, 0)
10、查看balancer状态
> sh.getBalancerState()
true
> sh.isBalancerRunning()
false
MongoDB ShardingCluster的更多相关文章
- 【翻译】MongoDB指南/聚合——聚合管道
[原文地址]https://docs.mongodb.com/manual/ 聚合 聚合操作处理数据记录并返回计算后的结果.聚合操作将多个文档分组,并能对已分组的数据执行一系列操作而返回单一结果.Mo ...
- 【翻译】MongoDB指南/CRUD操作(四)
[原文地址]https://docs.mongodb.com/manual/ CRUD操作(四) 1 查询方案(Query Plans) MongoDB 查询优化程序处理查询并且针对给定可利用的索引选 ...
- 【翻译】MongoDB指南/CRUD操作(三)
[原文地址]https://docs.mongodb.com/manual/ CRUD操作(三) 主要内容: 原子性和事务(Atomicity and Transactions),读隔离.一致性和新近 ...
- 【翻译】MongoDB指南/CRUD操作(二)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...
- 【翻译】MongoDB指南/CRUD操作(一)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档. CRUD操作包括创建.读取.更新和删 ...
- CRL快速开发框架系列教程十二(MongoDB支持)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- MongoDB系列(二):C#应用
前言 上一篇文章<MongoDB系列(一):简介及安装>已经介绍了MongoDB以及其在window环境下的安装,这篇文章主要讲讲如何用C#来与MongoDB进行通讯.再次强调一下,我使用 ...
- MongoDB系列(一):简介及安装
什么是MongoDB MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为应用提供可扩展的高 ...
- [原]分享一下我和MongoDB与Redis那些事
缘起:来自于我在近期一个项目上遇到的问题,在Segmentfault上发表了提问 知识背景: 对不是很熟悉MongoDB和Redis的同学做一下介绍. 1.MongoDB数组查询:MongoDB自带L ...
随机推荐
- 2018NOIP爆0记第二弹之day1
出门进了电梯 白底黑字的告示上只有一句话 善待你一生. 湖上的白天鹅和白鹭远远厮混成一点,抱着玻璃杯里装着的小菊花,又慢悠悠溜达去了实验楼. t1 原本写过原题,结果考场上死去活来也只搞出了个nlog ...
- React Native iOS 离线包
平时使用React Native 时候, js代码和图片资源运行在一个Debug Server上(需要cd 到RN目录,然后终端执行 npm start 命令开启本地服务 ).每次更新代码之后只需要使 ...
- 作业 20181127-3 互评Beta版本
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2448 组名:可以低头,但没必要 组长:付佳 组员:张俊余 李文涛 孙赛佳 ...
- python下graphviz安装
参考链接:https://blog.csdn.net/u013250416/article/details/72790754 1.安装Graphviz 在graphviz的官网(网址:http://w ...
- 作业45//Calculator::3.0
计算器 github 我的天我到底要写什么 一,2.0及2.6的改动 做了计算部分 加入了判断输入是否合法 合法的定义是算式符合`数字+运算符+数字+运算符+数字`的格式 其中`"-&quo ...
- AttributeError: module ‘tensorflow.python.ops.nn’ has no attribute ‘leaky_relu’
#AttributeError: module 'tensorflow.python.ops.nn' has no attribute 'leaky_relu' 的原因主要是版本的问题 解决方法是更新 ...
- The user survey(用户调查)
在周末,我们找了一些人来进行了一个调查,鉴于选择困难,我们只找到了几个真正的小学生,没有找到家长,其余那些都是找大学生来做调查的,我们和他们说,让他们把自己的立场看成是小学生或家长.下面是我们整理出来 ...
- Windows下编译TensorFlow1.3 C++ library及创建一个简单的TensorFlow C++程序
由于最近比较忙,一直到假期才有空,因此将自己学到的知识进行分享.如果有不对的地方,请指出,谢谢!目前深度学习越来越火,学习.使用tensorflow的相关工作者也越来越多.最近在研究tensorflo ...
- 交换机、linux光衰查询
RX收光,TX发光 一.交换机 命令: display interface transceiver brief 结果: ...... HW6851 10GE1/0/15 transceiver dia ...
- Robot Framework 教程 (2) - 页面元素定位
上一篇文章中,简单模拟了一个baidu搜索并截图的过程,在搜索过程中,我们需要对搜索框.搜索按钮进行定位.本篇文章主要介绍一下具体的定位方法. 我们的脚本如下: *** Settings *** Li ...