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 Sharding的更多相关文章

  1. MongoDB Sharding分片配置

    Ps:mongod是mongodb实例,mongos被默认为为mongodb sharding的路由实例. 本文使用的mongodb版本为3.2.9,因此参考网址为:https://docs.mong ...

  2. MongoDB Sharding 机制分析

    MongoDB Sharding 机制分析 MongoDB 是一种流行的非关系型数据库.作为一种文档型数据库,除了有无 schema 的灵活的数据结构,支持复杂.丰富的查询功能外,MongoDB 还自 ...

  3. MongoDB Sharding(二) -- 搭建分片集群

    在上一篇文章中,我们基本了解了分片的概念,本文将着手实践,进行分片集群的搭建 首先我们再来了解一下分片集群的架构,分片集群由三部分构成: mongos:查询路由,在客户端程序和分片之间提供接口.本次实 ...

  4. MongoDB Sharding(一) -- 分片的概念

    (一)分片的由来随着系统的业务量越来越大,业务系统往往会出现这样一些特点: 高吞吐量 高并发 超大规模的数据量 高并发的业务可能会耗尽服务器的CPU,高吞吐量.超大规模的数据量也会带来内存.磁盘的压力 ...

  5. MongoDB Sharding、库、collection设计学习汇总

    sharding设计须考虑的几个因素 Sharding Key的选择           在片键的选择上,最好是能够在字段中选择混合型的片键,大范围的递增健.和随机分布的健组合,如按月份递增.按用户名 ...

  6. mongodb sharding配置

    mongodb集群配置 1 Mongo使用sharding集群 mongodb副本集群 mongos1 192.168.20.137 mongos2 192.168.20.138 mongo_conf ...

  7. MongoDB sharding cluster Step by Step

    本篇讲述MongoDB的 Sharding Cluster 的详细步骤,按着做理论上不会有什么错误. 关于说着里边的参数.变量.和设置,没有用到很多,只用到了关键的一些,其他的可以参考MongoDB的 ...

  8. mongodb sharding集群搭建

    创建虚拟机,如果是使用copy的方式安装系统,记得修改机器名,否则所有的机器名称都一样,会造成安装失败 同时关闭掉防火墙,将所有的机器的时间调成一致,master和slave的heartbeat间隔不 ...

  9. Mongodb Sharding 集群配置

    mongodb的sharding集群由以下3个服务组成: Shards  Server: 每个shard由一个或多个mongod进程组成,用于存储数据 Config  Server: 用于存储集群的M ...

随机推荐

  1. iOS 即时通讯 + 仿微信聊天框架 + 源码

    这些你造吗? 即时通讯(IM),在IOS这片江湖里面已经算是一个老者了,我这小旋风也是在很早以前巡山的时候,就知道有即时通讯这个妖怪,以前也多多少少接触过一些,在造APP的时候用过,哎呀,说着说着就感 ...

  2. 使用node-inspector调试nodejs程序<nodejs>

    1.npm install -g node-inspector  // -g 导入安装路径到环境变量 一般是c盘下AppData目录下 2.node-inspector & //启动node- ...

  3. xml类型转换列表显示 SQL查询

    数据库中存在字段类型为xml 的数据, 现举例 xml 字段存储的数据为: <MortgageInfoShipList> <ITEMS> <ITEM> <Sh ...

  4. SpringMVC简版教程、部分功能

    注:本文只用注解来实现 前言 SpringMVC各种流程图流程图(其他的各种流程图) jsp.xml.action彼此之间的关系,都如何使用 spring-mvc.xml如何配置,放在哪里? acti ...

  5. JavaScript中的this关键字的用法和注意点

    JavaScript中的this关键字的用法和注意点 一.this关键字的用法 this一般用于指向对象(绑定对象); 01.在普通函数调用中,其内部的this指向全局对象(window); func ...

  6. 硅谷创业教父Paul Graham:如何获得创业idea

    link:http://kb.cnblogs.com/page/165530/ 英文原文:How to Get Startup Ideas,翻译:Jason Zheng 要想获得创业 idea,请别试 ...

  7. CSS3 3D的总结(初学者易懂)

    CSS3 3D案例的总结 如果要说是3D的基础概念,首先我就来说一说rotateX().rotateY().rotateZ()这几个属性 rotateX():对应的是3D模型中的X轴上的旋转,传入的参 ...

  8. css4激动人心的新特性及浏览器支持度

    CSS3的选择器提供了很多像:nth-child这样有用的选择器,并且得到浏览器支持.CSS的第四代 选择器CSS4选择器),经我们带来了更多有用的选择器. 1.否定伪类:not 否定伪类选择器其实在 ...

  9. 关于adb重启的一些问题

    有时候我们在使用eclipse启动虚拟机进行程序测试的时候会提示,要我们重启adb和eclipse,这个时候,重启adb的方式就是,使用cmd定位到adb所在的文件夹,然后输入指令:adb kill- ...

  10. 第26篇 jQuery 快速学习下

    前面说了下jQuery了,大部分说的都是选择器和过滤器方面的东西,这个写完后,后面就说下剩下的东西了,离目标越来越近了.下面就说说这些东西 事件 传统比较 在js中说了原生js的绑定事件,基本的形式如 ...