es-v6版本

转:https://blog.csdn.net/weixin_43904316/article/details/109632736   docker容器安装elasticsearch:7.4.2 

es可以更快的获得你想要搜索的数据,先对比一下和mysql的区别:
es中的索引就相当于一个数据库,而类型就是一张表,文档则表示一行数据,一列代表着属性。es在存储的时候则是以json的方式进行存储的。

 

 

 es之所以快是因为他维护了一张倒排索引表

 比如把以上5条记录保存到es中,就会维护一张倒排索引表。比如1:红海行动就会被拆分成红海和行动。红海和行动在倒排索引中分别记录着文档1。2:探索红海行动就会被拆分成探索,红海和行动。这样倒排索引中就会分别记录对应的文档2。当我们需要进行检索红海特工行动的时候就会去倒排索引中找到 第1,2,5行。然后看他们对应的文档是哪一个,然后根据相关性得分进行比较。这里3,5比较适合,但是3命中率更高。

安装请看:https://blog.csdn.net/weixin_43904316/article/details/109632736

 

文/朱季谦   转:https://www.cnblogs.com/zhujiqian/p/14981060.html

 

 

 

Elasticsearch的配置

Elasticsearch的配置比较重要有三个,分别是elasticsearch.yml,jvm.options,log4j2.properties,这些配置文件都默认放在/config/目录下。

  • elasticsearch.yml:用于配置Elasticsearch基本信息,主要包括集群、节点、ip、端口等;
  • jvm.options:配置Elasticsearch依赖的JVM信息,ES是Java写的,当然需要考虑堆大小的分配;
  • log4j2.properties:用于配置Elasticsearch日志记录中的各个属性;

elasticsearch.yml关键参数


Elasticsearch是一个基于Lucene的搜索服务器。它提供一个分布式多用户能力的全文搜索引擎,基于RESTful web接口,Elasticsearch是用Java语言开发的。

关于Elasticsearch系列笔记,主要从Elasticsearch的配置、核心组件、架构设计、使用语法这四个方面来记录学习;

本学习总结主要依赖《Elasticsearch实战与原理解析》一书的读书笔记,我把自己阅读过程当中整理的读书笔记做成了一张脑图,上传至了我的GitHub

image

Elasticsearch的配置

Elasticsearch的配置比较重要有三个,分别是elasticsearch.yml,jvm.options,log4j2.properties,这些配置文件都默认放在/config/目录下。

  • elasticsearch.yml:用于配置Elasticsearch基本信息,主要包括集群、节点、ip、端口等;
  • jvm.options:配置Elasticsearch依赖的JVM信息,ES是Java写的,当然需要考虑堆大小的分配;
  • log4j2.properties:用于配置Elasticsearch日志记录中的各个属性;

elasticsearch.yml关键参数

#集群名称,默认是elasticsearch,用于区分同一网段下的不同集群
cluster.name: my-application
#集群当中的节点名称,用于区分同一个集群下的不同节点
node.name: node-1
#存储index索引数据的路径,可以存储到多个路径,例如:path.data: /temp/data1,/temp/data2,/temp/data3,
path.data: /temp/data
#日志文件的存储路径
path.logs: /temp/logs
#当前节点的ip地址,允许通过外部服务器访问本地ES服务:
network.host: 0.0.0.0
#该节点有机会成为master节点
node.master: true
#该节点能够存储数据
node.data: true

#######################设置head插件能够访问es###########
#设置可以跨域,默认为false
http.cors.enabled: true
#支持所有域名访问
http.cors.allow-origin: "*"
#跨域允许设置的头信息,默认为X-Requested-With,Content-Type,Content-Length
http.cors.allow-headers : X-Requested-With,Content-Type,Content-Length
#端口
http.port: 9250


