zoukankan      html  css  js  c++  java
  • 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关键参数

    #集群名称,默认是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目录下的日志文件。

    image

    欢迎关注公众号,关于思考,关于文化,关于成长——

    image

    作者:朱季谦
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    简便的将DataSet导入到数据库中
    数据类型的小小研究:Access与SQL Server的数据类型
    【jxust acm 20120708】
    【D ECJTU_ACM 11级队员2012年暑假训练赛(2)】
    【hdu 2101 A + B Problem Too】
    【hdu 1014】
    【hdu 1164 Eddy's research I】
    【开始,安全编程】
    【hdu 1285 确定比赛名次】
    【hdu 1163 Eddy's digital Roots 】
  • 原文地址:https://www.cnblogs.com/zhujiqian/p/14981060.html
Copyright © 2011-2022 走看看