欢迎投稿

今日深度:

09-Elasticsearch重要的系统配置,09-elasticsearch

09-Elasticsearch重要的系统配置,09-elasticsearch


重要的系统配置

理想情况下,Elasticsearch应该在服务器上独立运行,并使用所有可用的资源。为此,您需要配置您的操作系统,以允许运行Elasticsearch的用户访问比默认允许的资源更多的资源。

在投入生产之前,必须考虑以下设置:

  • 禁用交换
    https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-configuration-memory.html
  • 增加文件描述符
    https://www.elastic.co/guide/en/elasticsearch/reference/current/file-descriptors.html
  • 确保足够的虚拟内存
    https://www.elastic.co/guide/en/elasticsearch/reference/current/vm-max-map-count.html
  • 确保足够的线程
    https://www.elastic.co/guide/en/elasticsearch/reference/current/max-number-of-threads.html
  • JVM DNS缓存设置
    https://www.elastic.co/guide/en/elasticsearch/reference/current/networkaddress-cache-ttl.html

开发模式与生产模式

默认情况下,Elasticsearch假定你正在开发模式下工作。如果以上任何设置配置不正确,则将向日志文件写入警告,但是您将能够启动并运行Elasticsearch节点。

只要你配置了一个网络设置network.host,Elasticsearch就会假定你正在转向生产,并将上述警告升级为异常。这些异常将阻止您的Elasticsearch节点启动。这是一个重要的安全措施,以确保您不会因为配置错误的服务器而丢失数据。

配置系统设置

系统设置的配置取决于您用于安装Elasticsearch的软件包以及您正在使用的操作系统。

使用.zip或.tar.gz包时,可以配置系统设置:

  • 暂时与ulimit,或
  • 永久/etc/security/limits.conf。

使用RPM或Debian软件包时,大多数系统设置都在系统配置文件中设置 。但是,使用systemd的系统要求在系统配置文件中指定系统限制 。

ulimit

在Linux系统上,ulimit可以用来临时更改资源限制。root在切换到运行Elasticsearch的用户之前,通常需要设置限制。例如,要将打开文件句柄(ulimit -n)的数量设置为65,536,可以执行以下操作:

sudo su  
ulimit -n 65536     # 更改打开文件的最大数量。
su elasticsearch    # 成为elasticsearch用户以启动Elasticsearch。

新限制仅适用于当前会话。

您可以参考所有当前应用的限制ulimit -a。

/etc/security/limits.conf

在Linux系统上,可以通过编辑/etc/security/limits.conf文件为特定用户设置持续限制。要将elasticsearch用户打开文件的最大数量设置为65,536,请将以下行添加到limits.conf文件中:

elasticsearch  -  nofile  65536

此更改仅在elasticsearch用户下次打开新会话时生效。

注意
Ubuntu和 limits.conf
Ubuntu会忽略limits.conf启动的进程的文件init.d。要启用该limits.conf文件,请编辑/etc/pam.d/su并取消注释以下行:

# session    required   pam_limits.so

Sysconfig文件

使用RPM或Debian软件包时,可以在系统配置文件中指定系统设置和环境变量,该文件位于:

  • RPM /etc/sysconfig/elasticsearch
  • Debian /etc/default/elasticsearch

但是,对于使用的systemd系统,系统限制需要通过systemd指定。

系统配置

在使用systemd的系统上使用RPM或Debian软件包时 ,必须通过systemd指定系统限制。

systemd服务文件(/usr/lib/systemd/system/elasticsearch.service)包含默认应用的限制。

要覆盖它们,添加一个名为的文件 /etc/systemd/system/elasticsearch.service.d/override.conf(或者,您可以运行sudo systemctl edit elasticsearch它在默认编辑器中自动打开文件)。设置此文件中的任何更改,例如:

[Service]
LimitMEMLOCK=infinity

完成后,运行以下命令重新加载单位:

sudo systemctl daemon-reload

禁用交换

大多数操作系统尝试尽可能多地为文件系统缓存使用内存,并急切地将不用的应用程序内存换出。这可能会导致部分JVM堆或甚至其可执行页被换出到磁盘。

性能非常糟糕,节点稳定性差,不惜一切代价避免。它可能导致垃圾回收持续几分钟而不是几毫秒,并且可能导致节点缓慢响应甚至断开与群集的连接。在弹性分布式系统中,让操作系统杀死节点更为有效。

有三种方法禁用交换。首选的选项是完全禁用交换。如果这不是一个选项,是否喜欢最小化swappiness与内存锁定取决于你的环境。

我的配置
Linux下/etc/sysctl.conf文件设置

vm.swappiness = 1
vm.max_map_count = 262144

例子:

[root@biluos ~]# vim /etc/sysctl.conf 
vm.max_map_count = 262144
vm.swappiness = 1                                                                     

禁用所有交换文件

通常Elasticsearch是在一个盒子上运行的唯一服务,其内存使用情况由JVM选项控制。应该不需要启用交换。

在Linux系统上,您可以运行以下命令临时禁用交换:

sudo swapoff -a

要永久禁用它,您需要编辑该/etc/fstab文件并注释掉包含该单词的所有行swap。

在Windows上,可以通过完全禁用分页文件来实现相同的功能System Properties → Advanced → Performance → Advanced → Virtual memory。

配置swappiness

Linux系统上可用的另一个选项是确保sysctl值 vm.swappiness设置为1。这减少了内核交换的倾向,在正常情况下不应该导致交换,同时仍然允许整个系统在紧急情况下交换。

启用bootstrap.memory_lock

