九天猎人 发表于 2024-11-17 22:42:36

Elasticsearch 在Linux下的安装摆设和设置

情况

CentOS-7-x86_64-DVD-2009.iso
https://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso
elasticsearch-7.10.0-linux-x86_64.tar.gz
https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-10-0
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.0-linux-x86_64.tar.gz
安装

# mkdir -p /usr/local/elasticsearch
# chown esuser:esuser /usr/local/elasticsearch
# useradd esuser
# passwd esuser
# su - esuser
$ mv elasticsearch-7.10.0-linux-x86_64.tar.gz /usr/local/elasticsearch/
$ cd /usr/local/elasticsearch/
$ tar -xvzf elasticsearch-7.10.0-linux-x86_64.tar.gz
$ cd elasticsearch-7.10.0
$ ls
binconfigjdklibLICENSE.txtlogsmodulesNOTICE.txtpluginsREADME.asciidoc留意:默认情况下,不答应利用root用户运行ES,会报错:
Caused by: java.lang.RuntimeException: can not run elasticsearch as root前台运行
$ ./bin/elasticsearch验证是否启动成功
$ curl localhost:9200/
{
"name" : "localhost.localdomain",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "8CLFbx4LSwW_maztFPGiTg",
"version" : {
    "number" : "7.10.0",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "51e9d6f22758d0374a0f3f5c6e8f3a7997850f96",
    "build_date" : "2020-11-09T21:30:33.964949Z",
    "build_snapshot" : false,
    "lucene_version" : "8.7.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}阐明:访问地址要和config/elasticsearch.yml中network.host设置保持一致
后台运行
要将ES作为守护进程运行,请在命令行上指定-d,并利用-p选项将进程ID记录在文件中:
如果对ES密钥库进行了暗码保护,体系将提示你输入密钥库的暗码。有关更多具体信息,请参阅安全设置。日记消息可以在$ES_HOME/logs/目录中找到。
$ ./bin/elasticsearch -d -p pid关闭以守护进程方式启动的ES,,杀死pid文件中记录的进程ID:
$ pkill -F pid参考链接

https://www.elastic.co/guide/en/elasticsearch/reference/7.10/install-elasticsearch.html
https://www.elastic.co/guide/en/elasticsearch/reference/7.10/targz.html#install-linux
https://www.elastic.co/guide/en/elasticsearch/reference/7.10/targz.html#targz-running
设置

紧张的Elasticsearch设置

Path设置

ES将索引的数据写入索引,并将数据流写入 data目录。ES将本身的应用程序日记写入logs目录,其中包含有关集群健康和利用的信息。
对于macOS.tar.gz、Linux.tar.gz和Windows.zip安装,默认情况下data和logs是$ES_HOME的子目录。但是,$ES_HOME中的文件在升级过程中有被删除的风险。
在生产情况中,强烈建议将$ES_HOME/config/elasticsearch.yml中的path.data和path.logs设置为$ES_HOME之外的位置
类Unix体系中设置示例:
path:
data: /var/data/elasticsearch
logs: /var/log/elasticsearch如果有必要,可以在path.data中指定多个路径。ES在所有提供的路径上存储节点的数据,但将每个分片的数据保持在同一路径上。
留意:
ES不会在节点的数据路径上平衡分片。单个路径中的高磁盘利用率会触发整个节点磁盘利用率高水位。如果触发,ES将不会向节点添加分片,即使节点的其他路径有可用的磁盘空间。如果必要额外的磁盘空间,建议添加一个新节点,而不是额外的数据路径。
Linux和macOS安装path.data支持多个类Unix风格路径:
path:
data:
    - /mnt/elasticsearch_1
    - /mnt/elasticsearch_2
    - /mnt/elasticsearch_3集群名称设置

一个节点只有在与集群中的所有其他节点共享其cluster.name时才能加入集群。默认名称是elasticsearch,但应该将其更改为描述集群用途的适当名称。
cluster.name: logging-prod节点名称设置

ES利用node.name作为ES特定实例的易读标识符。此名称包含在许多API的响应中。ES启动时,节点名默认为机器的主机名,但可以在elasticsearch.yml中显式设置:
node.name: prod-data-2网络主机设置

默认情况下,ES只绑定到环回地址,如127.0.0.1和[::1]。此绑定足以在服务器上运行单个开发情况节点
留意:
可以从单个节点上的相同$ES_HOME位置启动多个节点。此设置可用于测试ES形成集群的能力,但不建议用于生产情况。
要与其他服务器上的节点形成集群,节点必要绑定到非环回地址。虽然有许多网络设置,但通常只需设置network.host即可:
network.host: 192.168.1.10network.host设置还可以理解一些特殊值,如 _local_, _site_, _global_ 和修饰符,如 :ip4 和 :ip6。请参阅network.host特殊值。
Discovery和集群信息设置

在投入生产之前,设置两个紧张的集群发现和形成设置,以便集群中的节点可以相互发现并选择master节点。
discovery.seed_hosts

开箱即用,无需任何网络设置,ES将绑定到可用的环回地址,并扫描本地端口9300到9305,以与同一服务器上运行的其他节点连接。这种举动提供了一种自动集群体验,而无需进行任何设置。
当盼望与其他主机上的节点形成集群时,利用静态“ discovery.seed_hosts设置。此设置提供集群中其他节点的列表,这些节点符合master节点资格,可能处于活动状态并可联系,以启动发现过程. 此设置接受集群中所有符合master节点条件的节点的YAML序列或地址数组。每个地址可以是IP地址,也可以是通过DNS剖析为一个或多个IP地址的主机名。
discovery.seed_hosts:
   - 192.168.1.10:9300
   - 192.168.1.11
   - seeds.mydomain.com
   - :9301

[*]端口号可选,默认为 9300, 可修改。
[*]如果主机名剖析为多个IP地址,则节点将尝试在所有已剖析的地址上发现其他节点。
[*]IPv6地址必须括在方括号内
如果符合master节点条件的节点没有固定的名称或地址,利用可选主机提供商 动态查找其地址。
cluster.initial_master_nodes

第一次启动ES集群时,cluster bootstrapping步骤确定了在第一次选举中投票的符合master节点资格的节点集。在开发模式下,在没有设置发现设置的情况下,此步骤由节点本身自动实行。
由于自动引导本质上是不安全的,在生产模式下启动新集群时,必须明确列出符合master节点资格的节点,这些节点的投票应在第一次选举中被盘算。可以利用cluster.initial_master_nodes设置来设置此列表。
在集群首次成功建立后,从每个节点的设置中删除cluster.initial_master_nodes设置。重新启动群集或向现有群集添加新节点时,请勿利用此设置。
discovery.seed_hosts:
   - 192.168.1.10:9300
   - 192.168.1.11
   - seeds.mydomain.com
   - :9301
cluster.initial_master_nodes:
   - master-node-a
   - master-node-b
   - master-node-c通过node.name标识初始master节点(https://www.elastic.co/guide/en/elasticsearch/reference/7.10/important-settings.html#node-name),默认为其主机名。确保cluster.initial_master_nodes中的值与node.name完全匹配。如果利用完全限定域名(FQDN)作为节点名称,例如master-node-a.example.com,则必须利用此列表中的FQDN。相反,如果node.name是一个没有任何尾随限定符的裸主机名,则还必须省略cluster.initial_master_nodes中的尾随限定符。
查阅bootstrapping a cluster
堆大小设置

默认情况下,ES告诉JVM利用一个最小和最大值都为1GB的堆。当摆设到生产情况时,设置堆大小以确保ES有足够的可用堆空间非常紧张。
ES将通过Xms(最小堆大小)和Xmx(最大堆大小)设置分配jvm.options中指定的整个堆。Xms和Xmx设置必须相相互等。
这些设置的值取决于服务器上可用的RAM量:

[*]将Xmx和Xms设置为不凌驾物理RAM的50%。ES必要内存用于JVM堆以外的目的,为此留出空间非常紧张。例如,ES利用堆外缓冲区进行高效的网络通讯,依赖于利用体系的文件体系缓存来高效访问文件,JVM本身也必要一些内存。ES进程利用的内存凌驾利用Xmx设置设置的限定是正常的。
[*]将Xmx和Xms设置为不凌驾JVM用于压缩对象指针的阈值。确切的阈值各不相同,但靠近32GB。可以通过在日记中查找雷同以下行来验证是否低于阈值:
heap size , compressed ordinary object pointers
[*]将Xmx和Xms设置为不凌驾从零开始的压缩oops的阈值。确切的阈值各不相同,但26 GB在大多数体系上是安全的,在某些体系上可能高达30 GB。可以通过利用JVM选项-XX:+UnlockDiagnosticVMOptions-XX:+PrintCompressedOopsMode 启动ES,并查找雷同以下行来验证是否低于此阈值:
heap address: 0x000000011be00000, size: 27648 MB, zero based Compressed Oops此行表现启用了从零开始的压缩oops。如果未启用从零开始的压缩oops,你将看到雷同以下行:
heap address: 0x0000000118400000, size: 28672 MB, Compressed Oops with base: 0x00000001183ff000
ES可用的堆越多,它可以用于内部缓存的内存就越多,但留给利用体系用于文件体系缓存的内存越少。别的,较大的堆可能会导致垃圾网络暂停时间更长。
下面是一个怎样通过config/jvm.options.d/文件设置堆大小的示例:
-Xms2g
-Xmx2g 将最小堆内存和最大堆内存都设置为 2g。
利用jvm.options.d是设置生产摆设堆大小的首选方法。
备注:默认情况下,jvm.options.d为空目录,可以在该目录动手动新建设置,如jvm.options,文件格式可参考config/jvm.options
还可以通过ES_JAVA_OPTS情况变量设置堆大小。这通常不建议用于生产摆设,但对于测试很有用,由于它覆盖了设置JVM选项的所有其他方式。
ES_JAVA_OPTS="-Xms2g -Xmx2g" ./bin/elasticsearch
ES_JAVA_OPTS="-Xms4000m -Xmx4000m" ./bin/elasticsearch 1 设置最小堆内存和最大堆内存都为 2g。
2 设置最小堆内存和最大堆内存都为 4000 MB。
JVM 堆 dump路径设置

默认情况下,ES 设置JVM 将内存不足的堆dump到默认数据目录。RPM以及Debian包,数据目录为/var/lib/eelasticsearch。在Linux 和 MacOS 和Windows发行版中,data目录位于ES安装的根目录下。如果此路径不适合接收堆dump,则修改 jvm.options 中 -XX:HeapDumpPath=…条目:

[*]如果指定了一个目录,JVM将根据运行实例的PID为堆dump生成一个文件名。
[*]如果指定固定文件名而不是目录,则当JVM必要对内存不足的异常实行堆dump时,该文件必须不存在。否则,堆dump将失败。
GC日记设置

默认情况下,ES启用垃圾网络(GC)日记。这些是在jvm.options设置的并且输出到与ES日记相同的默认位置。默认设置每64 MB轮换一越日记,最多可消耗2 GB的磁盘空间。
可以利用JEP 158: 同一JVM日记中描述的命令行选项重新设置JVM日记记录。除非直接更改默认的jvm.options文件,否则除了你本身的设置外,还会应用ES默认设置。要禁用默认设置,首先通过提供-Xlog:disable选项禁用日记,然后提供本身的命令行选项。这将禁用所有JVM日记,因此务必查看可用选项并启用所需的一切。
要查看原始JEP中未包含的更多选项,请参阅利用JVM同一日记框架启用日记。
Examples

通过创建带有一些示例选项的$ES_HOME/config/jvm.options.d/GC.options,将默认GC日记输出位置更改为/opt/my-app/gc.log:
# 关闭之前所有的日志记录配置
-Xlog:disable

# JEP 158的默认设置,除了使用“utctime”而不是“uptime”来匹配下一行
-Xlog:all=warning:stderr:utctime,level,tags

# 使用各种选项将GC日志记录到自定义位置
-Xlog:gc*,gc+age=trace,safepoint:file=/opt/my-app/gc.log:utctime,pid,tags:filecount=32,filesize=64m设置ESDocker容器将GC调试日记发送到标准错误(stderr)。这使容器编排器可以或许处理输出。如需利用ES_JAVA_OPTS情况变量,请指定:
MY_OPTS="-Xlog:disable -Xlog:all=warning:stderr:utctime,level,tags -Xlog:gc=debug:stderr:utctime"
docker run -e ES_JAVA_OPTS="$MY_OPTS" # etc暂时目录设置

默认情况下,ES利用启动脚本在体系暂时目录下创建的私有暂时目录。
在某些Linux发行版上,体系实用程序会将最近没有访问过的文件和目录将从/tmp中删除。这将导致ES运行期间私有暂时目录被删除,如果必要利用暂时目录的功能长时间未利用的话。后续如果某些功能利用必要此暂时目录,将会产生问题。
如果利用.deb或.rpm包安装ES,并在systemd下运行它,ES利用的私有暂时目录将被清除在定期清理之外。
如果打算在Linux或MacOS上长时间运行.tar.gz发行版,考虑为ES创建一个专用的暂时目录,将该目录设置在不会从中扫除旧文件和目录的路径下。此目录应设置权限,以便只有运行ES的用户可以访问它。然后,在启动ES之前,将$ES_TMPDIR情况变量设置为指向此目录
JVM致命错误日记设置

默认情况下,ES设置JVM将致命错误日记写入默认日记目录。针对RPM以及Debian包,该目录为/var/log/elasticsearch。针对Linux,MacOS和Windows发行版中,logs目录位于ES安装目录的根目录下。
这些日记是JVM在碰到致命错误(如分段错误)时生成的日记。如果此路径不适合接收日记,则修改jvm.options中-XX:ErrorFile=…条目
集群备份

快照可以防止由于灾害导致的永久数据丢失。快照生命周期管理是对集群进行定期备份的最简单方法。有关更多信息,请参阅集群备份.
留意:
不能通过简单地复制ES集群所有节点的数据目录来备份ES。ES在运行时可能会对其数据目录的内容进行更改;复制其数据目录不能包管其内容的一致性。备份群集的唯一可靠方法是利用快照和还原功能。
参考链接

https://www.elastic.co/guide/en/elasticsearch/reference/7.10/important-settings.html
紧张的体系设置

设置体系设置

在哪设置体系设置取决于用于安装ES的软件包以及利用的利用体系。
当利用.zip或.tar.gz包时,可以设置体系设置:

[*]利用ulimit暂时设置,或
[*]在/etc/security/limits.conf中永久设置
利用RPM或Debian软件包时,大多数体系设置都在 体系设置文件 中设置. 然后,利用systemd的体系要求在 systemd设置文件 中指定体系限定
ulimit

在Linux体系上,ulimit可用于暂时更改资源限定。通常必要在运行ES的用户启动ES前,切换为root,以设置资源限定。例如,要将打开的文件句柄数(ulimit-n)设置为65536,可以实行以下利用:
sudo su
ulimit -n 65535
su esuser 新的资源设置仅应用于当前会话。可通过 ulimit -a 查询当前所有限定。
/etc/security/limits.conf

在Linux体系上,可以通过编辑/etc/security/limits.conf文件为特定用户设置持久限定。例如,要将esuser用户的最大打开文件数设置为65535,在limits.conf文件中添加以下行:
esuser-nofile65535此更改仅在elasticsearch用户下次打开新会话时生效。
Ubuntu下的limits.conf
Ubuntu会忽略由init.d启动的进程的limits.conf文件。要启用limits.conf文件,请编辑/etc/pam.d/su并取消注释以下行:
# session    required   pam_limits.so体系设置文件

利用RPM或Debian软件包时,可以在体系设置文件中指定体系设置和情况变量,该文件位于:
包类型体系设置文件路径RPM/etc/sysconfig/elasticsearchDebian/etc/default/elasticsearch但是,对于利用systemd的体系,必要通过systemd指定体系限定
Systemd设置

在利用systemd的体系上利用RPM或Debian软件包时,必须通过systemd指定体系限定。
systemd服务文件(/usr/lib/systemd/system/eelasticsearch.service)包含默认应用的限定。
要覆盖它们,添加一个名为/etc/systemd/system/exelasticsearch.service.d/overrid.conf的文件(或者,运行sudo systemctl edit elasticsearch,会在默认编辑器中自动打开该文件)。在此文件中设置任何必要的变更,例如:

LimitMEMLOCK=infinity一旦完成更改,运行以下命令以重载服务单位:
sudo systemctl daemon-reload参考链接

https://www.elastic.co/guide/en/elasticsearch/reference/7.10/setting-system-settings.html
禁用互换(swapping)

大多数利用体系都试图将尽可能多的内存用于文件体系缓存,并急切地互换掉未利用的应用程序内存。这可能会导致JVM堆的一部门,甚至其可实行页面被换出到磁盘。
swapping 对性能和节点稳定性非常不利,应该不惜一切代价制止。它可能会导致垃圾网络持续分钟而不是毫秒,并可能导致节点响应缓慢,甚至与集群断开连接。在弹性分布式体系中,更容易导致利用体系杀死节点。
有三种方法可以禁用互换。首选项是完全禁用互换。如果这不是一种选择,那么是选择最小化swappiness还是选择内存锁定取决于你的情况
禁用所有swap文件

通常,ES是在机器上运行的唯一服务,其内存利用由JVM选项控制。不必要启用互换。
在Linux体系上,可以通过运行以下命令暂时禁用互换::
sudo swapoff -a这不必要重新启动Elasticsearch。
要永久禁用,则必要编辑/etc/fstab文件,并注释掉任何包含单词swap的行。
在Windows上,可以通过体系属性→高级→性能→高级→虚拟内存完全禁用分页文件来实现等效功能。
设置swappiness

Linux体系上可用的另一个选择是确保sysctl值vm.swappiness设置为1。这减少了内核互换的倾向,在正常情况下不应导致互换,同时仍然答应整个体系在紧急情况下互换。
开启bootstrap.memory_lock

另一种选择是在Linux/Unix体系上利用mlockall,在Windows上利用VirtualLock,以尝试将进程地址空间锁定到RAM中,防止任何ES堆内存被换出。
一些平台在利用内存锁时仍然会互换堆内存。为了防止堆外内存互换,取而代之,禁用所有互换文件。
要启用内存锁,需在elasticsearch.yml中将bootstrap.memory_lock设置为true:
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安装包
启动ES前以root用户实行ulimit -l unlimited。可选的,设置/etc/security/limits.conf memlock 为 unlimited
# allow user 'elasticsearch' mlockall
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
[*]RPM 和 Debian
体系设置文件中设置 MAX_LOCKED_MEMORY 为 unlimited
[*]利用systemd的体系
systemd设置中设置LimitMEMLOCK 为 infinity
mlockall失败的另一个可能原因是JNA暂时目录(通常是/tmp的子目录)是用noexec选项挂载的。这可以通过利用ES_JAVA_OPTS情况变量为JNA指定一个新的暂时目录来办理:
export ES_JAVA_OPTS="$ES_JAVA_OPTS -Djna.tmpdir=<path>"
./bin/elasticsearch或者在 jvm.options设置文件中设置该JVM标识。
参考链接

https://www.elastic.co/guide/en/elasticsearch/reference/7.10/setup-configuration-memory.html
文件描述符

这仅实用于Linux和MacOS,如果在Windows上运行ES,可以安全地忽略它。在Windows上,JVM利用仅受可用资源的限定的API。
ES利用了大量的文件描述符或文件句柄。文件描述符用尽可能是劫难性的,很可能会导致数据丢失。确保将运行ES的用户的打开文件描述符数量限定增长到65536或更高。
对于.zip 和 .tar.gz 包,在启动ES之前以root用户设置ulimit -n 65535,或者在/etc/security/limits.conf中将nofile设置为65535。
在MacOS上,还必须将JVM选项-XX:-MaxFDLimit传递给ES,以便利用更高的文件描述符限定。
RPM和Debian软件包已经将文件描述符的最大数量默认为65535,不必要进一步设置。
可以利用Nodes stats检查为每个节点设置的max_file_descriptors:
GET _nodes/stats/process?filter_path=**.max_file_descriptors参考链接

https://www.elastic.co/guide/en/elasticsearch/reference/7.10/file-descriptors.html
虚拟内存

默认情况下,ES利用mmapfs目录用于存储其索引。默认利用体系对mmap计数的限定可能太低,这可能会导致内存不足异常。
在Linux上,可以通过以 root身份运行以下命令来增长限定。
sysctl -w vm.max_map_count=262144要永久设置该值,需更新/etc/sysctl.conf中的vm.max_map_count设置。要在重新启动后进行验证,请运行sysctl vm.map_map_count 。
RPM和Debian软件包将自动设置此设置。无需进一步设置。CentOS7.9中验证,该设置项默认为65535,无法正常启动
参考链接

https://www.elastic.co/guide/en/elasticsearch/reference/7.10/vm-max-map-count.html
线程数量

ES为不同类型的利用利用了许多线程池。紧张的是,它可以或许在必要时创建新线程。确保Elasticsearch用户至少可创建4096个线程。
这可以通过在启动Elasticsearch之前以root用户运行ulimit -u 4096来完成 ,或者在/etc/security/limits.conf中将nproc设置为4096。
发行包在systemd下作为服务运行时,将自动设置ES进程的线程数。不必要额外的设置。
参考链接

https://www.elastic.co/guide/en/elasticsearch/reference/7.10/max-number-of-threads.html
DNS缓存设置

ES运行时有一个安全管理器。有了安全管理器,JVM默认无限期缓存正向主机名剖析,默认缓存反向主机名剖析10秒。ES利用默认值覆盖此举动,以缓存正向剖析60秒,反向剖析10秒。这应实用于大多数情况,包罗DNS剖析随时间变革的情况。如果没有覆盖此设置,可以编辑JVM选项中的es.networkaddress.cache.ttl 和es.networkaddress.cache.negative.ttl。留意,ES会忽略 Java安全策略 中的 networkaddress.cache.ttl= 和 networkaddress.cache.negative.ttl= 。除非移除es.networkaddress.cache.ttl和es.networkaddress.cache.notanegative.ttl设置。
参考链接

https://www.elastic.co/guide/en/elasticsearch/reference/7.10/networkaddress-cache-ttl.html
JNA暂时目录未利用noexec挂着

这仅实用于Linux。
ES利用Java Native Access(JNA)库来实行一些依赖于平台的本地代码。在Linux上,支持此库的本地代码在运行时从JNA存档中提取。默认情况下,此代码被提取到ES暂时目录,该目录默认为/tmp的子目录。可选的,可以利用JVM标记-Djna.tmpdir=控制此位置。由于本地库作为可实行文件映射到JVM虚拟地址空间,因此提取此代码的位置的底层挂载点不能利用noexec挂载,由于这会阻止JVM进程将此代码映射为可实行文件。在一些强化的Linux安装中,这是/tmp的默认挂载选项。底层挂载是用noexec挂载的一个迹象是,在启动时,JNA将无法加载,提示java.lang.UnsatisfiedLinkerError异常,并表现一条雷同failed to map segment from shared object的提示信息。留意,消息可能因JVM版本差别而不同。别的,依赖于通过JNA实行本地代码的ES组件将失败,并表现because JNA is not available的提示。如果看到此类错误信息,则必须重新挂载用于JNA的暂时目录,并且不利用noexec挂载。
参考链接

https://www.elastic.co/guide/en/elasticsearch/reference/7.10/executable-jna-tmpdir.html
TCP重传超时

集群中的每对节点都通过许多TCP连接进行通讯,这些TCP连接 保持打开状态 直到其中一个节点关闭或节点之间的通讯因底层基础框架故障而中断。
TCP通过向通讯应用程序隐藏暂时网络中断,在偶尔不可靠的网络上提供可靠的通讯。在关照发送者任何问题之前,利用体系将多次重新传输任何丢失的消息。大多数Linux发行版默认重新传输任何丢失的数据包15次。重传呈指数级推迟,因此这15次重传必要900多秒才能完成。这意味着利用此方法检测网络分区或故障节点必要消耗Linux几分钟的时间。Windows默认只重传5次,超时时间约为6秒。
Linux默认答应在可能经历很长一段时间数据包丢失的网络上进行通讯,但对于单个数据中心内的生产网络来说,这个默认值是过高的,正如大多数Elasticsearch集群一样。高可用集群必须可以或许快速检测节点故障,以便通过重新分配丢失的分片、重新路由搜索以及可能选择新的主节点来迅速做出反应。因此,Linux用户应该减少TCP重传的最大次数。
可以通过以root身份运行以下命令,将TCP重传的最大次数减少到 5 。五次重传对应的超时时间约为六秒。
sysctl-w net.ipv4.tcp_reres2=5要永久设置此值,更新/etc/sysctl.conf中的net.ipv4.tcp_reres2设置。要在重新启动后运行sysctl net.ipv4.tcp_reres2查看是否生效。
此设置实用于所有TCP连接,也会影响与群体外体系的通讯可靠性。如果的集群通过不可靠的网络与外部体系通讯,则可能必要为net.ipv4.tcp_reres2选择更高的值。因此,Elasticsearch不会自动调整此设置。
相关设置

ES还实现了本身的内部健康检查,超时时间比Linux上的默认重传超时时间短得多。由于这些是应用程序级健康检查,因此它们的超时必须考虑到应用程序级的影响,如垃圾网络暂停。不应该减少与这些应用程序级健康检查相关的任何超时。
还必须确保网络基础设施不会干扰节点之间的长期连接,[即使这些连接看起来是空闲的](https://www.elastic.co/guide/en/elasticsearch/reference/7.10/modules-transport.html#long-及时连接)。当设备到达肯定年龄时断开连接是Elasticsearch集群的常见问题来源,不得利用。
参考链接

https://www.elastic.co/guide/en/elasticsearch/reference/7.10/system-config-tcpretries.html

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Elasticsearch 在Linux下的安装摆设和设置