分类: LINUX
2010-08-23 16:45:29
从v1.6开始支持auto-shard,这无疑给管理工作带来了很大方便。
Mongodb可以实现负载均衡和故障自动切换
一、Mongodb 自动分片
1、shard简介
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中有一台设备为主,其它为从。当主服务器宕机后,会自动重启将一台从服务器切换为主服务。
3、shard架构图
架构一
架构二、
4、shard key
要实现分片功能,我们需要指定集合的分片key(相当于oracle分区字段),这个分片key通常需要创建一个索引。分片key可以由一个或多个字段构成。
5、chunks
Chunk是一个集合中的一段连续数据。当一个chunk达到一定大小时就会自动分裂成两个新trunks。当一个shard超过一定量数据时,chunk会被迁移到其它shard中。新增shard也会影响chunk的移动。
选择shard key是需要注意选择选数据均匀分布的key,这样能够保证数据均衡分布及其查询速度的均衡。例如我们选择按姓名进行分片,我们需要考虑重名情况,如果有大量重名的话,一个chunk会变得很大,并且难以分割,这种情况下我们可以考虑采用多个字段组合成一个shard key。
6、Config server
Config server保存集群的源数据,包含每个shard server的进步信息和chunk信息等。
每个config
server都好好一份完整的所有trunk信息。当配置信息修改时所有config
server修改成功才能生效,这样才能确保数据的一致性。
任意config
server宕机后,集群的源数据变成只读。但是这不能影响MongoDB集群中mongod数据的读写。
7、route process
路由进程负责调度客户端程序数据操作需求,将需求分发到各个shard中,然后将数据返回给客户端。对于客户端来说就是一个独立的DB。
Mongos 进程包含trunk等状态信息不是持续不变的,启动时从config server获取所有状态信息,在config
server做的任何修改都会同步到mongos中。
Mongos可以部署在任意机器上,不会对系统负载造成多大影响。