另一种选择是使用 mlockall用于在Linux / Unix系统,或 VirtualLock 在Windows上,要尽量到进程的地址空间锁定到RAM中,防止任何Elasticsearch内存被交换出去。这可以通过将这一行添加到config/elasticsearch.yml文件来完成:

bootstrap.memory_lock: true

警告
mlockall 如果它尝试分配比可用内存更多的内存,可能会导致JVM或shell会话退出!

启动Elasticsearch之后,您可以通过检查mlockall此请求输出中的值来查看此设置是否已成功应用:

GET _nodes?filter_path=**.mlockall

如果你看到mlockall的false,那么就意味着该mlockall 请求失败。您还将在日志中看到包含更多信息的一行Unable to lock JVM Memory。

在Linux / Unix系统上,最可能的原因是运行Elasticsearch的用户没有锁定内存的权限。这可以授予如下:

.zip 和 .tar.gz

  • ulimit -l unlimited在启动Elasticsearch之前 设置为root,或者设置memlock为unlimitedin
    /etc/security/limits.conf。

RPM和Debian

  • 设置MAX_LOCKED_MEMORY到unlimited了在 系统配置文件(或见下文使用系统 systemd)。

系统使用 systemd

  • 设置LimitMEMLOCK于infinity在systemd配置。

为什么mlockall会失败的另一个可能的原因是临时目录(通常/tmp)与noexec选项挂载。这可以通过使用ES_JAVA_OPTS环境变量指定一个新的临时目录来解决:

export ES_JAVA_OPTS="$ES_JAVA_OPTS -Djava.io.tmpdir=/path/to/temp/dir"
./bin/elasticsearch

或者在jvm.options配置文件中设置这个JVM标志。

文件描述符

注意

  • 这只适用于Linux和MacOS,如果在Windows上运行Elasticsearch,可以放心地忽略它。在Windows上,JVM使用的
    API 仅受可用资源的限制。

Elasticsearch使用了大量的文件描述符或文件句柄。用完文件描述符可能是灾难性的,并且很可能导致数据丢失。确保将运行Elasticsearch的用户的打开文件描述符的数量限制增加到65,536或更高。

对于.zip和.tar.gz包,ulimit -n 65536在启动Elasticsearch之前设置为root,或者设置nofile为65536in /etc/security/limits.conf。

在macOS上,您还必须将JVM选项传递-XX:-MaxFDLimit 给Elasticsearch,以便使用更高的文件描述符限制。

RPM和Debian软件包已经将文件描述符的最大数量默认为65536,不需要进一步的配置。

您可以max_file_descriptors使用Nodes Stats API 检查每个节点的配置,其中包括:

GET _nodes/stats/process?filter_path=**.max_file_descriptors

我的配置如下:

Linux下/etc/security/limits.conf文件设置
- 更改linux的最大文件描述限制要求 添加或修改如下:

 - soft nofile 262144
 - hard nofile 262144
  • 更改linux的锁内存限制要求 添加或修改如下:
用户(elasticsearch) soft memlock unlimited
用户(elasticsearch) hard memlock unlimited

例子:

[root@biluos ~]# vim /etc/security/limits.conf

#*               soft    core            0
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#@student        -       maxlogins       4

* soft nofile 262144
* hard nofile 262144
es soft memlock unlimited
es hard memlock unlimited

这里的es是,我们运行es创建的用户名
es安装:http://blog.csdn.net/qq_21383435/article/details/79292516

虚拟内存 Virtual memoryedit

Elasticsearch 默认使用一个目录mmapfs来存储它的索引。mmap计数的默认操作系统限制可能太低,这可能会导致内存不足异常。

在Linux上,可以通过 root运行以下命令来增加限制:

sysctl -w vm.max_map_count=262144

要永久设置此值,请更新中的vm.max_map_count设置 /etc/sysctl.conf。要在重新启动后进行验证,请运行sysctl vm.max_map_count。

RPM和Debian软件包会自动配置这个设置。不需要进一步的配置。

线程数量

Elasticsearch为不同类型的操作使用了一些线程池。在需要的时候能够创建新的线程是非常重要的。确保Elasticsearch用户可以创建的线程数至少为4096。

这可以通过ulimit -u 4096在启动Elasticsearch之前设置为root 来完成,或者通过在 /etc/security/limits.conf中设置nproc为4096in来完成。

当作为服务运行时,程序包分发systemd将自动配置Elasticsearch进程的线程数。不需要额外的配置。

我的配置:
Linux下/etc/security/limits.d/90-nproc.conf文件设置,更改linux的的最大线程数

[root@biluos ~]# vim /etc/security/limits.d/90-nproc.conf
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.

*          soft    nproc     unlimited
root       soft    nproc     unlimited
~                                         

默认的1024修改成unlimited

DNS缓存设置

Elasticsearch与安全管理器一起运行。使用安全管理器时,JVM默认无限期地缓存正的主机名解析。如果您的Elasticsearch节点在DNS解决方案随时间变化的环境中依赖于DNS(例如,用于节点到节点发现),那么您可能需要修改默认的JVM行为。这可以通过添加networkaddress.cache.ttl= 到您的 Java安全策略进行修改 。任何未能解决的主机都将被记录。还要注意,在安装Java安全管理器的情况下,JVM默认将缓存负面主机名解析十秒钟。这可以通过添加networkaddress.cache.negative.ttl= 到您的 Java安全策略进行修改 。

www.htsjk.Com true http://www.htsjk.com/Elasticsearch/32263.html NewsArticle 09-Elasticsearch重要的系统配置,09-elasticsearch 重要的系统配置 理想情况下,Elasticsearch应该在服务器上独立运行,并使用所有可用的资源。为此,您需要配置您的操作系统,以允许运行E...
相关文章
    暂无相关文章
评论暂时关闭