组复制提供了了容错能力,只要组中的大多数的成员存活,那么系统就是可用的,组复制有2中形式,多master,所有server都能接受更新和单master自动选主,只有master接受更新,有更新冲突的时候,会采用先提交获胜的策略,回滚掉后提交的,组复制中对于读写的事务的提交并不是有原始的server单独决定的,需要所有的server决定是否提交,在原始server上提交的时候,该server会发送一个广播,包含行改变及行的唯一标识符,然后这个事务有个全局总顺序,确保每个server上接收的是相同顺序的事务,在多master模式中,应用端需要处理一些该模式下的异常
对于一个提交的事务,组中的大部分要确保事务全局序列的顺序性,每个节点单独的决定是提交还是丢弃,然后所有的server确定最终的决定,如果有网络分区发生,导致部分的server没办法访问,发生分区,那么系统将会停止处理直到问题解决。所以组复制中有内建的,自动的脑力检测机制。
组复制跟普通的复制一样,也是shared-nothing的结构
在不同的server上并发的执行事务可能会遇到冲突,这种冲突会在certification的过程中被检测,如果并发的事务,在不同的server上执行,更新了相同的行,就会产生冲突,这种冲突的处理就是先执行的正常,后执行的被回滚。
组复制中的失败检测
内部有机制来发现及报告哪个server是静默的并假定是死亡的,失败检测器提供可能失败sevrver的信息,如果组都同意这个server可能是死亡的,那么就认定他是死亡的server,并排除。当server没有回应的时候,就开始检测过程,但一个server与组中其他成员孤立的时候,这个server会怀疑别的server都失败了,有超时设置,但他不能与组中大多数达成一致,他的怀疑就是无效的,所以他是不能执行任何的本地事务的。
组成员
server不但要同意事务提交,还要维护当前视图,如果server将一个新的server认为是组的一部分,那么组会自动重新配置,同样的,,一个server离开后,组信息也会重新配置。如果因为异常原因,server在离开组后,如果组没有达成一致,那么为了防止脑裂的发生,系统会被block,需要管理员去手工处理修复。
组复制