文章目录
- 1 架构图
- 2 节点自动发现机制
- 2.1 单播模式
- 2.2 多播模式
- 3 节点类型
1 架构图
2 节点自动发现机制
es内部,通过在集群中配置一个相同的集群名称(cluster.name)就能够将不同的节点链接到一个集群中。这是怎么实现的呢?—> 节点自动发现机制
es内部主要提供了4种自动发现机制。其中一个是默认实现,其他都是通过插件实现的。
- Azure discovery: 多播模式
- EC2 discovery: 多播模式
- Google Computer Engine (GCE)discovery : 多播模式
- Zen discovery : 默认实现,支持多播和单播模式。
Zen discovery是es内置的默认的发现模块。发现模块用于发现集群中的节点以及选举主节点(master 节点)。支持多播和单播模式,并且可以通过插件的方式扩展为其他形式的发现机制。
简单了解一下多播和单播模式的配置参数
discovery.zen.ping.multicast.enabled: true # 表示关闭多播模式的自动发现机制,主要是为了防止其他机器上的节点自动接入
discovery.zen.fd.ping_timeout: 100s # 表示设置了节点与节点之间连接ping命令执行时间的超时时长
discovery.zen.ping.timeout: 100s # 表示设置了节点与节点之间连接ping命令执行时间的超时时长
discovery.zen.minimum_master_nodes: 2 # 表示集群中选举主节点时,至少需要有多少个节点参与
discovery.zen.ping.unicast.hosts: ["172.31.26.200"] # 表示在单播模式下,节点自动发现哪些节点列表
2.1 单播模式
es支持多播和单播模式两种节点自动发现机制。不过多播模式已经不大被大多数操作系统所支持,加之安全性不高,所以一般关闭多播模式。
discovery.zen.ping.multicast.enabled: true
es默认就是单播模式,以防止其他节点无意加入集群。es支持同一个主机启动多个节点,因此只有在同一台机器上运行的节点参会自动组成集群。当集群的节点运行在不同的机器上时候,在单播模式下,需要为es配置一些它应该取尝试链接的节点列表
discovery.zen.ping.unicast.hosts: ["172.31.26.200","172.31.26.201"]
集群构建和主节点选举大致过程如下:
- 节点启动后,先执行
ping命令
(这个命令不是我们常说的Linux下的ping命令,而是es的一个rpc命令),如果discovery.zen.ping.unicast.hosts
配置了host地址,则ping该配置中的host地址。否则尝试ping 本地(localhost)的几个端口。ping命令
的返回结果包含该节点的基本信息以及该节点认为的主节点 - 选举开始时,主节点先从各个节点认为的主节点中选取,选举规则比较简单,即按照ID的字典排序,取第一个。需要注意的是,这里有个集群中节点梳理的的最小限制条件
discovery.zen.minimum_master_nodes
。如果节点数达不到这个最小限制,则循环上述过程,直到节点数量超过最小限制数,才可以开始选举。 - 最后选出一个主节点,如果只有一个本地节点,则主节点就是他自己
- 如果当前节点是主节点,则开始等待节点数达到
discovery.zen.minimum_master_nodes
,在提供服务。如果不是主节点,则尝试加入主节点所在的集群。
2.2 多播模式
仅仅需要在每个节点上配置号集群的名称和节点名称即可。互相通信的节点会根据es自定义的服务发现协议,按照多播的方式寻找网络上配置在同样集群内的节点。
3 节点类型
es中,每个节点可以有多个角色,节点即可以是候选主节点,也可以是数据节点。
节点的角色配置在elasticsearch.yml中配置
node.master: true # 是否是候选主节点
node.data: true # 是否是数据节点
数据节点负责数据存储相关的操作,比如对数据的增删改查和聚合等。所以数据节点对服务器的配置要求会比较高。
候选主节点,才拥有选举权(选举主节点)和被选举权(被选为主节点)。
主节点就要负责创建索引,删除索引,追踪集群中节点的状态,以及跟踪哪些节点是集群的一部分,并决定将哪些分片分配给相关的节点。