此问题专门针对Service Fabric,但概念超出了这一群集系统,因此无需SF经验即可随意介入。
我正在尝试了解将有状态服务的MinReplicaSetSize和TargetReplicaSetSize设置为相同或不同的数字的利弊。
假设您有10个分区和3个副本。这意味着每个分区将具有3个副本(1个主副本和2个辅助副本)。假设您有一些Collection分布在这10个分区中。有两种情况需要考虑:
MinReplica和TargetReplica = 3
在某些分区上,主副本失败。其中一所中学被提升为小学。因为副本计数= 2 MinReplica = 2和TargetReplica = 3 在某些分区上,主副本失败。其中一所中学被提升为小学。由于MinReplica计数仍然是安全的,因此继续写入新的主数据库并更新剩余的1个辅助数据库。发生这种情况时,假脱机了另一个辅助服务器,然后在继续写入的同时必须加快速度。 那么缺点是什么? 在新的辅助数据库赶上速度之前,新的辅助数据库可能会失败,辅助数据库又会升格为主节点,并且也会失败; 因此丢失已提交的数据?这是不利之处吗?在MinReplica = 3 / TargetReplica = 4的情况下,即使这样也不会发生。 我问,因为我通常将它们视为相等的数字,并开始考虑它。
此语句“ 在某些分区上,主副本失败。其中一个副本被提升为主副本。由于副本数量= 2
为了使写入成功,该操作必须在N个副本的多数(N / 2)+1上成功完成。具有三个副本,意味着仲裁大小为2。如果2个写入成功,则写入操作成功。将其更改为2不会影响仲裁。仲裁的大小由MinReplicaSetSize
大小得出。将其更改为5意味着仲裁大小为3,然后有关丢失1个副本的声明将变为有效。
还请注意,副本集上的MinReplicaSetSize
是'view':
MinReplicaSetSize定义了视图,例如,如果TargetReplicaSetSize为5,并且MinReplicaSetSize为3,那么即使有3个并发失败[它]在其副本集视图中仍将具有三个副本。