配置服务器协议
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
用于将请求路由到最近的配置服务器。