ElasticSearch自动发现机制——zen

3,232 阅读2分钟

只需要配置相同的cluster.name就能将节点加入同一集群,这是通过ES的发现机制来实现的。 ES目前主要推荐的自动发现机制,有如下几种:

  1. Azure classic discovery 插件方式,多播
  2. EC2 discovery 插件方式,多播
  3. Google Compute Engine (GCE) discovery 插件方式,多播
  4. Zen discovery 默认实现,多播/单播

其中,Zen Discovery 是 ES 默认内建发现机制。它提供单播和多播的发现方式。

多播

也叫组播,指一个节点可以向多台机器发送请求。ES 不建议生产环境使用这种方式,对于一个大规模的集群,组播会产生大量不必要的通信。

discovery.zen.ping.multicast.address:(用于通信的网络接口)
discovery.zen.ping.multicast.port:(通信端口)
discovery.zen.ping.multicast.group:(组播消息发送的地址)
discovery.zen.ping.multicast.buffer_size:(缓冲区大小)
discovery.zen.ping.multicast.enable:(是否开启组播,默认为true,使用单播,应该关闭组播,设为false)

单播

一个节点加入一个现有集群,或者组件一个新的集群时,发送请求到一台主机。当一个节点联系到单播列表中的成员时,它就会得到整个集群所有节点的状态,然后它会联系 master 节点,并加入集群。

discovery.zen.ping.unicast.hosts:(集群初始节点列表)
discovery.zen.ping.unicast.concurrent_connections:(单播发现使用的最大并发链接数,默认为10)

脑分裂(split-brain)

假设拥有一个10个节点组成的集群,有3个节点从集群中 断开连接,由于发现机制,这3个节点可能会组成一个新的集群,这样就产生了两个同名的集群,这就是脑分裂(split-brain)。 为了避免这种分裂的出现,可以设置以下属性:

discovery.zen.minium_master_nodes:6

定义组件集群至少需要相互连接的候选主节点数量。这时断开的3个节点由于小于6,不能组成新的集群。