elasticsearch集群发现机制有两种:Zen Discovery和 EC2 discovery。
EC2:亚马逊弹性计算云。
Zen Discovery作用就相当于solrcloud中的zookeeper。EC2 discovery主要在亚马云平台中使用。Zen****发现机制zen发现机制是elasticsearch默认的内建模块。它提供了多播和单播两种发现方式,能够很容易的扩展至云环境。zen发现机制是和其他模块集成的,例如所有节点间通讯必须用trasport模块来完成。它分成几个子模块,下面详细解释:Ping
这是一个节点使用发现机制去寻找其他节点的进程。同时支持多播和单播方式的发现(也可以组合使用)多播
多播ping发现的方式通过向其他节点发送一个或多个多播请求来实现,存在的节点将会接收并且响应。提供下面的一组配置,以discovery.zen.ping.multicast做前缀:配置 描述group 默认值为224.2.2.4port 默认值为54328ttl 多播消息的ttl。默认为3address 绑定的地址,默认为null,即绑定所有可用的network接口。将elasticsearch.yml 配置multicast.enabled设为false可以禁用多播方式。单播
但多播禁用的情况下可以使用单播发现。需要提供一个主机列表作为路由列表。提供下面一组配置,以discovery.zen.ping.unicast作为前缀:配置 描述hosts 是一个数组的配置,或以逗号分隔的字符串。格式为host:port,或者host单播发现依赖transport模块实现。注意port默认应该是9300,不是9200,因为使用的是tranposrt。主节点选举
作为初始ping过程的一部分,一个集群的主节点需要被选举或加入。这是自动完成的。discovery.zen.ping_timeout(默认3秒)的配置用于处理网络速度慢或网络拥塞的场景。注意这个配置从0.15.1往后发生了变化(之前叫discovery.zen.initial_ping_timeout)节点在成为主节点之后可以通过将node.master设为false来退出。注意,一旦一个节点被明确设为一个客户端节点(node.client设为true),则不能再成为主节点(node.master会自动设为false)。discovery.zen.minimum_master_nodes用于控制选举行为发生的最小集群节点数量。推荐设为大于1的数值,因为只有在2个以上节点的集群中,主节点才是有意义的。错误检测
有两种错误检测的进程在运行。第一种是在主节点上,用于ping所有其他的集群节点,并验证它们是否存活。另一种是其他节点ping主节点,看主节点是否存活,或者是否需要初始化选举进程。下面的配置用于错误检测,以discovery.zen.fdprefix为前缀:配置 描述ping_interval 节点ping的频率。默认为1秒。ping_timeout 等待节点响应的超时时间,默认为30秒ping_retries ping失败/超时重试次数。默认为3.外部多播
多播发现也支持用外部多播请求来发现节点。外部客户端可以发送多播IP/group和端口请求,格式为:{ “request” : { “cluster_name” : “test_cluster” }}返回的响应信息格式和节点信息的返回格式类似(仅仅是节点级别的信息,也就是包含transport/http地址,以及节点属性):{ “response” : { “cluster_name” : “test_cluster”, “transport_address” : “…”, “http_address” : “…”, “attributes” : { “…” } }}注意,可以做到禁用内部多播发现,但是启用外部多播发现机制。方式为将discovery.zen.ping.multicast.enabled设为true(默认值),但是将discovery.zen.ping.multicast.ping.enabled设为false