一、修改文件句柄

centos系统默认的是1024个文件句柄。如果文件句柄用完了,这就意味着操作系统会拒绝连接,意味着数据可能丢失,在ElasticSearch大量请求的情况下,1024个文件句柄数量是不够的,可以改成655360。

# 查看文件句柄
ulimit -a | grep "open files"

image.png

# 临时修改
ulimit -n 655360
# 永久修改,注销当前用户,重新登录
vim /etc/security/limits.conf
* soft nofile 655360
* hard nofile 655360

image.png

二、关闭交换内存

内存交换到磁盘对服务器性能来说是致命的。

# 查看内存信息
free -h

image.png

# 临时关闭,重启失效
swapoff -a
# 永久关闭,注释掉交换内存项
vim /etc/fstab

image.png

三、修改内核参数

内核参数vm.swappiness控制换出运行时内存的相对权重,参数值大小对如何使用swap分区有很大联系。值越大,表示越积极使用swap分区,越小表示越积极使用物理内存。默认值swappiness=60,表示内存使用率超过100-60=40%时开始使用交换分区。swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间;swappiness=100的时候表示积极使用swap分区,并把内存上的数据及时搬运到swap空间。注意:Swappiness 设置为1比设置为0要好,因为在一些内核版本,Swappness=0 会引发 OOM内存溢出。

# 查看参数值
cat /proc/sys/vm/swappiness
# 临时修改内核参数
sysctl vm.swappiness = 10
# 永久修改
vim /etc/sysctl.conf
vm.swappiness=10
# 使参数生效
sysctl -p

四、修改JVM内存

官方给出了解决方案,把一半的内存分配给Luence,另外的内存分配给ElasticSearch,老年代和新生代的内存比例为2:1是比较合适的,在ElasticSearce的配置文件jvm.options文件配置。确保 Xmx 和 Xms 的大小是相同的,其目的是为了能够在 Java 垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小而浪费资源,可以减轻伸缩堆大小带来的压力。

# 配置堆初始化大小
-Xms8g
# 配置堆的最大内存
-Xmx8g
# 配置新生代内存
-Xmn4g

五、合理设置主节点

discovery.zen.minimum_master_nodes设置及其重要,为了防止集群脑裂,这个参数应该设置为法定个数就是:(master候选节点个数/ 2)+1。

# 修改配置文件参数
discovery.zen.minimum_master_nodes:(n/2)+1
# 动态修改
PUT /_cluster/settings
{
   "persistent":{
      "discovery.zen.minimum_master_nodes":(n/2)+1
   }
}

六、剔除高负载主节点

将监控到的高负载节点磁盘IO高的,在elasticsearch.yml中设置node.master=false,然后重启elasticsearch,负载下降了写。

七、角色隔离

ES集群中的数据节点负责对数据进行增、删、改、查和聚合等操作,所以对CPU、内存和I/O的消耗很大。在搭建ES集群时,我们应该对ES集群中的节点进行角色划分和隔离。

候选主节点

node.master=true
node.data=false

数据节点

node.master=false
node.data=true

image.png