【MangoDB分片】配置mongodb分片群集(sharding cluster)
配置mongodb分片群集(sharding cluster)
Sharding cluster介绍
这是一种可以水平扩展的模式,在数据量很大时特给力,实际大规模应用一般会采用这种架构去构建monodb系统。
要构建一个 MongoDB Sharding Cluster,需要三种角色:
Shard Server: mongod 实例,用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个relica set承担,防止主机单点故障
Config Server: mongod 实例,存储了整个 Cluster Metadata,其中包括 chunk 信息。
Route Server: mongos 实例,前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。
Sharding架构图:
本例实际环境架构
本例架构示例图:
- 分别在3台机器运行一个mongod实例(称为mongod shard11,mongod shard12,mongod shard13)组织replica set1,作为cluster的shard1
- 分别在3台机器运行一个mongod实例(称为mongod shard21,mongod shard22,mongod shard23)组织replica set2,作为cluster的shard2
- 每台机器运行一个mongod实例,作为3个config server
- 每台机器运行一个mongs进程,用于客户端连接
主机 | IP | 端口信息 |
Server1 | 10.1.1.1 | mongod shard11:27017 mongod shard12:27018 mongod config1:20000 mongs1:30000 |
Server2 | 10.1.1.2 | mongod shard12:27017 mongod shard22:27018 mongod config2:20000 mongs2:30000 |
Server3 | 10.1.1.3 | mongod shard13:27017 mongod shard23:27018 mongod config3:20000 mongs3:30000 |
软件准备
软件准备
1. 创建用户
groupadd -g 20001 mongodb
useradd -u 20001 -g mongodb mongodb
passwd mongodb
2. 安装monodb软件
su – mongodb
tar zxvf mongodb-linux-x86_64-1.6.2.tar
安装好后,目录结构如下:
$ tree mongodb-linux-x86_64-1.6.2
mongodb-linux-x86_64-1.6.2
|– GNU-AGPL-3.0
|– README
|– THIRD-PARTY-NOTICES
`– bin
|– bsondump
|– mongo
|– mongod
|– mongodump
|– mongoexport
|– mongofiles
|– mongoimport
|– mongorestore
|– mongos
|– mongosniff
`– mongostat
1 directory, 14 files
3. 创建数据目录
根据本例sharding架构图所示,在各台sever上创建shard数据文件目录
Server1:
su – monodb
cd /home/monodb
mkdir -p data/shard11
mkdir -p data/shard21
Server2:
su – monodb
cd /home/monodb
mkdir -p data/shard11
mkdir -p data/shard22
Server3:
su – monodb
cd /home/monodb
mkdir -p data/shard13
mkdir -p data/shard23
配置relica sets
1. 配置shard1所用到的replica sets:
Server1:
cd /home/mongodb/mongodb-linux-x86_64-1.6.2/bin
./mongod
–shardsvr –replSet shard1 –port 27017 –dbpath
/home/mongodb/data/shard11 –oplogSize 100 –logpath
/home/mongodb/data/shard11.log –logappend –fork
Server2:
cd /home/mongodb/mongodb-linux-x86_64-1.6.2/bin
./mongod
–shardsvr –replSet shard1 –port 27017 –dbpath
/home/mongodb/data/shard12 –oplogSize 100 –logpath
/home/mongodb/data/shard12.log –logappend –fork
Server3:
cd /home/mongodb/mongodb-linux-x86_64-1.6.2/bin
./mongod
–shardsvr –replSet shard1 –port 27017 –dbpath
/home/mongodb/data/shard13 –oplogSize 100 –logpath
/home/mongodb/data/shard13.log –logappend –fork
初始化replica set
用mongo连接其中一个mongod,执行:
> config = {_id: ‘shard1′, members: [
{_id: 0, host: '10.1.1.1:27017'},
{_id: 1, host: '10.1.1.2:27017'},
{_id: 2, host: '10.1.1.3:27017'}]
}
> rs.initiate(config);
同样方法,配置shard2用到的replica sets:
server1:
cd /home/mongodb/mongodb-linux-x86_64-1.6.2/bin
./mongod
–shardsvr –replSet shard2 –port 27018 –dbpath
/home/mongodb/data/shard21 –oplogSize 100 –logpath
/home/mongodb/data/shard21.log –logappend –fork
server2:
cd /home/mongodb/mongodb-linux-x86_64-1.6.2/bin
./mongod
–shardsvr –replSet shard2 –port 27018 –dbpath
/home/mongodb/data/shard22 –oplogSize 100 –logpath
/home/mongodb/data/shard22.log –logappend –fork
server3:
cd /home/mongodb/mongodb-linux-x86_64-1.6.2/bin
./mongod
–shardsvr –replSet shard2 –port 27018 –dbpath
/home/mongodb/data/shard23 –oplogSize 100 –logpath
/home/mongodb/data/shard23.log –logappend –fork
初始化replica set
用mongo连接其中一个mongod,执行:
> config = {_id: ‘shard2′, members: [
{_id: 0, host: '10.1.1.1:27018'},
{_id: 1, host: '10.1.1.2:27018'},
{_id: 2, host: '10.1.1.3:27018'}]
}
> rs.initiate(config);
到此就配置好了二个replica sets,也就是准备好了二个shards
配置三台config server
Server1:
mkdir -p /home/mongodb/data/config
./mongod
–configsvr –dbpath /home/mongodb/data/config –port 20000 –logpath
/home/mongodb/data/config.log –logappend –fork #config server也需要dbpath
Server2:
mkdir -p /home/mongodb/data/config
./mongod –configsvr –dbpath /home/mongodb/data/config –port 20000 –logpath /home/mongodb/data/config.log –logappend –fork
Server3:
mkdir -p /home/mongodb/data/config
./mongod –configsvr –dbpath /home/mongodb/data/config –port 20000 –logpath /home/mongodb/data/config.log –logappend –fork
配置mongs
在server1,server2,server3上分别执行:
./mongos
–configdb 10.1.1.1:20000,10.1.1.2:20000,10.1.1.3:20000 –port 30000
–chunkSize 5 –logpath /home/mongodb/data/mongos.log –logappend –fork
#mongs不需要dbpath
Configuring the Shard Cluster
连接到其中一个mongos进程,并切换到admin数据库做以下配置
1. 连接到mongs,并切换到admin
./mongo 10.1.1.1:30000/admin
>db
Admin
2. 加入shards
如
里shard是单台服务器,用>db.runCommand( { addshard :
“<serverhostname>[:<port>]” } )这样的命令加入,如果shard是replica
sets,用replicaSetName/<serverhostname>[:port]
[,serverhostname2[:port],…]这样的格式表示,例如本例执行:
>db.runCommand( { addshard : “shard1/10.1.1.1:27017,10.1.1.2:27017,10.1.1.3:27017″,name:”s1″,maxsize:20480} );
>db.runCommand( { addshard : “shard2/10.1.1.1:27018,10.1.1.2:27018,10.1.1.3:27018″,name:”s2″,maxsize:20480} );
注意:在添加第二个shard时,出现error:test database 已经存在的错误,这里用mongo命令连接到第二个replica set,用db.dropDatabase()命令把test数据库给删除然后就可加入
3. 可选参数
Name:用于指定每个shard的名字,不指定的话系统将自动分配
maxSize:指定各个shard可使用的最大磁盘空间,单位megabytes
4. Listing shards
>db.runCommand( { listshards : 1 } )
如果列出了以上二个你加的shards,表示shards已经配置成功
5. 激活数据库分片
命令:
> db.runCommand( { enablesharding : “<dbname>” } );
通
过执行以上命令,可以让数据库跨shard,如果不执行这步,数据库只会存放在一个shard,一旦激活数据库分片,数据库中不同的collection
将被存放在不同的shard上,但一个collection仍旧存放在同一个shard上,要使单个collection也分片,还需单独对
collection作些操作
Collecton分片
要使单个collection也分片存储,需要给collection指定一个分片key,通过以下命令操作:
> db.runCommand( { shardcollection : “<namespace>”,key : <shardkeypatternobject> });
注:
a. 分片的collection系统会自动创建一个索引(也可用户提前创建好)
b. 分片的collection只能有一个在分片key上的唯一索引,其它唯一索引不被允许
One
note: a sharded collection can have only one unique index, which must
exist on the shard key. No other unique indexes can exist on the
collection.
分片collection例子
>db.runCommand( { shardcollection : “test.c1″,key : {id: 1} } )
>for
(var i = 1; i <= 200003; i++)
db.c1.save({id:i,value1:”1234567890″,value2:”1234567890″,value3:”1234567890″,value4:”1234567890″});
> db.c1.stats()
{
“sharded” : true,
“ns” : “test.c1″,
“count” : 200003,
“size” : 25600384,
“avgObjSize” : 128,
“storageSize” : 44509696,
“nindexes” : 2,
“nchunks” : 15,
“shards” : {
“s1″ : {
“ns” : “test.c1″,
“count” : 141941,
“size” : 18168448,
“avgObjSize” : 128,
“storageSize” : 33327616,
“numExtents” : 8,
“nindexes” : 2,
“lastExtentSize” : 12079360,
“paddingFactor” : 1,
“flags” : 1,
“totalIndexSize” : 11157504,
“indexSizes” : {
“_id_” : 5898240,
“id_1″ : 5259264
},
“ok” : 1
},
“s2″ : {
“ns” : “test.c1″,
“count” : 58062,
“size” : 7431936,
“avgObjSize” : 128,
“storageSize” : 11182080,
“numExtents” : 6,
“nindexes” : 2,
“lastExtentSize” : 8388608,
“paddingFactor” : 1,
“flags” : 1,
“totalIndexSize” : 4579328,
“indexSizes” : {
“_id_” : 2416640,
“id_1″ : 2162688
},
“ok” : 1
}
},
“ok” : 1
}
http://www.360doc.com/content/11/0711/05/1542811_132811317.shtml
【MangoDB分片】配置mongodb分片群集(sharding cluster)的更多相关文章
- mongodb 分片群集(sharding cluster)
实际环境架构 分别在3台机器运行一个mongod实例(称为mongod shard11,mongod shard12,mongod shard13)组织replica set1,作为cluster的s ...
- MongoDB分片 在部署和维护管理 中常见事项的总结
分片(sharding)是MongoDB将大型集合分割到不同服务器(或者说集群)上所采用的方法,主要为应对高吞吐量与大数据量的应用场景提供了方法. 和既有的分库分表.分区方案相比,MongoDB的最大 ...
- MongoDB Sharding分片配置
Ps:mongod是mongodb实例,mongos被默认为为mongodb sharding的路由实例. 本文使用的mongodb版本为3.2.9,因此参考网址为:https://docs.mong ...
- MySQL Cluster 与 MongoDB 复制群集分片设计及原理
分布式数据库计算涉及到分布式事务.数据分布.数据收敛计算等等要求 分布式数据库能实现高安全.高性能.高可用等特征,当然也带来了高成本(固定成本及运营成本),我们通过MongoDB及MySQL Clus ...
- MongoDB分片配置 优化 不错
简单注解:mongos 路由进程, 应用程序接入mongos再查询到具体分片,监听端口默认27017config server 路由表服务, 每一台都具有全部chunk的路由信息 shard为数据存储 ...
- MongoDB分片群集的部署(用心描述,详细易懂)!!
概念: MongoDB分片是使用多个服务器存储数据的方法,以支持巨大的数据存储和对数据进行存储 优势: 1.减少了每个分片需啊哟处理的请求数,群集可以提高自己的存储容量和吞吐量 2.减少了每个分片存储 ...
- MongoDB分片(Sharding)技术
分片(sharding)是MongoDB用来将大型集合分割到不同服务器(或者说一个集群)上所采用的方法.尽管分片起源于关系型数据库分区,但MongoDB分片完全又是另一回事. 和MySQL分区方案相比 ...
- MongoDB分片配置系列一:
接这篇博客: http://www.cnblogs.com/xiaoit/p/4479066.html 这里不再说明安装过程. 1:分片简介 分片是一种将海量的数据水平扩展的数据库集群系统,数据分表存 ...
- MongoDB整理笔记のSharding分片
这是一种将海量的数据水平扩展的数据库集群系统,数据分表存储在sharding 的各个节点上,使用者通过简单的配置就可以很方便地构建一个分布式MongoDB 集群.MongoDB 的数据分块称为 chu ...
随机推荐
- HTML5移动Web开发
1. 响应式web设计 说到这个,移动开发面对的屏幕尺寸那叫一个丰富,其中安卓阵营就够让人头痛的.我们在PC端常用的两种布局方式就是固定布局和弹性布局,前者设置一个绝大多数电脑能正常显示的固定宽度居中 ...
- HTML5常用知识点
github代码:https://github.com/showkawa/H5C3/tree/master/html5 1.自定义属性 data- 1.1 可以给html里的所有DOM对象都可以添加一 ...
- 我的周记2——“天道酬勤"
Get 什么是JAVA https://zhuanlan.zhihu.com/p/62717204 了解下HTTP 缓存机制 https://juejin.im/post/5a1d4e546fb9a ...
- JavaScript编程艺术-第8章-8.6.1-显示“缩略词语表”
8.6.1-显示“缩略词语表” ***代码亲测可用*** HTML: JS: ***end***
- EditText(6)EditText的子类
1.Known Direct Subclasses AppCompatEditText, AutoCompleteTextView, ExtractEditText, GuidedActionEd ...
- Snackbar:用它来替换Toast 显示短提示
简介 Snackbar 它是Toast的子类.主要用来提示短暂的提示信息后,然后它自动消失. 它寄生在普通view上,具有一些基本功能. 它寄生在 CoordinatorLayout 时,有以下两个特 ...
- Spring抽象JDBC,使用JdbcTemplate
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- JavaScript 把函数作为参数进行传值
JavaScript 响应式编程模式有点类似 WebForm 中的事件驱动模式(传相应的处理函数给委托,通过事件来触发来进行相关的处理),在 AngularJs 2.x 框架中,应用了 RxJS AP ...
- 喜欢Swift编程语言的人主要是初学者?
一早一起来,朋友圈除了被苹果发布会刷屏外,还漫天散布着一条类似的招聘消息:“招聘iOS程序员,要求拥有5年的Swift开发经验,有狼性,待遇月薪20K+,专车接送.” 随后身边的朋友很快就开始调侃:& ...
- MySQL性能优化必备25条
1. 为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的.当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一 ...