MongoDB auto shard介绍

[转载]MongoDB auto shard介绍

归类于: 默认分类 — zhaigy @ 3:55 pm 编辑此文

m ongodb 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 可以部署在任意机器上,不会对系统负载造成多大影响。

你可能感兴趣的:(技术学习笔记)