集群的高可用性
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.
一个分片中的一个 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.
对系统的异常和可用性要做监控,如果一个节点不可用,尽快使用一个新节点进行替换,保证有足够的冗余.
复制集中所有成员都不可用
如果一个分片的复制集中所有成员都不可用,存储在这个分片的所有数据将不可用.不过,存储在其他分片的数据依然可用,并且其他分片依然可读可写,在这种情况下,你的应用程序获取的只是部分的结果,你应该尽快调查问题发生的原因并恢复不可用的节点.
一个或者两个配置服务器不可用
三个 mongod 组成的配置服务器组合提供 config database 服务,并使用两段提交来保证 mongod 之间的一致性,在一个或者两个配置服务器异常时,集群的操作依然可以进行,但是 数据块迁移 和 数据块分裂 将不能进行.尽快替换掉失效的配置服务器,如果三台配置服务器都不可用,集群将不可用.
注解
在初始化一个集群时,所有的配置服务器都必须正常运行并且可访问.
重命名配置服务器
如果配置服务器的域名或者ip发生变化,你必须重启集群中的 每一台 mongod 和 mongos ,你也可以使用cNAMES来标识配置服务器以防止集群停止服务.
为了在重命名配置服务器时防止不可服务,可以使用与物理环境无关的DNS名字或者虚拟主机名为 配置服务器 命名.
通常使用DNS别名(比如一个cNAME记录)来标识每一台配置服务器,并在 mongos 中使用这个别名.这样做可以在更换配置服务器ip以及域名时可以不用更改 mongos 配置并且不用重启整个集群.
片键和集群可用性
选取 shard key 最重要的是:
此外:
每个分片都应该是一个 replica set,如果一个 mongod 不能服务,复制集的成员会选举出一个新的 primary,分片可以继续服务.然而,如果一个分片的所有成员都不可访问,此份片的数据也不可访问.
如果片键能够使得 mongos 将大部分请求都分发到单个分片,则一个分片的失效只会造成 部分 数据的不可访问.
如果片键的选取使得每个操作都需要每个分片响应,则一个分片的失效会导致集群的不可用.
本质上,对集群可靠性的考虑凸显了一个能够将对集群的操作分发到单个分片的片键选取的重要性.