Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2152755
  • 博文数量: 157
  • 博客积分: 10047
  • 博客等级: 上将
  • 技术积分: 6757
  • 用 户 组: 普通用户
  • 注册时间: 2005-05-19 11:38
文章分类

全部博文(157)

文章存档

2011年(16)

2010年(50)

2009年(42)

2008年(49)

我的朋友

分类: LINUX

2010-08-23 16:45:29

v1.6开始支持auto-shard,这无疑给管理工作带来了很大方便。

Mongodb可以实现负载均衡和故障自动切换

 

一、Mongodb 自动分片

1shard简介

Shard指的是水平方向的多节点数据分散存储。例如:我们可以将不同省份居民信息存储到不同的shard server中。

应用程序可以通过mongos process登陆shard集群,mongos process负责进行路由调度,将请求分发到合适的shard server上。对应用来说shard cluster就像一个单节点数据库,但是数据库的存储空间无限扩大。假如要写大量数据到users集合,这些数据会分发到多个shared server中,查询也是如此,因此查询效率会较高。

Shard的分片单元是集合,而不是整个数据库。由于应用不同,可能某个集合的数据量要远大于其它的集合, Mongodb未作分片的集合数据存储在单一shard节点上

2、负载均衡和失效切换

      当某个shard的负载超过一定阀值后,便会自动重新分发数据,以保证系统负载均衡

每个shards中应该由2台以上设备组,设备组称为replica set. replica set.n台服务器构成,每台服务器包含一份完整数据。在replica set中有一台设备为主,其它为从。当主服务器宕机后,会自动重启将一台从服务器切换为主服务。

3shard架构图

      架构一


架构二、

 

4shard key

      要实现分片功能,我们需要指定集合的分片key(相当于oracle分区字段),这个分片key通常需要创建一个索引。分片key可以由一个或多个字段构成。

5chunks

      Chunk是一个集合中的一段连续数据。当一个chunk达到一定大小时就会自动分裂成两个新trunks。当一个shard超过一定量数据时,chunk会被迁移到其它shard中。新增shard也会影响chunk的移动。

      选择shard key是需要注意选择选数据均匀分布的key,这样能够保证数据均衡分布及其查询速度的均衡。例如我们选择按姓名进行分片,我们需要考虑重名情况,如果有大量重名的话,一个chunk会变得很大,并且难以分割,这种情况下我们可以考虑采用多个字段组合成一个shard key

6Config server

      Config server保存集群的源数据,包含每个shard server的进步信息和chunk信息等。

      每个config server都好好一份完整的所有trunk信息。当配置信息修改时所有config server修改成功才能生效,这样才能确保数据的一致性。

      任意config server宕机后,集群的源数据变成只读。但是这不能影响MongoDB集群中mongod数据的读写。

7route process

      路由进程负责调度客户端程序数据操作需求,将需求分发到各个shard中,然后将数据返回给客户端。对于客户端来说就是一个独立的DB

      Mongos 进程包含trunk等状态信息不是持续不变的,启动时从config server获取所有状态信息,在config server做的任何修改都会同步到mongos中。

      Mongos可以部署在任意机器上,不会对系统负载造成多大影响。

阅读(1144) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~