脑裂问题就是集群中出现了多个master,导致集群内部信息混乱,无法对外提供一致信息。
解决方案就:
避免出现多个master。
根本解决方案:
没有。 由于网络原因不可控。
避免措施:
1,master节点与data节点分离,配置如下:
主节点配置为:
node.master: true
node.data: false
从节点配置为:
node.master: false
node.data: true
2,master节点采用(CMS)GC算法,即使GC全局回收,也会及时响应。
3,discovery.zen.ping_timeout(默认3秒),默认情况下,一个节点会认为,如果master节点在3秒之内没有应答,那么这个节点就是死掉了,而增加这个值,会增加节点等待响应的时间,从一定程度上会减少误判。
4,设置选举触发条件,discovery.zen.minimum_master_nodes:1
该参数是用于控制选举行为发生的最小集群主节点数量。
当备选主节点的个数大于等于该参数的值,且备选主节点中有该参数个节点认为主节点挂了,进行选举。官方建议为
(n/2)+1,n为主节点个数(即有资格成为主节点的节点个数),增大该参数,当该值为2时,我们可以设置master
的数量为3,这样,挂掉一台,其他两台都认为主节点挂掉了,才进行主节点选举。
5,data节点的默认的master发现方式有multicast修改为unicast:
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["master1", "master2", "master3"]