OPTIONS
翻译或纠错本页面

集群的高可用性

A production cluster has no single point of failure. This section introduces the availability concerns for MongoDB deployments in general and highlights potential failure scenarios and available resolutions.

应用服务器或者 mongos 不可用

如果每个应用服务器都有自己独有的 mongos 实例,一个应用服务器出问题时,其他应用服务器还可以继续访问数据库,另外, mongos 并不存储集群固有的状态,他们可以随时重启,并且在变得不可用时不会丢失任何状态或数据.当 mongos 启动时,会拷贝一份 config database 并开始处理请求.

一个分片中的一个 mongod 不可用

Replica sets provide high availability for shards. If the unavailable mongod is a primary, then the replica set will elect a new primary. If the unavailable mongod is a secondary, and it disconnects the primary and secondary will continue to hold all data. In a three member replica set, even if a single member of the set experiences catastrophic failure, two other members have full copies of the data. [1]

对系统的异常和可用性要做监控,如果一个节点不可用,尽快使用一个新节点进行替换,保证有足够的冗余.

复制集中所有成员都不可用

如果一个分片的复制集中所有成员都不可用,存储在这个分片的所有数据将不可用.不过,存储在其他分片的数据依然可用,并且其他分片依然可读可写,在这种情况下,你的应用程序获取的只是部分的结果,你应该尽快调查问题发生的原因并恢复不可用的节点.

一个或者两个配置服务器不可用

三个 mongod 组成的配置服务器组合提供 config database 服务,并使用两段提交来保证 mongod 之间的一致性,在一个或者两个配置服务器异常时,集群的操作依然可以进行,但是 数据块迁移数据块分裂 将不能进行.尽快替换掉失效的配置服务器,如果三台配置服务器都不可用,集群将不可用.

注解

在初始化一个集群时,所有的配置服务器都必须正常运行并且可访问.

[1]

在一台失效的从节点恢复正常工作时,如果它的操作日志还没有过期,便可以用正常 主从同步 的方式获得最新数据,否则,只能通过 initial sync 重新进行数据同步.

重命名配置服务器

如果配置服务器的域名或者ip发生变化,你必须重启集群中的 每一台 mongodmongos ,你也可以使用cNAMES来标识配置服务器以防止集群停止服务.

为了在重命名配置服务器时防止不可服务,可以使用与物理环境无关的DNS名字或者虚拟主机名为 配置服务器 命名.

通常使用DNS别名(比如一个cNAME记录)来标识每一台配置服务器,并在 mongos 中使用这个别名.这样做可以在更换配置服务器ip以及域名时可以不用更改 mongos 配置并且不用重启整个集群.

片键和集群可用性

选取 shard key 最重要的是:

  • 集群可以将数据均匀分布在每个分片中,并且

  • 有较好的写扩展,同时

  • 在大多数查询中可以 mongos 可以将请求分发到特定的 mongod.

此外:

  • 每个分片都应该是一个 replica set,如果一个 mongod 不能服务,复制集的成员会选举出一个新的 primary,分片可以继续服务.然而,如果一个分片的所有成员都不可访问,此份片的数据也不可访问.

  • 如果片键能够使得 mongos 将大部分请求都分发到单个分片,则一个分片的失效只会造成 部分 数据的不可访问.

  • 如果片键的选取使得每个操作都需要每个分片响应,则一个分片的失效会导致集群的不可用.

本质上,对集群可靠性的考虑凸显了一个能够将对集群的操作分发到单个分片的片键选取的重要性.