ElasticSearch集群生产调优

目录

 

1、服务器硬件以及内存调优

1.1、调整交换区的swap大小

1.2、调整普通用户打开文件数以及线程数的限制

1.3、调整ES的JVM堆内存大小

2、ElasticSearch的参数调优

2.1、ES集群自动发现机制

2.2、集群的主节点选举

2.3、集群的故障检测

2.4、集群状态更新

2.5、no Master  block机制

2.6、增加 Refresh 时间间隔

2.7、综合调优


1、服务器硬件以及内存调优

1.1、调整交换区的swap大小

(1)尽量关闭linux的交换区的内存空间

swapoff -a

(2)若不能完全禁用swap交换区的空间,则调整swap参数值(尽量调低)

vim /etc/sysctl.conf

vm.swappiness=1(各节点都需要设置)

swappiness参数值可设置范围在0到100之间。 低参数值会让内核尽量少用交换,更高参数值会使内核更多的去使用交换空间。默认值为60。

(3)若没法更改我们的swap的参数值,那么我们也可以在es当中配置,禁止JVM堆内存当中的数据交换到磁盘当中去;

cd /install/elasticsearch-6.7.0/config/

vim elasticsearch.yml 将如下配置设置为true

bootstrap.memory_lock:true

1.2调整普通用户打开文件数以及线程数的限制

(1)需要解除linux系统当中打开文件最大数目的限制

各节点使用es用户执行以下命令解除打开文件数据的限制:

sudo vi /etc/security/limits.conf  添加如下内容

* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096

(2)普通用户启动线程数限制

各节点执行以下命令打开文件最大数

sudo vi /etc/sysctl.conf

vm.max_map_count=655360

fs.file-max=655360

执行以下命令生效

sudo sysctl -p

1.3、调整ES的JVM内存大小

官方建议ES的堆内存大小不要超过32GB;JVM堆内存大小与系统内存大小,尽量五五分

cd /install/elasticsearch-6.7.0/config

vim jvm.options  修改最大堆内存和最小堆内存

-Xms32g

-Xmx32g

2、ElasticSearch的参数调优

2.1、ES集群自动发现机制

在配置文件中添加ES集群的自动发现机制

vim elasticsearch.yml

discovery.zen.ping.unicast.hosts: ["node01", "node02", "node03"]

配置在每轮ping操作中等待DNS主机名查找的超时时间。需要指定时间单位,默认为5秒。

discovery.zen.ping.unicast.resolve_timeout:30

2.2、集群的主节点选举

(1)Master

Master:主要负责集群中索引的创建、删除以及数据的Rebalance等操作。Master不负责数据的索引和检索,所以负载较轻。

当Master节点失联或者挂掉的时候,ES集群会自动从其他Master节点选举出一个Leader。为了防止脑裂,常常设置参数为discovery.zen.minimum_master_nodes=N/2+1,其中N为集群中Master节点的个数。建议集群中Master节点的个数为奇数个,如3个或者5个。

设置为Master节点的方式如下:(vim elasticsearch.yml)

node.master: true    #设置为主节点

node.data: false    #不是数据节点

node.ingest: false   #不是ingest 节点

search.remote.connect: false   #禁用跨集群查询

总结:设置多个master node作为我们集群当中的主节点,其中多个master node会通过选举机制实现选择一个master node作为active,其他的作为standBy,如果master  active状态的主节点宕机,es会从其他的standBy状态的主节点当中重新选择一个新的作为active状态的节点。

(2)Data Node

主要负责集群中数据的索引和检索,一般压力比较大。建议和Master节点分开,避免因为Data Node节点出问题影响到Master节点。

设置一个节点为Data Node节点的方式如下:

node.master: false    #不是主节点

node.data: true       #作为数据二级店

node.ingest: false    # 不是ingest节点

search.remote.connect: false   #禁用跨集群查询

(3)其他设置

控制节点加入某个集群或者开始选举的响应时间(默认3s)

discovery.zen.ping_timeout:3

