MongoDB 1.6 增加了 Sharding 机制和副本集合特性

  • Abel Avram
  • 张涛

2010 年 8 月 29 日

话题:架构DevOpsAI

MongoDB 1.6是一个重要的版本,解决了水平扩展的问题,为自动故障转移和恢复提供了 Sharding 机制,并增加了副本集合的特性。

Sharding

MongoDB1.6 的主要改进是可以通过 Sharding 进行水平扩展。MongoDB 能快速的从多个 Shard 中自动分配数据库、集合或集合中的对象,而不需要停机。Sharding 是非常合适的解决方案,因为在多数情况下,数据收集会比其它操作要频繁的多,没必要每次都去分配整个数据库。 

Sharding 配置包含了 Shard、路由进程、配置服务器,如下图所示:

mongod – 主数据库进程。它代表一个 Shard 并被放入副本集合,以提供故障自动转移。Mongod 的进程之一在其副本集合中是主进程。如果主进程停掉,则委派其他服务器作为主进程。

mongos – 路由进程。它负责客户端和 Sharded 数据库进行交互,该数据库连接到一台独立服务器。如果必要的话,可以使用多个 Mongos 服务器,但它们不会共享状态。

config servers – 每个配置服务器包含了集群的元数据、系统中存在的 Shard 以及每个 Shard 中存放了什么样的数据块。安全起见,可以设置多个配置服务器。如果其中一个出现故障,配置服务器进入只读模式,但 Shard 会在读 / 写模式下继续运行。

Replica Sets

MongoDB 1.6 的另一个主要特征是副本集合(Replica Sets),这时一个基于主 / 从复制机制的复制功能,但增加了自动故障转移和恢复特性。一个集群最多可以支持 7 个服务器,并且任意节点都可以是主节点。所有的写操作都被分发到主节点,而读操作可以在任何节点上进行。

其他改进

$or 查询──操作符 $or 在查询中支持布尔类型或表达式:

db.foo.find( { name : "bob" , $or : [ { a : 1 } , { b : 2 } ] } )

Window 服务──Mongod 可以作为一个服务运行在 windows 操作系统,但是Mongos 不行

w 选项──写操作可以被阻止,直到这个操作传播到集合内的多个服务器。

10gen是一个提供文件数据库支持的公司,该公司的共同创始人兼首席执行官 Dwight Merriman 提到,MongoDB 1.6 已经被bit.lyfoursquare使用。bit.ly在高峰时段有 50M 用户使用,每个用户平均 10K 带宽的并发访问。Foursquare 则拥有数百万的用户,从 Postgres 迁移到了 Sharded MongoDB,并使用了地理空间索引。

MongoDB 的发布说明Jira上包含了更多的 1.6 版本相关信息。

查看英文原文:MongoDB 1.6 Adds Sharding and Replica Sets

架构DevOpsAI