es系列:集群分布式架构及原理

elasticsearch是用于大数据的存储、搜索、统计分析的,所以elasticsearch天生就支持分布式部署。

集群、节点

节点:一个运行的elasticsearch实例,就是一个节点。这里说的实例指的是通过"./bin/elasticsearch"命令启动的实例。当然,一台机器也可以启动几个实例,每个实例就是一个节点。

集群:一个或者多个拥有相同cluster.name的节点构成了集群。

特别说明一下,对于单台机器上的实例,如果cluster.name相同,会自动组成集群(单播模式)

单播模式下,不同机器上的节点不会组成集群。与单播模式相对应的是组播模式,组播模式下不同机器上的节点满足一定条件也会自动发现并组成集群的机制。

单播模式相比组播模式更加安全,默认是单播模式,组播模式下可能会出现某些节点意外加入集群。

集群中的节点类型

主节点:管理集群范围内的变更,如节点的加入、删除;索引的增加删除等;但不需要涉及文档级别的变更及搜索,所以即使流量增加,数据增加主节点一般也不是瓶颈。

数据节点:数据节点上保存了数据分片,主要负责数据相关的操作,如文档的增删改查等。

路由节点:既不负责集群内的一些变更,也不负责数据的存储,其主要作用是转发请求,起到负载均衡的作用。

摄取节点(ingest node):在索引数据之前,执行一些预处理操作(需要用户配置这些操作)。

选主机制

什么时候选主:集群启动、master失效

Bully选举算法:每个节点有一个惟一的id,对id进行排序,任何时刻当前leader都是id最大的节点。这种选举算法优点是易于实现,缺陷是但最大id的节点不稳定时,容易造成频繁的切换主节点。

ES的改进:每个节点投票给自己所知的id最小的节点。某个节点得票超过一定的数目(半数以上,可配置),并且自己也投票给自己,才可以被选举为主节点(解决脑裂问题)。为了解决主节点抖动问题,采取了一定的推迟选举机制,也就是说认为主节点失败而不是抖动的条件下,才进行选举。

具体选举流程如下:

ES选主流程

选主之后如何同步数据:新选的master未必有最新的集群状态信息,新的master会枚举集群中所有有资格称为master的节点的状态信息,然后通过版本号选取最新的状态信息作为当前集群的状态信息。

集群扩容

新节点的加入,不需要修改其他节点的列表。

原理:新节点主动联系其他节点,然后得到整个集群的状态,然后找到master节点,并加入集群。

宕机之后

对于普通的数据节点宕机之后,数据需要重新的rebalance

相关链接:

高可用架构的6大常规方案

kafka官网译文

数据库性能优化的五种方案

于LVS+Keepalive搭建分布式集群(原理+实例)

举报
评论 0