为什么 MongoDB 配置服务器必须只有一个或三个?

2024-01-07

在阅读了 MongoDB 分片架构的官方文档后,我还没有找到为什么需要一到三个配置服务器,而不是其他数量。

The 有关配置服务器的 MongoDB 文档 https://docs.mongodb.org/v3.0/core/sharded-cluster-config-servers/#config-server-availability says:

“如果一两个配置服务器不可用,集群的元数据将变为只读。您仍然可以从分片读取和写入数据,但在所有三台服务器可用之前不会发生块迁移或拆分。”

因此,反思:一台服务器相当于单点故障,但使用两台服务器时,我们的行为与三台服务器相同,对吗?

那么,为什么绝对是三台服务器,而不是两台或更多服务器呢?

因为医生还说:

配置服务器不作为副本集运行。


配置服务器协议

MongoDB 3.0 及更早版本仅支持单一类型的配置服务器部署协议,从 MongoDB 3.2 开始,该协议称为旧版 SCCC(同步集群连接配置)。 SCCC 部署具有 1 个配置服务器(仅开发)或 3 个配置服务器(生产)。

MongoDB 3.2 弃用了 SCCC 协议并支持新的部署类型:将服务器配置为副本集 (CSRS)。 CSRS 部署与标准副本集具有相同的限制,与 MongoDB 3.2 一样,标准副本集可以有 1 个配置服务器(仅限开发)或最多 50 个服务器(生产)。为了在生产部署中实现高可用性,建议至少使用 3 台 CSRS 服务器,但额外的服务器对于地理分布式部署可能很有用。

SCCC(同步集群连接配置)

通过 SCCC,配置服务器可以使用两阶段提交 http://en.wikipedia.org/wiki/Two_phase_commit需要多个服务器对事务达成共识的协议。您可以使用单个配置服务器进行测试/开发,但在生产使用中,您应该始终使用 3 个配置服务器。为什么不能在 MongoDB 中仅使用 2 个(或超过 3 个)服务器的一个实际答案是 MongoDB 代码库only支持 1 或 3 个配置服务器进行 SCCC 配置。

三台服务器比两台服务器提供更强的一致性保证,并允许在一台配置服务器上进行维护活动(例如备份),同时仍然有两台服务器可供您使用mongos来查询。超过三台服务器会增加跨所有服务器提交数据所需的时间。

分片集群的元数据在所有配置服务器上必须相同,并由 MongoDB 分片实现维护。元数据包括哪些分片当前保存一系列文档的基本细节(又名chunks)。在 SCCC 配置中,配置服务器是not副本集,因此如果一个或多个配置服务器脱机,则配置数据将是只读的 - 否则当脱机配置服务器重新联机时,数据无法传播到脱机配置服务器。

显然,1 个配置服务器不提供冗余或备份。对于 2 个配置服务器,潜在的故障情况是服务器可用,但服务器上的数据不一致(例如,其中一台服务器存在一些数据损坏)。使用 3 个配置服务器,您可以改进之前的场景:2/3 个服务器可能是一致的,您可以识别出奇怪的服务器。

CSRS(将服务器配置为副本集)

MongoDB 3.2 不推荐使用三个镜像mongod配置服务器的实例,从 3.2 开始配置服务器(默认情况下)部署为副本集。副本集配置服务器必须使用WiredTiger 3.2+存储引擎(或支持新版本的其他存储引擎)readConcern https://docs.mongodb.org/manual/release-notes/3.2/#readconcern阅读隔离语义)。 CSRS 还不允许一些非默认副本集配置选项(例如arbiterOnly, buildIndexes, and slaveDelay)不适合分片集群元数据用例。

CSRS 部署提高了配置服务器的一致性和可用性,因为 MongoDB 可以利用标准副本集读写协议来分片配置数据。此外,这允许分片集群拥有 3 个以上的配置服务器,因为副本集最多可以有 50 个成员(在 MongoDB 3.2 中)。

对于 CSRS 部署,写入可用性取决于维护可以查看副本集当前主节点的法定成员数量。例如,3 节点副本集需要 2 个可用成员来维护主节点。可以添加其他成员以改进容错 https://docs.mongodb.org/manual/core/replica-set-architectures/#consider-fault-tolerance,同样受选举规则 https://docs.mongodb.org/manual/core/replica-set-elections/作为一个普通的副本集。 AreadConcern of majority被使用mongos确保分片集群元数据只有在提交给大多数副本集成员并且readPreference of nearest用于将请求路由到最近的配置服务器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 MongoDB 配置服务器必须只有一个或三个? 的相关文章

随机推荐