MongoDB基础(九)分片(一)

2015-07-24 07:47:08 · 作者: · 浏览: 4

分片(sharding)是通过多台服务器存储数据的方法。Mongodb使用分片可支持部署非常大的数据集和高的吞吐量操作。单台服务器的能力在各方面都有限,如CPU、IO、RAM、存储空间等。解决扩展的问题,数据库提供了两种方法:垂直扩展和分片。

垂直扩展:增加CPU、RAM,存储资源等,这也受限于硬件设备。而有些基于云的供应商也规定用户使用小的系统。

分片(水平扩展):划分数据集,将数据分布到多台服务器中,每个碎片(chard)是一个独立的数据库,这些碎片共同组成了一个逻辑的数据库。(这类似于Windows动态磁盘条带化一样)

Mongodb 中的分片集群结构如下:

\

?

分片集群有三个组件:shards,query routers 和 configservers。

Shards:碎片,存储数据,提供高可用性和数据的一致性。分片集群中,每个碎片都是一个复制集。

query routers:查询路由,或称mongos实例,客户端应用程序直接操作碎片的接口。查询路由处理和定位操作到碎片中并返回相关数据到客户端。一个分片集群包含多个查询路由来划分客户端的请求压力。

configservers:配置服务器,存储集群中的元数据。这些数据包含集群数据到碎片的映射。查询路由使用这些元数据定位操作到明确的碎片中。共享集群需要有3台配置服务器。

注:用于测试,可以值配置1个config servers

Mongodb 分布数据或碎片,是在collection 级别上。分片是通过shardkey 划分一个集合的数据。shard key 可以是一个索引键列,或者是存在每个文档中的复合键列。Mongodb 划分shard key 值到 chunk 中,并将chunk平均分配到碎片中。Mongodb 使用划分的方法为范围分区或者哈希分区。(更多参考:shardkey)

分片集群部署:

Mongodb服务器:(Red HatEnterprise Linux 6 64-bit + Mongodb 3.0.2)

192.168.1.11 mongodb11.kk.net 21017

192.168.1.12 mongodb12.kk.net 21018

192.168.1.13 mongodb13.kk.net 21019

192.168.1.14 mongodb14.kk.net 21020

用于测试结构如下:

\

注:配置前确保要加入集群中的成员都能相互连接。

【1. 配置 config servers】(在 192.168.1.14服务器上)

配置服务器(config servers)存储集群元数据,因此首先配置该服务器。配置服务器需使用参数—configsvr 来启动mongod服务。若有多个配置服务器,每个配置服务器都完整保存集群的元素就。

1. 1 创建数据库目录 configdb :
[root@mongodb14 ~]# mkdir /var/lib/mongo/configdb
[root@mongodb14 ~]# chown mongod:mongod /var/lib/mongo/configdb/
1.2. 配置启动参数文件:
[root@mongodb14 ~]# vi /etc/mongod.conf

192.168.1.14

logpath=/var/log/mongodb/mongod.log

pidfilepath=/var/run/mongodb/mongod.pid

logappend=true

fork=true

port=27020

bind_ip=192.168.1.14

dbpath=/var/lib/mongo/configdb

configsvr=true

1.3. 重启 mongod 服务:

[root@mongodb14 ~]# service mongod restart

【2. 配置 router】(在 192.168.1.11服务器上)

2.1.启用 mongos (MongoDB Shard)实例,连接到 config servers:(更多参考:mongos

#使用mongos连接到config servers,指定本地端口,否则默认27017
#当前服务器mongod 端口为27017,所以配置mongos 端口为27016
#mongo --host 
  
    --port 
   
     [root@redhat11 ~]# mongos --configdb mongodb14.kk.net:27020 --port 27016 --chunkSize 200 --logpath /var/log/mongodb/mongos.log --fork
   
  

实际环境中,若配置了多个config servers ,mongos 可同时指定多个。

mongos--configdb mongodb14.kk.net:27020, mongodb15.kk.net:27020,mongodb16.kk.net:27020……

【3. 添加 shard 成员到集群中】(添加IP为 11、12、13 分片集中 ,以192.168.1.11为例)

3.1. 配置启动参数文件:

[root@redhat11 ~]# vi /etc/mongod.conf

192.168.1.11

192.168.1.12

192.168.1.13

logpath=/var/log/mongodb/mongod.log

pidfilepath=/var/run/mongodb/mongod.pid

logappend=true

fork=true

port=27017

bind_ip=192.168.1.11

dbpath=/var/lib/mongo

shardsvr=true

?

logpath=/var/log/mongodb/mongod.log

pidfilepath=/var/run/mongodb/mongod.pid

logappend=true

fork=true

port=27018

bind_ip=192.168.1.12

dbpath=/var/lib/mongo

shardsvr=true

?

logpath=/var/log/mongodb/mongod.log

pidfilepath=/var/run/mongodb/mongod.pid

logappend=true

fork=true

port=27019

bind_ip=192.168.1.13

dbpath=/var/lib/mongo

shardsvr=true

?


3.2.重启 mongod 服务:

[root@mongodb11 ~]# service mongod restart

3.3各shard 成员连接到mongos 实例中添加(添加前把已存在的用户数据移走或者删除):

[root@mongodb11 ~]# mongo 192.168.1.11:27016
mongos> sh.addShard("mongodb11.kk.net:27017")
mongos> sh.addShard("mongodb12.kk.net:27018")
mongos> sh.addShard("mongodb13.kk.net:27019")

3.4添加完成!~连接到mongos可查看系统相关信息:

configsv