【Elasticsearch7.0】之重要配置

  |   0 评论   |   425 浏览

es的默认配置已经很强大了,但是在正式生产上使用的时候,还是需要修改下配置的。如果你的es要上生产环境了,那么建议你可以设置这些配置:

path配置

如果使用压缩包解压,那么data和log文件在$ES_HOME/下面。如果这些文件在默认文件夹下面,那么你升级es版本的时候,会有很大的风险。那么如何来更改这些路径的配置呢?

path:
  logs: /var/elasticsearch/log
  data: /var/elasticsearch/data

如果用RPM或者Debian来安装的话,他们已经定义了data和log的目录。path.data可以设置多个路径,所有路径都将存储数据。

path:
  data:
    - /mnt/elasticsearch_1
    - /mnt/elasticsearch_2
    - /mnt/elasticsearch_3

Cluster名称

如果一个节点要加入一个集群,那么他们的cluster.name必须设置为一样,这样,他们会自动加入该集群。默认的集群名字是elasticsearch,但是你最好去修改他,防止测试的es加入到生产的es集群中。

cluster.name: logging-prod

在生产上要确保相同的集群要有相同的集群名称,不然会导致加入错误的集群。

Node 名称

node.name用来表示每个集群节点的名称,如果不指定的话,在启动的时候会默认生成一个人类不可读的名称,建议在elasticsearch.yml中配置。

node.name: prod-data-2

Network host

默认情况下,es只绑定了127.0.0.1 和[::1]。这个配置运行单个节点是没问题的。es的一个节点可以起多个,这样在测试环境进行集群测试是很有帮助的,但是在生产上建议不要这么做。
如果你的节点需要加入到某个集群里面,那么你需要配置network.host参数

network.host:192.168.1.10

network.host也支持一些特殊的值:_local__site__global_:ip4 和:ip6
注意:只要你配置了该值,es会认为你现在是生产模式,会把一些系统启动检查设置为异常。

Discovery配置

生产上需要配置两个参数,让节点可以发现彼此,并能选出主节点。
discovery.seed_hosts
在不配置任何网络的情况下,es会自动尝试寻找集群下的其他节点。这提供了一种无需进行任何配置的自动集群体验。如果你需要发现其他节点,那么需要在discovery.seed_hosts里面配置节点地址,这些节点必须是存活的且是主节点。可以通过逗号或者数组来配置多个,配置格式为host:port或者host,如果没有设置端口那么使用transport.profiles.default.port返回的transport.port端口。IPv6地址必须用括号括起来。默认的配置是127.0.0.1, [::1]。

cluster.initial_master_nodes
如果你没有指定这个参数,那么es在启动集群的时候,会自动帮你做master和从节点的选举,这样是不安全的,或者不是你想要的,那么我们可以通过这个配置来显示的指定那个节点可以被设置为主节点。

discovery.seed_hosts:
   - 192.168.1.10:9300
   - 192.168.1.11 
   - seeds.mydomain.com 
cluster.initial_master_nodes: 
   - master-node-a
   - master-node-b
   - master-node-c

cluster.initial_master_nodes里面的值需要和每个节点的node.name对应。

Heap大小

默认情况下,es在jvm分配的堆大小是1G。如果在生产上,那么需要配置该参数,确保es有足够的堆可用。es会使用jvm.options里面分配的Xms(最小堆大小)和Xmx(最大堆大小)的值。这些设置的值取决于服务器上可用的RAM数量,一般建议:
1、设置xms和xmx一样大。
2、堆越多,用于缓存的内存越多,但是注意堆越多会导致垃圾收集的停顿时间越长。
3、不要设置Xmx超过物理内存的50%,要确保文件系统缓存的内存大小,文件系统缓存内存越大可以缓存的数据越多,性能越高。
4、不要设置Xmx的值超过压缩指针的截止值,不同操作系统值不一样,但是一般在32G左右,可以通过查看日志来看是否设置超过压缩指针截止值。

heap size [1.9gb], compressed ordinary object pointers [true]

5、最好的就是在压缩指针截止值下面一点,一般的在26G是比较安全的,因为大部分系统的阀值差不多在26G左右,但是有些系统可能高达30G。可以配置JVM参数来验证是否在限制之下,可以配置-XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOopsMode这两个参数,可以去日志输出那边看:

heap address: 0x000000011be00000, size: 27648 MB, zero based Compressed Oops

如果超过了阀值,那么会显示下面日志:

heap address: 0x0000000118400000, size: 28672 MB, Compressed Oops with base: 0x00000001183ff000

如何在jvm.options里面设置堆大小:

-Xms2g 
-Xmx2g

Xms:设置最小堆大小为2G
Xmx:设置最大堆大小为2G

也可以通过环境变量来设置堆大小:

ES_JAVA_OPTS="-Xms2g -Xmx2g"  ./bin/elasticsearch

设置最小堆大小为2G,设置最大堆大小为2G

Heap dump路径

当es在发生OOM的时候,会生成堆dump文件,如果你没有指定该配置,那么该文件会在默认的目录下,(安装包安装的话默认路径是在/var/lib/elasticsearch下,如果是压缩包解压的话,默认路径是在data下面。)如果你想要自定义该文件的路径,那么需要设置-XX:HeapDumpPath 该值,来指定dump文件路径。如果只配置了路径,那么es会自动生成一个以当前es的PID为文件名的文件,如果指定了具体的文件名,那么要确保该该文件不存在,否则在发生OOM的时候,dump会生成失败。相关配置如下:

-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=data
-XX:ErrorFile=logs/hs_err_pid%p.log

GC日志

默认情况下,es是开启了gc日志,gc的日志文件默认是跟es的日志文件在同一个目录,默认超过64M的时候会滚动文件,最多不会超过2G。相关配置如下:

8:-XX:+PrintGCDetails
8:-XX:+PrintGCDateStamps
8:-XX:+PrintTenuringDistribution
8:-XX:+PrintGCApplicationStoppedTime
8:-Xloggc:logs/gc.log
8:-XX:+UseGCLogFileRotation
8:-XX:NumberOfGCLogFiles=32
8:-XX:GCLogFileSize=64m

Temp directory

默认情况下,es启动的时候,会创建一个临时文件,但是像linux会把这种临时文件进行定期清除,这时如果es要使用这些临时文件,那么就会有问题。在使用.deb 或者.rpm安装包时,会生成一些私有的临时文件,这些文件不会被操作系统清理掉。如果是压缩包安装,那么需要手动指定临时文件,并给这些文件设置权限,只有es用户才能操作他们,可以使用$ES_TMPDIR环境变量来设置。

JVM致命错误日志

默认的情况下,JVM的致命错误日志与es的日志文件路径一致。这些日志会记录JVM发生致命错误的时候的信息。如果你想修改该文件的路径,可以在jvm.options里面设置-XX:ErrorFile参数。

也可以关注我的公众号:程序之声
图片
关注公众号,领取更多资源

本文为博主原创文章,未经博主允许不得转载。

评论

发表评论