ES集群


 

elasticsearch为什么要集群?集群有什么作⽤

  • ⾼可⽤
    ⾼可⽤(High Availability)是分布式系统架构设计中必须考虑的因素之⼀,它通常是指,通过设
    计减少系统不能提供服务的时间。如果系统每运⾏100个时间单位,会有1个时间单位⽆法提供服
    务,我们说系统的可⽤性是99%。

  • 负载均衡
    将流量均衡的分布在不同的节点上,每个节点都可以处理⼀部分负载,并且可以在节点之间动态分
    配负载,以实现平衡。

  • ⾼性能
    将流量分发到不同机器,充分利⽤多机器多CPU,从串⾏计算到并⾏计算提⾼系统性能。

Elasticsearch 天生就是分布式的,会在后台自动执行

  • 分配文档到不同的容器 或 分片 中,文档可以储存在一个或多个节点中
  • 按集群节点来均衡分配这些分片,从而对索引和搜索过程进行负载均衡
  • 复制每个分片以支持数据冗余,从而防止硬件故障导致的数据丢失
  • 将集群中任一节点的请求路由到存有相关数据的节点
  • 集群扩容时无缝整合新节点,重新分配分片以便从离群节点恢复

ES在设计时就尽可能地屏蔽了分布式系统的复杂性,无需了解内部机制就可以使用ES。

 

es集群的基本核⼼概念

Elasticsearch 的配置⽂件中可以通过 node.master、node.data 来
设置节点类型。
node.master:是否是主节点(是否有竞选资格)
node.data:是否存储数据,如果为true则为数据节点
 

每个索引有⼀个或多个分⽚,每个分⽚存储不同的数据。分⽚可分为

  • 主分⽚( primary shard)
  • 复制分⽚(replica shard)

复制分⽚是主分⽚的拷⻉,可以分担系统压力、流量。默认每个主分⽚有⼀个复制分⽚,⼀个索引的复制分⽚的数量可以动态地调整,复制分⽚从不与它的主分⽚在同⼀个节点上。

 

搭建es集群

1、拷⻉elasticsearch-7.2.0安装包3份,分别命名es-a, es-b,es-c

2、分别修改配置⽂件elasticsearch.yml

#集群名称
cluster.name: my-application

#节点名称
node.name: node-1

#是不是有资格主节点
node.master: true
#是否存储数据
node.data: true

#最⼤集群节点数
node.max_local_storage_nodes: 3

#⽹关地址,常配置为实际ip
network.host: 0.0.0.0
#端⼝
http.port: 9200

#内部节点之间沟通端⼝
transport.tcp.port: 9300

#es7.x 之后新增的配置,写⼊候选主节点的设备地址,在开启服务后可以被选为主节点。此处在同一机器的不同端口模拟多个节点
discovery.seed_hosts: ["localhost:9200","localhost:9201","localhost:9202"]
#es7.x 之后新增的配置,初始化⼀个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["node-1", "node-2","node-3"]

#数据和存储路径
path.data: /Users/louis.chen/Documents/study/search/storage/a/data
path.logs: /Users/louis.chen/Documents/study/search/storage/a/logs

3、分别启动a ,b ,c 三个节点

4、访问 localhost:9200/_cat/health?v ,如果返回的node.total是3,代表集群搭建成功

但这种方式看到的集群信息很抽象,可以在kibana的可视化地查看集群信息,且信息更详细。带星号的是master节点。
 

先在kibana.yml中配置集群节点

