sep*_*h66 14 configuration sharding mongodb
在阅读MongoDB分片架构的官方文档后,我还没有找到为什么需要一个或三个配置服务器,而不是另一个数字.
"如果一个或两个配置服务器不可用,集群的元数据将变为只读.您仍然可以从分片中读取和写入数据,但在所有三个服务器都可用之前,不会发生任何块迁移或拆分."
因此反思:一台服务器相当于一个故障点,但是有两台服务器我们有三个相同的行为,对吧?
那么,为什么绝对有三台服务器,而不仅仅是两台或更多服务器呢?
因为医生也说:
配置服务器不作为副本集运行.
Ste*_*nie 26
MongoDB 3.0及更早版本仅支持单一类型的配置服务器部署协议,从MongoDB 3.2开始称为旧版SCCC(同步群集连接配置).SCCC部署具有1个配置服务器(仅限开发)或3个配置服务器(生产).
MongoDB 3.2弃用SCCC协议并支持新的部署类型:将服务器配置为副本集(CSRS).CSRS部署与标准副本集具有相同的限制,与MongoDB 3.2一样,它可以具有1个配置服务器(仅限开发)或最多50个服务器(生产).建议在生产部署中至少使用3台CSRS服务器以实现高可用性,但其他服务器可能对地理位置分散的部署非常有用.
使用SCCC,配置服务器使用两阶段提交协议进行更新,该协议需要来自多个服务器的一致性才能进行事务处理.您可以使用单个配置服务器进行测试/开发,但在生产使用中,您应始终拥有3.为什么您不能在MongoDB中仅使用2个(或超过3个)服务器的实际答案是MongoDB代码库仅支持1或3个配置服务器,用于SCCC配置.
三台服务器比两台服务器提供更强的一致性保证,并允许在一台配置服务器上进行维护活动(例如备份),同时仍有两台服务器可供您mongos查询.超过三台服务器会增加在所有服务器上提交数据所需的时间.
分片集群的元数据需要在所有配置服务器上相同,并由MongoDB分片实现维护.元数据包括哪些分片当前包含文档范围(aka chunks)的基本细节.在SCCC配置中,配置服务器不是副本集,因此如果一个或多个配置服务器处于脱机状态,则配置数据将是只读的 - 否则数据无法传播到脱机配置服务器回到网上.
显然,1个配置服务器不提供冗余或备份.使用2个配置服务器时,潜在的故障情形是服务器可用但服务器上的数据不一致(例如,其中一个服务器有一些数据损坏).使用3个配置服务器,您可以改进上一个场景:2/3服务器可能是一致的,您可以识别出奇数服务器.
MongoDB 3.2不推荐使用三个镜像mongod实例用于配置服务器,从3.2配置服务器开始(默认情况下)部署为副本集.副本集配置服务器必须使用WiredTiger 3.2+存储引擎(或支持新的readConcern读取隔离语义的其他存储引擎).CSRS也不允许一些非默认副本集的配置选项(例如arbiterOnly,buildIndexes和slaveDelay),它们不适合于分片簇的元数据用例.
CSRS部署提高了配置服务器的一致性和可用性,因为MongoDB可以利用标准副本集读写协议来分片配置数据.此外,这允许分片群集具有3个以上的配置服务器,因为副本集最多可以有50个成员(如MongoDB 3.2).
通过CSRS部署,写入可用性取决于维护法定数量的成员,这些成员可以查看副本集的当前主要成员.例如,3节点副本集将需要2个可用成员来维护主节点.可以添加其他成员以提高容错能力,但要遵循与普通副本集相同的选举规则.一readConcern中majority所使用的mongos,一旦它致力于多数副本集成员和确保分片群集的元数据只能读readPreference的nearest是用来将请求路由到最近的配置服务器.
| 归档时间: |
|
| 查看次数: |
10925 次 |
| 最近记录: |