手把手带你搭建 Elasticsearch 集群

2020-05-29 00:00:00 数据 集群 节点 设置 分片

一、为什么要搭建 Elasticsearch 的集群?

Elasticsearch 是一个开源的高扩展的分布式全文检索引擎

通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

ES主要解决问题:

  • 检索相关数据
  • 返回统计结果
  • 速度要快

1. 高可用性

通过设计减少系统不能提供服务的时间,假设某个时刻服务节点宕机则该节点为临时不可用,如果系统能一直提供服务,则它的可用性为,因此为了减少 Elasticsearch 服务不可用时间,集群的作用就体现出来了。

当然如果要保证在宕机期间,ES 的数据保证不丢失,则需要对其数据进行备份,因此有了分片副本的概念。

分片:将数据切分成多个部分,在ES中所有数据都存储于索引(index)之上,但实际索引只是维护了与多个分片之间的联系,数据则是被路由到多个分片。例如一个索引有5个分片,则该索引将会有0,1,2,3,4,这五个分片,其指定每个文档数据存储在哪个分片是根据路由运算公式has(_routing)%number_of_primary_shards指定,使数据均匀分布在集群当中。

如果存在某个或某几个分片存储数据量特别大,可以使用索引分区index.routring_partition_size, 但使用后限制有无法创建join_feild 关系映射_routing 将成为写入数据必要传入参数
副本:副本是主分片的复制分片,可以灵活调整,提高了整个集群的容错性,且需要注意的是副本分片不能与主分片在同一个节点。一般来说,Elasticsearch 会尽量把一个索引的不同分片存储在不同的主机上,分片的副本也尽可能存在不同的主机上,这样可以提高容错率,从而提高高可用性。

2. 健康状态

Elasticsearch集群存在三种健康状态,单节点 Elasticsearch 也可以算是一个集群。

  • green(绿色):代表所有索引的主分片和副本均已分配且可用,集群是 可用;
  • yellow(黄色):主分片已分配且全部主分片可用,但所有的副本不全部可用,可能是缺失,也有可能是某个索引的副本未被分配,可以通过move cancel allocate命令所属的 API 进行分配或移动分片到指定节点,使用这里要注意主分片和其副本绝不能在同一节点。此时系统容错性和集群高可用被弱化;
  • red(红色):所有的主分片不全部可用,这代表很有可能存在丢失数据的风险,如果只有一个单节点 Elasticsearch 那么属于一种 yellow 状态,因为没有副本;

3. 存储空间

多个节点的 ES 集群,那么相对单节点来说拥有更多的存储空间,可以设置elasticsearch.yml设置datalog的挂载目录。

二、ES 集群及节点类型

集群由多个节点构成,每一台主机则称为一台节点,在伪集群中每一个 ES 实例则为一个节点。

上述图中则为一个集群,其中 Node-1 是主节点,主节点有权限控制整个集群,有权限控制整个集群。每个节点都有三个分片,其中P0 P1 P2代表 Primary 为主分片,R开头的则代表为每个主分片对应的副本分片,一共是 3 个主分片,每个主分片有两个对应的副本分片。

  • 主节点:即 Master 节点。主节点的主要职责是和集群操作相关的内容,如创建或删除索引,跟踪哪些节点是群集的一部分,并决定哪些分片分配给相关的节点。稳定的主节点对集群的健康是非常重要的。默认情况下任何一个集群中的节点都有可能被选为主节点。索引数据和搜索查询等操作会占用大量的 cpu,内存,io 资源,为了确保一个集群的稳定,分离主节点和数据节点是一个比较好的选择。虽然主节点也可以协调节点,路由搜索和从客户端新增数据到数据节点,但好不要使用这些专用的主节点。一个重要的原则是,尽可能做尽量少的工作;
  • 数据节点:即 Data 节点。数据节点主要是存储索引数据的节点,主要对文档进行增删改查操作,聚合操作等。数据节点对 CPU、内存、IO 要求较高,在优化的时候需要监控数据节点的状态,当资源不够的时候,需要在集群中添加新的节点;
  • 负载均衡节点:也称作 Client 节点,也称作客户端节点。当一个节点既不配置为主节点,也不配置为数据节点时,该节点只能处理路由请求,处理搜索,分发索引操作等,从本质上来说该客户节点表现为智能负载平衡器。独立的客户端节点在一个比较大的集群中是非常有用的,他协调主节点和数据节点,客户端节点加入集群可以得到集群的状态,根据集群的状态可以直接路由请求;
  • 预处理节点:也称作 Ingest 节点,在索引数据之前可以先对数据做预处理操作,所有节点其实默认都是支持 Ingest 操作的,也可以专门将某个节点配置为 Ingest 节点。以上就是节点几种类型,一个节点其实可以对应不同的类型,如一个节点可以同时成为主节点和数据节点和预处理节点,但如果一个节点既不是主节点也不是数据节点,那么它就是负载均衡节点。具体的类型可以通过具体的配置文件来设置;

Elasticsearch 处理查询请求时节点工作流程:

  • 请求被交给主节点;
  • 主节点接收请求,将请求广播到该索引在数据节点上的每个分片(shard);
  • 每个分片执行搜索请求,并将结果返回;
  • 分片的Result在主节点上进行合并,排序后返回给用户;

三、搭建 Elasticsearch7.X 伪集群

1、下载 ES

这里我们把 ES 安装在服务器的opt目录下

# 使用华为镜像超快!! 并重命名 elasticsearch7.4-x86.tar.gz(x86是系统指令架构)
$ wget -O elasticsearch7.4-x86.tar.gz https://mirrors.huaweicloud.com/elasticsearch/7.4.0/elasticsearch-7.4.0-linux-x86_64.tar.gz
# 解压
$ tar -zxvf elasticsearch7.4-x86.tar.gz

相关文章