elasticsearch.hosts: ["http://localhost:9200","http://localhost:
9201","http://localhost:9202"]

启动kibana,访问localhost:5601 在monitor中即可看到es集群的信息

 

集群的分片管理

分片是针对index而言的

分⽚(shard):因为ES是个分布式的搜索引擎, 所以索引通常都会分解成不同部分, ⽽这些分布在不同节点的数据就是分⽚. ES⾃动管理和组织分⽚, 并在必要的时候对分⽚数据进⾏再平衡分配, 所以⽤户基本上不⽤担⼼分⽚的处理细节。

副本(replica):ES默认为⼀个索引创建1个主分⽚, 并分别为其创建⼀个副本分⽚. 也就是说每个索引都由1个主分⽚成本, ⽽每个主分⽚都相应的有⼀个copy.

Elastic search7.x之后,如果不指定索引分⽚,默认会创建1个主分⽚和⼀个副分⽚,⽽7.x版本之前的⽐如6.x版本,默认是5个主分⽚

创建索引(指定分⽚数量)

PUT nba
#指定分片数量
{"settings":{"number_of_shards":3,"number_of_replicas":1},"mappings":
{"properties":{"birthDay":{"type":"date"},"birthDayStr":
{"type":"keyword"},"age":{"type":"integer"},"code":
{"type":"text"},"country":{"type":"text"},"countryEn":
{"type":"text"},"displayAffiliation":{"type":"text"},"displayName":
{"type":"text"},"displayNameEn":{"type":"text"},"draft":
{"type":"long"},"heightValue":{"type":"float"},"jerseyNo":
{"type":"text"},"playYear":{"type":"long"},"playerId":
{"type":"keyword"},"position":{"type":"text"},"schoolType":
{"type":"text"},"teamCity":{"type":"text"},"teamCityEn":
{"type":"text"},"teamConference":
{"type":"keyword"},"teamConferenceEn":{"type":"keyword"},"teamName":
{"type":"keyword"},"t

 

修改副分⽚数量

PUT /nba/_settings
{
 "number_of_replicas": 2
}

 

es集群健康管理

1、查看集群的健康状态

http://127.0.0.1:9200/_cat/health?v
  • status :集群的状态,red红表示集群不可⽤,有故障。yellow⻩表示集群不可靠但可⽤,⼀般单节点时就是此状态。green正常状态,表示集群⼀切正常。
  • node.total :节点数,这⾥是3,表示该集群有三个节点。
  • node.data :数据节点数,存储数据的节点数,这⾥是3。
  • shards :表示我们把数据分成多少块存储。
  • pri :主分⽚数,primary shards
  • active_shards_percent :激活的分⽚百分⽐,这⾥可以理解为加载的数据分⽚数,只有加载所有的分⽚数,集群才算正常启动,在启动的过程中,如果我们不断刷新这个⻚⾯,我们会发现这个百分⽐会不断加⼤。
     

green:所有的主分片和副本分片都已分配。你的集群是 100% 可用的。
yellow:所有的主分片已经分片了,但至少还有一个副本是缺失的。不会有数据丢失,所以搜索结果依然是完整的。不过,你的高可用性在某种程度上被弱化。如果 更多的 分片消失,你就会丢数据了。把 yellow 想象成一个需要及时调查的警告。
red:至少一个主分片(以及它的全部副本)都在缺失中。这意味着你在缺少数据:搜索只能返回部分数据,而分配到这个分片上的写入请求会返回一个异常。

 

2、查看集群的索引数

http://127.0.0.1:9200/_cat/indices?v

返回了集群中的所有索引信息,我们可以看到所有索引的健康情况和具体信息

  • health : 索引健康,green为正常,yellow表示索引不可靠(单节点),red索引不可⽤。与集群健康状态⼀致。
  • status : 状态表明索引是否打开,只索引是可以关闭的。
  • index : 索引的名称
  • uuid : 索引内部分配的名称,索引的唯⼀表示
  • pri : 集群的主分⽚数量
  • docs.count : 这⾥统计了⽂档的数量。
  • docs.deleted : 这⾥统计了被删除⽂档的数量。
  • store.size : 索引的存储的总容量
  • pri.store.size : 主分别的容量

 

3、查看磁盘的分配情况

http://127.0.0.1:9200/_cat/allocation?v

返回每个节点的磁盘情况。

  • shards : 该节点的分⽚数量
  • disk.indices : 该节点中所有索引在该磁盘所点的空间。
  • disk.used : 该节点已经使⽤的磁盘容量
  • disk.avail : 该节点可以使⽤的磁盘容量
  • disk.total : 该节点的磁盘容量

 

4、查看集群的节点信息

http://127.0.0.1:9200/_cat/nodes?v

URL返回了集群中各节点的情况。

  • ip : ip地址
  • heap.percent : 堆内存使⽤情况
  • ram.percent : 运⾏内存使⽤情况
  • cpu : cpu使⽤情况
  • master : 是否是主节点

 

5、查看集群的其他信息

http://127.0.0.1:9200/_cat
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页