大家熟知的关系型数据库有Oracle\DB2\MySQL等。
对于他们的集群也有很多种方式,Oracle Rac、DB2 PureScale,Mysql NDBCluster等。
对于集群的仲裁方式也各有不同。
欢迎各位同业兄弟贡献出自己对其中的一些理解,最终汇总成一个完整的知识点回馈给大家。
mysql galera 的仲裁机制
当集群出现故障的时候,galera cluster会启动特别的仲裁算法来选举一个节点作为主节点,集群里成员的数量决定了quorum仲裁的投票数(最好是单数),当一个节点出现故障不再属于集群的时候,galera就会启动一次仲裁选举。默认设置是5秒。galera有独立的进程叫做garbd来做仲裁者Arbitrator
galera仲裁者是集群的一员,参与投票,但不真正参与复制。
galera仲裁者的设立出于以下两个目的:
1、偶数节点时,仲裁者作为一个节点使集群成为奇数,从而避免脑裂
2、它可以请求一个连续的应用状态快照,可用来做备份
尽管仲裁者不存数据,它必须能够流经所有的复制流,所以把仲裁者放在一个和其他节点网络连接差的网络环境里会导致整个cluster的性能变差。仲裁者倒了并不会影响cluster的操作,可以在任何时间挂一个新的节点上去
Oracle通过心跳来了解彼此的状态。
1.如果某个节点宕机,那么健康的节点就会获得整个集群的控制权;
2.如果心跳出现问题,各个节点都正常,就是常说的脑裂split brain,通过投票算法,将某个节点剔除,获得控制权。