• Elasticsearch的配置学习笔记


    文/朱季谦
    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关键参数

    1. #集群名称,默认是elasticsearch,用于区分同一网段下的不同集群
    2. cluster.name: my-application
    3. #集群当中的节点名称,用于区分同一个集群下的不同节点
    4. node.name: node-1
    5. #存储index索引数据的路径,可以存储到多个路径,例如:path.data: /temp/data1,/temp/data2,/temp/data3,
    6. path.data: /temp/data
    7. #日志文件的存储路径
    8. path.logs: /temp/logs
    9. #当前节点的ip地址,允许通过外部服务器访问本地ES服务:
    10. network.host: 0.0.0.0
    11. #该节点有机会成为master节点
    12. node.master: true
    13. #该节点能够存储数据
    14. node.data: true
    15. #######################设置head插件能够访问es###########
    16. #设置可以跨域,默认为false
    17. http.cors.enabled: true
    18. #支持所有域名访问
    19. http.cors.allow-origin: "*"
    20. #跨域允许设置的头信息,默认为X-Requested-With,Content-Type,Content-Length
    21. http.cors.allow-headers : X-Requested-With,Content-Type,Content-Length
    22. #端口
    23. http.port: 9250
    24. #设置集群主机列表,每个值应采用host:port,可实现主动发起ping集群主机信息
    25. discovery.zen.ping.unicast.hosts: ["host1","host2","host3"]
    26. #该参数表示只有足够的master候选节点时,才可以选举出一个master,该参数的值为master候选节点数量/2+1
    27. #例如:如果有3个master候选节点,100个数据节点。则quorum=3/2+1=2
    28. discovery.zen.minimum_master_nodes: 2
    29. #表示设置了节点与节点之间连接ping命令执行的超时时长。
    30. discovery.zen.fd.ping_timeout: 100s
    31. discovery.zen.ping.timeout: 100s
    32. #主动关闭多播模式
    33. discovery.zen.ping.multicast.enabled: false
    34. #默认90%,超过阈值后,所有索引都被修改为只读不可写状态
    35. cluster.routing.allocation.disk.watermark.flood_stage: 90%
    36. #默认90%,超过阈值后,索引的分片将不会被分配到该主机
    37. cluster.routing.allocation.disk.watermark.high: 90%

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

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

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

    jvm.options配置信息

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

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

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

    设置规则一般如下:

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

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

    log4j2.properties配置信息

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

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

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

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

    image

  • 相关阅读:
    猿创征文|『编程与创作』10款颜值颇高的宝藏工具
    黑苹果安装心得
    DevEco Studio 3.1差异化构建打包,提升多版本应用开发效率
    测试1号位的自我修养
    mysql按照日期分组统计数据(date_format&str_to_date)
    本地知识库开源框架Fastgpt、MaxKB产品体验
    多模态大语言模型综述(中)-算法实用指南
    AUTOSAR简介及分层架构
    大数据学习路线
    Keras学习记录之模型
  • 原文地址:https://blog.csdn.net/weixin_40706420/article/details/134415513