#设置集群主机列表,每个值应采用host:port,可实现主动发起ping集群主机信息
discovery.zen.ping.unicast.hosts: ["host1","host2","host3"]
#该参数表示只有足够的master候选节点时,才可以选举出一个master,该参数的值为master候选节点数量/2+1
#例如:如果有3个master候选节点,100个数据节点。则quorum=3/2+1=2
discovery.zen.minimum_master_nodes: 2
#表示设置了节点与节点之间连接ping命令执行的超时时长。
discovery.zen.fd.ping_timeout: 100s
discovery.zen.ping.timeout: 100s
#主动关闭多播模式
discovery.zen.ping.multicast.enabled: false

#默认90%,超过阈值后,所有索引都被修改为只读不可写状态
cluster.routing.allocation.disk.watermark.flood_stage: 90%
#默认90%,超过阈值后,索引的分片将不会被分配到该主机
cluster.routing.allocation.disk.watermark.high: 90%

 

elasticsearch.yml配置当中,discovery.zen相关的参数设置,主要是用来实现集群当中节点自动发现机制的,存在多播模式与单播模式。

  • 多播模式:对某一个网络上的所有主机发送数据包。
  • 单播模式:对特定的主机进行数据传送。

在Elasticsearch中,发现机制默认被配置为使用单播模式,以防止节点无意中加入集群。

jvm.options配置信息

Elasticsearch官方中文文档上介绍道:“你几乎可以不去调整 Java 虚拟机 (JVM) 参数,如何非要做的话,你最有可能去修改heap size。”

也就是说,这个配置文件里,一般只需要关注堆大小的设置即可,因为每一个运行环境服务器都不一样,可以根据服务器具体情况来调整jvm.options里的堆大小。

#最小堆的值
-Xms1024m
#最大堆的值
-Xmx1024m
#表示老年代占用75%时就会触发垃圾回收
-XX:CMSInitiatingOccupancyFraction=75

设置规则一般如下:

  • 最小堆Xms与最大堆Xmx设置值相同,避免当堆大小不够时再进行动态调整出现不确定因素;

Elasticsearch性能调优与JVM性能调优类似,都是通过JVM参数来进行调整优化,至于如何能有效调整,后续我若在实践过程中涉及过,会补充这块的内容。

log4j2.properties配置信息

该配置是Elasticsearch日志记录中的各个属性设置,包括日志保存设置、日志保留天数、慢日志、日志滚动等。

比较需要关注的一条参数是:

#将日志滚动到路径后的数据里
appender.rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.log.gz
#使用基于时间的滚动策略
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
# 每天滚动一次日志
appender.rolling.policies.time.interval = 1
# 日志文件每达到 1GB 大小进行一次滚动
appender.rolling.policies.size.size = 1GB

所谓滚动日志,就是将当天的日志整理成一个以某种各种命名(例如时间)的文件,可存储历史的日志文件记录。我们在服务器的log目录下,经常看到类似的历史日志被打包成压缩包形式,这类被打包成压缩包的历史日志文件,即为回滚日志。我们经常在mysql里听到过日志回滚,其实,回滚的,即是这些原来被回滚存放在log目录下的日志文件。

 

 

discovery.zen.minimum_master_nodes深度解析

discovery.zen.minimum_master_nodes对集群的稳定性至关重要,防止脑裂的出现。

脑裂:

如果网络的故障导致一个集群被划分成两片,每片都有多个node,以及一个master。因为master是维护集群状态,以及shard的分配。如果出现了两个master,可能导致数据破损。

discovery.zen.minimum_master_nodes的作用是只有足够的master候选节点时,才可以选举出一个master。该参数必须设置为集群中master候选节点的quorum数量。

quorum的算法=master候选节点数量/2+1

举例:

1、如果有10个节点,都是data node,也是master的候选节点。则quorum=10/2+1=6

2、如果有3个master候选节点,100个数据节点。则quorum=3/2+1=2

3、如果有2个节点,都是data node,也是master的候选节点。则quorum=2/2+1=2(有问题)

如果其中一个节点挂了,那么master的候选节点只有一个,无法满足quorum数量。即无法选举出master。此时只能将quorum设置成1,但是设置为1有可能出现脑裂。

总结:一般es集群的节点至少要有3个,quorum设置为2

使用例2的场景说明quorum是如何防止脑裂

