Mongodb 集群分片部署
分片部署是 mongodb 数据高可用的方案之一,还有就是 master/slave 模式,master/
slave 模式由下章节写出。这里将的分片就是集群中的单个节点或者节点的集合,只不过在
mangodb 中的叫法与关系型数据库不同。
mongoDB 支持在多个机器中通过异步复制达到故障转移和实现冗余。多机器中同一时
刻只有一台是用于写操作。正是由于这个情况,为 mongoDB 提供了数据一致性的保障。担
当主角色的机器能把读操作分发给 slaves/secondaries。
官网中为选择这两种架构提供了以下意见:
* if using <v1.6 : master/slave
* if need automac fail-over and recovery (easy administraon): replica sets
* if using --auth (security) : for now, master/slave
* if using sharding : either, but replica sets are best for clusters that are not small
* if risk averse : master/slave (replica sets are new to v1.6.0)
MongoDB 的数据分块称为 chunk。每个 chunk 都是 Collection 中一段连续的数据记录,
通常最大尺寸是 200MB,超出则生成新的数据块。
要构建一个 MongoDB Sharding Cluster(集群分片部署),需要三种角色:
Shard Server: mongod 实例,每个 shard 由一个或多个 mongod 进程组成,用于存储
实际的数据块。
Cong Server: mongod 实例,存储了整个 Cluster Metadata,包括每个 Shard 的信息
和 chunks 信息。
Route Server: mongos 实例,前端路由,客户端由此接入,且让整个集群看上去像单一
进程数据库。
Route 转发请求到实际的目标服务进程,并将多个结果合并回传给客户端。Route 本身并不存
储任何数据和状态,仅在启动时从 Cong Server 获取信息。Cong Server 上的任何变动
都会传递给所有的 Route Process。
在实际使用中,为了获取高可用、高性能的集群方案,我们会将 Shard Server 部署成
Replica Sets。