配置服务器协议
MongoDB 3.0及更早版本仅支持单一类型的配置服务器部署协议,自MongoDB 3.2起,该协议被称为旧版SCCC(同步群集连接配置).SCCC部署有1个配置服务器(仅限开发)或3个配置服务器(生产).
MongoDB 3.2不支持SCCC协议,并支持一种新的部署类型:将服务器配置为副本集(CSR).CSRS部署与标准副本集具有相同的限制,在MongoDB 3.2中,标准副本集可以有1台配置服务器(仅限开发)或最多50台服务器(生产).为了在生产部署中实现高可用性,建议至少使用3台CSRS服务器,但对于地理分布的部署,额外的服务器可能会很有用.
SCCC(同步群集连接配置)
使用SCCC,配置服务器将使用two-phase commit协议进行更新,该协议要求多个服务器就一个事务达成一致.可以使用单个配置服务器进行测试/开发,但在生产使用中,应该始终使用3个配置服务器.对于为什么不能在MongoDB中只使用2台(或3台以上)服务器,一个实用的答案是,MongoDB代码库only支持1台或3台配置服务器进行SCCC配置.
与两台服务器相比,三台服务器提供了更强的一致性保证,并允许在一台配置服务器上进行维护活动(例如,备份),同时仍有两台服务器可供您的用户查询.超过三台服务器会增加跨所有服务器提交数据所需的时间.
切分集群的元数据需要在所有配置服务器上都相同,并且由MongoDB切分实现维护.元数据包括当前保存文档范围的碎片的基本细节(又名chunks
).在SCCC配置中,配置服务器是一个副本集,因此如果一个或多个配置服务器脱机,那么配置数据将是只读的——否则,当脱机配置服务器重新联机时,数据将无法传播到脱机配置服务器.
显然,1配置服务器不提供冗余或备份.对于2台配置服务器,一个潜在的故障场景是,服务器可用,但服务器上的数据不一致(例如,其中一台服务器出现了一些数据损坏).有了3个配置服务器,您可以在前面的场景中进行改进:2/3服务器可能是一致的,您可以识别出单独的服务器.
CSR(将服务器配置为副本集)
MongoDB 3.2反对在配置服务器上使用三个镜像mongod
实例,从3.2开始,配置服务器(默认情况下)部署为副本集.副本集配置服务器必须使用WiredTiger 3.2+存储引擎(或支持新的readConcern
读取隔离语义的另一个存储引擎).CSRS还不允许一些不适用于分片集群元数据用例的非默认副本集配置选项(例如arbiterOnly
、buildIndexes
和slaveDelay
).
CSRS部署提高了配置服务器的一致性和可用性,因为MongoDB可以利用标准副本集读写协议对配置数据进行分片.此外,这允许分片集群拥有3个以上的配置服务器,因为副本集最多可以有50个成员(如MongoDB 3.2).
在CSRS部署中,写可用性取决于维护可以查看副本集当前主副本的成员的仲裁.例如,一个3 node 副本集需要两个可用成员来维护一个主副本集.可以添加额外的成员以获得改进的fault tolerance,但需遵守与普通副本集相同的election rules.mongos
使用majority
中的readConcern
来确保分片集群元数据只有在提交给大多数副本集成员后才能读取,而nearest
中的readPreference
用于将请求路由到最近的配置服务器.