脑裂定义 #
一个整体的系统分裂成两个独立的节点,争夺共享资源造成系统混乱
出现脑裂的原因 #
主心跳检测超时,导致主备切换,备提供服务后,主又恢复正常,出现双主
解决思路 #
-
仲裁机制 通过设置一个仲裁角色,定时探活主备,但是仲裁者会存在高可用和性能瓶颈
-
授权机制 假设slave已经提供服务,会有颁发的授权lease,假设master还在提供服务则lease必然是失效的,请求应当是失败的
-
隔离机制
- 共享资源fencing:确保只有一个master往共享存储提供写数据
- 客户端fencing:确保只有一个master可以响应客户端请求
- slave fencing:确保只有一个master可以向slave下发命令