elaticsearch之discovery模块

discovery模块负责发现集群中的节点,同时选举master节点。

es是一个p2p的系统,当操作发生的时候节点直接直接通信。所有的api不用跟master node先联系。master node的作用仅仅是维护集群的全局状态,并且在集群中有节点加入或者移除的时候重新分配shards。每次集群状态的改变,会通知集群中的其他节点(方式取决于discovery模块的具体实现)。

cluster.name用于设置集群名称,作为跟其他集群区分的标志,默认值是elasticsearch,强烈建议赋予一个具有逻辑意义的集群名称。

1:azure discovery

不做介绍

2:ec2 discovery

不做介绍

3:google compute engine discovery

不做介绍

4:zen discovery

zen discovery渗透在es的各个模块之中,是默认的实现方式。提供了多播和单播的节点发现方式,易于在云环境中进行扩展。

zen discovery跟es各个模块集成在一起,例如:节点之间的通信通过transport模块实现。

zen discovery划分为多个子模块,下边逐个介绍。

4.1 ping

ping是节点之间互相发现彼此的过程,支持多播和单播,也可以组合使用。

4.2 multicast

多播是指向其他节点发送一个或者多个多播请求,其他节点给出回应的过程。提供了如下配置都带有discovery.zen.ping.multicast的前缀。

group:组地址。默认224.2.2.4

port:端口。默认54328

ttl:多播消息的ttl。默认3

address:绑定地址,默认null,表示可以绑定所有可用的网络接口

enable:是否可用。默认true

4.3 unicast

在禁用多播的情况下可以启用单播模式。单播需要一个hosts列表。提供了如下配置都带有discovery.zen.ping.unicast的前缀。

hosts:hosts列表。要么设置为一个数组,要么设置为用逗号隔开的字符串。比如host:port或者host[port1-portn].

单播的发现节点方式需要借助transport模块来实现。

4.4 master election

作为ping过程的一部分,需要选举出一个master节点或者加入一个已经指定的master节点,这个过程是自动完成的。discovery.zen.ping_timeout(默认3s)设置ping的超时时间,以应对网络拥堵的情况(设置一个较大的值可以减少失败几率)。一旦一个节点进入集群,就会向master发送一个请求,用参数discovery.zen.join.time_out设置,默认是discovery.zen.ping_timeout的20倍。

当master节点停机或者遇到问题挂点,ping模块重新启动推举出一个新的master节点。这一轮的ping在一定程度上是对网络故障的一种保护,防止节点不公正的认为master已经挂掉了。在这种情况下,节点可以简单的从其他节点处获知当前活跃的master节点。

如果设置node.master:false则该节点将不会最为master节点。如果设置node.client:true表示该节点设设置为client几点,它也就自动丧失了被推选为master节点的资格。

discovery.zen.minimum_master_nodes:设置集群中可见的具有master资格的节点数目最小值(这个解释有待进一步商榷).

必须设置为满足quorum机制的节点数目。避免拥有两个master的资格,因为quorum值是2.因此,丢失任何一个master都会导致集群不可用。

这个属性的主要作用是避免发生集群分裂。

4.5 fault detection

es有两个错误检测的进程在运行。一个是master去ping其他节点,来获知节点是否存活。另一个是其他节点去ping master,来获知master是否存活,是否需要执行推举流程。

错误检测进程的配置以discovery.zen.fd作为前缀。

ping_interval:间隔时间,默认1s。

ping_timeout:等到ping的返回时间,默认30s

ping_retries:重试次数。默认3次。3次之后表示失败 

4.6 external multicast

支持外部多播机制。外部客户端可以发送多播请求:

{
    "request" : {
        "cluster_name": "test_cluster"
    }
}
响应信息跟节点之间的响应类似:

{
    "response" : {
        "cluster_name" : "test_cluster",
        "transport_address" : "...",
        "http_address" : "...",
        "attributes" : {
            "..."
        }
    }
}
可以禁用内部多播机制采用外部多播,设置discovery.zen.ping.multicast.enabled: true(默认),discovery.zen.ping.multicast.ping.enabled:false。

4.7 cluster state updates

集群中只有master节点可以更改集群的状态,当更新状态的时候,会把更新信息广播到其余节点。当集群中节点接收的状态更新信息,更新自己的状态信息并给master回应。master会在一定超时时间内等待所有返回,才会执行下一次更新。discovery.zen.publish_timeout默认30s。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值