2.关于容灾,从概念上将分布式数据库的容灾机制有点类似集中式架构的“多活”+灾备结合的方式。在主集群之外,准备一套灾备集群。
先说多活,指的是leader。分布式数据库生产集群采用两地三中心五副本架构,同城生产机房2副本、同城灾备机房2副本、异地灾备机房1副本,根据一致性协议以及“大多数”原则,必须保证有3副本存活才能维持数据库正常服务。为了保证数据库写服务效率,异地机房的1副本仅作为从副本,因此无leader,所有的leader都分布在同城两个机房里。 如果异地机房出故障,那么集群剩下4副本,此时写操作请求发生后,只要有3个副本写成功即可,同时,同城两个机房有全部leader,因此无需重新选举leader; 如果同城任一机房故障,那么集群剩下3副本 ,此时写操作请求发生后,需要3个副本都写成功才认为成功, 但是由于有1个副本在异地,存在异地延时,影响写效率,因此这种情况要先人工将集群5副本降为3副本,然后由集群在同城另一个正常的机房自动选举出leader。
除了上述场景,在异地灾备机房可以单独准备一套灾备集群,与生产集群进行数据同步,从而实现传统意义上的“灾备”。