一旦节点决定加入一个存在的集群,它会发出一个加入请求给主节点,这个请求的超时时间由discovery.zen.join_time控制,默认是 ping 超时时间(discovery.zen.ping_timeout)的20倍

2.3集群的故障检测

两个故障检测进程在集群的生命周期中一直运行。一个是主节点的,ping集群中所有的其他节点,检查他们是否活着。另一种是每个节点都ping主节点,确认主节点是否仍在运行或者是否需要重新启动选举程序。

使用discovery.zen.fd前缀设置来控制故障检测过程,配置如下:

配置

描述

discovery.zen.fd.ping_interval

节点多久ping一次,默认1s

discovery.zen.fd.ping_timeout

等待响应时间,默认30s

discovery.zen.fd.ping_retries

失败或超时后重试的次数,默认3

2.4、集群状态更新

主节点是唯一一个能够更新集群状态的节点。主节点一次处理一个群集状态更新,应用所需的更改并将更新的集群状态发布到群集中的所有其他节点。当其他节点接收到状态时,先确认收到消息,但是不应用最新状态。如果主节点在规定时间(discovery.zen.commit_timeout ,默认30s)内没有收到大多数节点(discovery.zen.minimum_master_nodes)的确认,集群状态更新不被通过。

一旦足够的节点响应了更新的消息,新的集群状态(cluster state)被提交并且会发送一条消息给所有的节点。这些节点开始在内部应用新的集群状态。在继续处理队列中的下一个更新之前,主节点等待所有节点响应,直到超时(discovery.zen.publish_timeout,默认设置为30秒)。上述两个超时设置都可以通过集群更新设置api动态更改。

2.5、no Master  block机制

对于一个可以正常充分运作的集群来说,必须拥有一个活着的主节点正常数量(discovery.zen.minimum_master_nodes个)活跃的备选主节点discovery.zen.no_master_block设置了没有主节点时限制的操作。它有两个可选参数:

all所有操作均不可做,读写、包括集群状态的读写api,例如获得索引配置(index settings),putMapping,和集群状态(cluster state)api

write默认为write,写操作被拒绝执行,基于最后一次已知的正常的集群状态可读,这也许会读取到已过时的数据。

discovery.zen.no_master_block,对于节点相关的基本api,这个参数是无效的,如集群统计信息(cluster stats),节点信息(node info),节点统计信息(node stats)。对这些api的请求不会被阻止,并且可以在任何可用节点上运行。

2.6、增加 Refresh 时间间隔

Elasticsearch 在写入数据时候,采用延迟写入的策略,即数据先写到内存中,当超过默认 1 秒 (index.refresh_interval)会进行一次写入操作,就是将内存中 segment 数据刷新到操作系统中。(近实时)

可以通过延长 refresh 时间间隔,可以有效的减少 segment 合并压力,提供索引速度。在做全链路跟踪的过程中,我们就将 index.refresh_interval 设置为 30s,减少 refresh 次数。

同时,在进行全量索引时,可以将 refresh 次数临时关闭,即 index.refresh_interval 设置为 -1,数据导入成功后再打开到正常模式,比如 30s。

2.7综合调优

ES调优综合参数设置概览:

index.merge.scheduler.max_thread_count:1 # 索引 merge ***线程数  //每台机器大概是5-10个线程

indices.memory.index_buffer_size:30%     # 内存 

index.translog.durability:async # 这个可以异步写硬盘,增大写的速度

index.translog.sync_interval:120s #translog 间隔时间

discovery.zen.ping_timeout:120s # 心跳超时时间

discovery.zen.fd.ping_interval:120s     # 节点检测时间

discovery.zen.fd.ping_timeout:120s     #ping 超时时间

discovery.zen.fd.ping_retries:6     # 心跳重试次数

thread_pool.bulk.size:20 # 写入线程个数 由于我们查询线程都是在代码里设定好的,我这里只调节了写入的线程数

thread_pool.bulk.queue_size:1000 # 写入线程队列大小

index.refresh_interval:300s #index 刷新间隔复制代码

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值