学习文档:Oreilly.Scaling.MongoDB.Jan.2011.pdf 学习内容: 第一章: 1.1 Sharding是什么 Sharding是MongoDB中使用的一种将大的collection分配到几个服务器(cluster)中的方法。 MongoDB与以往数据库分表方法的最主要的区别就是MongoDB的每一项任务都是自动运行的。 Mongo完成分片的步骤很简单:数据库管理员告知mongoDB增加新的服务器mongod,MongoDB会自动完成在几个服务器之间均衡负载。 1.2 Sharding的目的 封装集群(make the cluster invisible) 确保随时读写集群(make the cluster always available for reads and writes) 集群易扩展(let the cluster grow easily) 第二章: 2.1 分割数据 一个分片指的是集群当中的一个或者多个服务器,负责存储数据集合当中的某些子集。 如果一个分片当中包含了多个服务器mongod,那么每一个mongod中的数据信息都是相同的。 因此可以将一个分片看作是一个备份数据集合。 MongoDB中存储的数据一般以[a,b)的形式出现,范围是“最小从a开始包括a,最大到b不包括b”。 2.2 分割数据(Distributing Data) 需要考虑的问题:良好的可扩展性、均衡负载 使用的分片方法:多范围分片 具体简单描述:假设原来分为[a,f) [f,n) [n,p) [p,z]若增加了一个新的服务器,分为[a,d) [f,j) [n,p) [p,z] {[d,f)+[j,n)} 2.3 chunks是如何被创建的 我们把处于某个特定范围内的数据叫做一个chunk。 shard key是用来分割范围也就是创建chunk的关键字。 2.4 将collections分片 当第一次为某个collection分片的时候,MongoDB创建一个chunk,这个chunk的范围是从最小的值,到最大的值。 如果以collection中的age为shard key,且初始chunk为[1,30],且年龄在20岁以下的占总数的一半 第一次分片会被分为[1,20] [20,30] 2.5 均衡负载 由均衡负载器(balancer)负责均衡负载的问题。《略》 2.6 路由服务器 mongos mongos是负责用户和集群交互的。它的工作就是负责隐藏集群内部的分片信息,并且向用户展现一个整齐的但服务器接口。 当客户使用一个mongo集群的时候,客户所有的读写操作都要通过mongos。mongos负责转发所有用户的请求到正确分片。 2.7 配置服务器 config server 2.8 集群架构解析 典型地,一个MongoDB汲取包含三个过程:shards负责存储数组,mongos负责路由请求信息,config server负责维持集群状态。 ======== 学习笔记2 ============= 创建一个MongoDB Cluster 学习资料:Oreilly.Scaling.MongoDB.Jan.2011.pdf 第一步:选择Shard Key 这一步很关键,对以后集群的可扩展性有深刻的影响,所以Shard Key的选取一定要谨慎。 这部分内容多且杂,不在这里细说,具体参看学习资料第三章。 第二步:将一个已经存在的collections分片 具体的部署步骤见下 【转自】http://blog.csdn.net/daizhj/archive/2010/09/07/5868360.aspx 模拟2个shard服务和一个config服务, 均运行在10.0.4.85机器上,只是端口不同 在C,D,E磁盘下分别建立如下文件夹: mongodb\bin mongodb\db 然后用CMD命令行依次打开相应文件夹下的mongd文件: c:\mongodb\bin\mongod --dbpath c:\mongodb\db\ --port 27020 d:\mongodb\bin\mongod --dbpath d:\mongodb\db\ --port 27021 e:\mongodb\bin\mongod --configsvr --dbpath e:\mongodb\db\ --port 27022 (注:config配置服务器) 启动mongos时,默认开启了27017端口 e:\mongodb\bin\mongos --configdb 10.0.4.85:27022 然后打下mongo: E:\mongodb\bin>mongo 回车 (有时加端口会造成下面的addshard命令出问题) > use admin --添加sharding,maxsize单位是M,此处设置比较小的数值只为演示sharding效果 { "shardAdded" : "shard0000", "ok" : 1 } 注:如果要移除sharding,可用下面写法 db.runCommand( { removeshard : "localhost:10000" } ); > db.runCommand({listshards:1}); 查看shard节点列表 接下来创建相应数据库并设置其"可以sharding",新建自动切片的库user001:
|
|
来自: CevenCheng > 《分布式》