假设集群中3个节点有一个节点与其他节点无法通信,

1、如果master是单独的节点,另外2个节点是master候选节点。那么此时单独的master节点因为没有指定数量的候选master node在自己当前所在的集群里。因此会取消当前的master角色,尝试重新选举(无法选举成功)

另外一个网络区域内的node因为无法连接到master,就会发起重新选举,有两个候选节点,满足quorum,成功选举出一个master。

2、如果master和一个node在一个网络区域(A),另一个node单独在一个网络区域(B)。

B区域只有一个node,因为连不上master,会尝试发起选举,但不满足quorum,无法选举

A区域master继续工作,当前网络也满足quorum,不发起选举。

 

discovery.zen.minimum_master_nodes除了在配置文件设置,也可以动态设置

PUT /_cluster/settings
{
   "persistent":{
      "discovery.zen.minimum_master_nodes":2
   }
}

Elasticsearch节点类型(数据节点、候选节点)、主节点选举过程

节点类型、主节点选举过程

    节点类型(数据节点、候选节点)
    主节点选举过程(重要!!!)
节点类型(数据节点、候选节点)
在Elasticsearch中,每个节点可以有多个角色,节点既可以是候选主节点,也可以是数据节点
节点的角色配置在配置文件/config/elasticsearch.yml中设置即可,配置参数如下所示


在Elasticsearch中,默认都为true
数据节点 负责 数据的存储相关的操作,如对数据进行增、删、改、查和聚合等
数据节点 往往 对服务器的配置要求比较高,特别是对CPU、内存和I/O的需求很大
数据节点 梳理 通常随着 集群的扩大而弹性增加,以便保持Elasticsearch服务的高性能和高可用


候选主节点 是 被选举为主节点 的 节点
在集群中,只有候选主节点 才有 选举权和被选举权,其他节点不参与选举工作
一旦候选主节点 被选举为 主节点,则主节点 就要负责 创建索引、删除索引、追踪集群中节点的状态,以及 跟踪 哪些节点 是 群集的一部分,并决定 将哪些分片 分配给 相关的节点等
主节点选举过程(重要!!!)

配置单播模式后,集群构建及主节点选举过程如下:
节点启动后 先执行 ping命令(这里提及的ping命令不是Linux环境用的ping命令,而是Elasticsearch的一个RPC命令),如果discovery.zen.ping.unicast.hosts有设置,则ping设置中的host;否则尝试ping localhost的几个端口
ping命令的返回结果 会包含 该节点的基本信息 及 该节点认为的主节点

在选举开始时,主节点 先从 各节点认为的master中选,选举规则比较简单,即按照ID的字典序排序,取第一个
如果各节点 都没有认为的master,则从所有节点中选择,规则同上

需要注意的是,这里有个 集群中 节点梳理 最小值限制条件,即discovery.zen.minimum_master_nodes
如果节点数达不到最小值的限制,则循环上述过程,直到节点数超过最小限制值,才可以开始选举

最后选举出一个主节点,如果只有一个本地节点,则主节点就是它自己
如果当前节点是主节点,则开始等待节点数达到minimum_master_nodes,再提供服务
如果当前节点不是主节点,则尝试加入主节点所在集群
————————————————
版权声明:本文为CSDN博主「星光之子0317」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_38405646/article/details/121183990

 

 

##curl http://127.0.0.1:9200/_cat (查看候选节点等信息)

####curl http://127.0.0.1:9200/_cat/nodesv

##查看es健康状态
##curl  http://10.212.2.94:19201/_cluster/health?pretty
##查看索引
##curl http://10.212.2.94:19201/_cat/indices\?v
##删除索引
##curl -XDELETE 'http://10.212.2.94:19201/dop_message_20211130'(删除多个索引用逗号隔开即可,慎用通配符*删除索引)
##关闭索引只读状态
##curl -XPUT -H "Content-Type: application/json" http://10.212.2.94:19201/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}'

posted @ 2022-11-23 11:42  猎手结缘  阅读(87)  评论(0编辑  收藏  举报