Elasticsearch:配置选项

Elasticsearch 带有大量的设置和配置,甚至可能让专家工程师感到困惑。 尽管它使用约定优于配置范例并且大部分时间使用默认值,但在将应用程序投入生产之前自定义配置是必不可少的。

在这里,我们将介绍属于不同类别的一些属性,并讨论它们的重要性以及如何调整它们。 我们可以调整三个配置文件:

  • elasticsearch.yml - 这个配置文件是最常编辑的,我们可以在其中设置集群名称、节点信息、数据和日志路径,以及网络和安全设置。
  • log4j2.properties - 让我们设置 Elasticsearch 节点的日志记录级别。
  • jvm.options - 这里我们可以设置运行节点的堆内存。

这些文件位于 Elasticsearch 安装的如下目录中:

$ pwd
/Users/liuxg/elastic/elasticsearch-8.6.1
$ tree config/ -L 2
config/
├── certs
│   ├── http.p12
│   ├── http_ca.crt
│   └── transport.p12
├── elasticsearch-plugins.example.yml
├── elasticsearch.keystore
├── elasticsearch.yml
├── jvm.options
├── jvm.options.d
├── log4j2.properties
├── role_mapping.yml
├── roles.yml
├── users
└── users_roles

这些文件由 Elasticsearch 节点从 config 目录中读取,该目录基本上是 Elasticsearch 安装目录下的一个文件夹。 对于二进制(zip 或 tar.gz)安装,此目录默认为 $ES_HOME/config(ES_HOME 变量指向 Elasticsearch 的安装目录)。 如果你使用 Debian 或 RPM 发行版等包管理器进行安装,则情况会有所不同,默认为 /etc/elasticsearch/config。

如果你希望从不同的目录访问你的配置文件,你可以设置并导出一个名为 ES_PATH_CONF 的路径变量,它指向新的配置文件位置。 在接下来的几个小节中,我们将介绍一些需要理解的重要设置,不仅对管理员如此,对开发人员也是如此。

主配置文件

尽管 Elastic 的人们开发了 Elasticsearch 以使用默认值(约定优于配置)运行,但我们在将节点投入生产时不太可能依赖默认值。 我们应该调整属性以设置特定的网络信息、数据或日志路径、安全方面等。 为此,我们可以修改 elasticserch.yml 文件以设置我们正在运行的应用程序所需的大部分属性。

Elasticsearch 将网络属性公开为 network.* 属性。 我们可以使用此属性设置主机名和端口号。 例如,我们可以将 Elasticsearch 的端口号更改为 9900 而不是保留默认端口 9200:http.port :9900。 如果要更改节点内部通信的端口,也可以设置 transport.port。

根据你的要求,你可能需要更改许多属性。 如果你想详细了解这些属性,请参阅官方文档:Networking | Elasticsearch Guide [8.6] | Elastic

如果你想设置自己的 Elasticsearch 能被外部访问而不是以 localhost 的方式访问,你可以更改如下的设置:

network.host: 192.168.0.1

在上面,我们设置为电脑的私有地址,这样它可以被所在的局域网所访问。我们也可以这样设置:

network.host: 0.0.0.0

这样 Elasticsearh 会绑定于所有的 IP 接口上。我们通常可以使用如下的方式来得到所有的 IP:

ifconfig | grep inet
$ ifconfig | grep inet
	inet 127.0.0.1 netmask 0xff000000 
	inet6 ::1 prefixlen 128 
	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 
	inet6 fe80::acbc:f2ff:fe5e:d6e9%anpi0 prefixlen 64 scopeid 0x4 
	inet6 fe80::acbc:f2ff:fe5e:d6eb%anpi2 prefixlen 64 scopeid 0x5 
	inet6 fe80::acbc:f2ff:fe5e:d6ea%anpi1 prefixlen 64 scopeid 0x6 
	inet6 fe80::f4d4:88ff:fe6a:c36d%ap1 prefixlen 64 scopeid 0xe 
	inet6 fe80::c6b:334b:459e:a8fb%en0 prefixlen 64 secured scopeid 0xf 
	inet 192.168.0.101 netmask 0xffffff00 broadcast 192.168.0.255
	inet6 fe80::a082:13ff:fe68:d82f%awdl0 prefixlen 64 scopeid 0x10 
	inet6 fe80::a082:13ff:fe68:d82f%llw0 prefixlen 64 scopeid 0x11 
	inet6 fe80::1699:5325:c1de:b41%utun0 prefixlen 64 scopeid 0x12 
	inet6 fe80::ce81:b1c:bd2c:69e%utun1 prefixlen 64 scopeid 0x13 
	inet6 fe80::c22c:882d:15c7:d083%utun2 prefixlen 64 scopeid 0x14 
	inet6 fe80::10cf:86ce:6771:979%en4 prefixlen 64 secured scopeid 0x1a 
	inet 192.168.0.3 netmask 0xffffff00 broadcast 192.168.0.255

如上所示,当我们设置 network.host 为 0.0.0.0 时,它绑定于上面所示的 127.0.0.1 及 192.168.0.3 及 192.168.0.101 上。除上面的配置之前,我们也可以使用如下的定义:

定义描述
_local_系统上的任何 loopback 地址,例如 127.0.0.1。
_site_系统上的任何站点本地地址,例如 192.168.0.1。这样我们就不用硬编码私有地址
_global_系统上任何全局范围的地址,例如 8.8.8.8。

配置文件格式

配置格式为 YAML。 以下是更改数据和日志目录路径的示例:

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

设置也可以展平如下:

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

在 YAML 中,你可以将非标量值格式化为序列:

discovery.seed_hosts:
   - 192.168.1.10:9300
   - 192.168.1.11
   - seeds.mydomain.com

虽然不太常见,但你也可以将非标量值格式化为数组:

discovery.seed_hosts: ["192.168.1.10:9300", "192.168.1.11", "seeds.mydomain.com"]

环境变量替换

配置文件中用 ${...} 表示法引用的环境变量将替换为环境变量的值。 例如:

node.name:    ${HOSTNAME}
network.host: ${ES_NETWORK_HOST}

环境变量的值必须是简单的字符串。 使用逗号分隔的字符串提供 Elasticsearch 将解析为列表的值。 例如,Elasticsearch 会将以下字符串拆分为 ${HOSTNAME} 环境变量的值列表:

export HOSTNAME="host1,host2"

日志记录选项

Elasticsearch 是用 Java 开发的,与大多数 Java 应用程序一样,Elasticsearch 使用 Log4j 2 作为其日志记录库。 一个正在运行的节点将 INFO 级别的日志信息输出到控制台和文件(分别使用 Kibana 控制台和 RollingFile Appenders)。

Log4j 属性文件 (log4j2.properties) 包含一些系统变量(sys:es.logs.base_path、sys:es.logs.cluster_name 等),这些变量在应用程序运行时解析。 因为这些属性由 Elasticsearch 公开,所以它们可供 Log4j 使用,这让 Log4j 可以设置其日志文件目录位置、日志文件模式和其他属性。 例如 sys:es.logs.base_path 指向 Elasticsearch 写入日志的路径,解析为 $ES_HOME/logs 目录。

默认情况下,大部分 Elasticsearch 运行在 INFO 级别,但我们可以根据单个包自定义设置。 例如,我们可以编辑 log4j2.properties 文件并为索引包添加一个记录器,如下面的清单所示。

设置特定包的日志记录级别:

logger.index.name =  org.elasticsearch.index
logger.index.level =  DEBUG

通过这样做,我们允许 index package 在 DEBUG 级别输出日志。 我们可以在集群级别设置 DEBUG 日志级别,而不是在特定节点上编辑此文件并重新启动该节点(如果你在创建群之前没有设法这样做,则可能需要为每个节点执行此操作) 对于这个包。 下一个清单演示了此设置:

全局设置临时日志级别:

PUT _cluster/settings
{
  "transient": { #A
    "logger.org.elasticsearch.index":"DEBUG" #B
  }
}

如查询所示,我们在 transient 块中将 index 包的记录器级别属性设置为 DEBUG。 transient block 表示该属性不持久(仅在集群启动并运行时可用)。 如果我们重启集群或者它崩溃了,设置就会丢失,因为它没有永久存储在磁盘上。

我们可以通过调用集群设置 API (_cluster/settings) 来设置此属性,如清单中的代码所示。 设置此属性后,将在 DEBUG 级别输出与 org.elasticsearch.index 源包中的索引相关的任何进一步日志记录信息。

Elasticsearch 也提供了一种持久存储集群属性的方法。 如果我们需要永久存储属性,我们可以使用 persistent 块。 以下清单用持久块替换了 transient 块。

永久设置日志级别:

PUT _cluster/settings
{
  "persistent": {
    "logger.org.elasticsearch.index":"DEBUG",
    "logger.org.elasticsearch.http":"TRACE"
  }
}

此代码在 org.elasticsearch.index 包上设置 DEBUG 级别,在 org.elasticsearch.http 包上设置 TRACE 级别。 因为两者都是持久属性,所以记录器会按照包上设置的这些级别写入详细的日志,这些级别也会在集群重新启动后继续存在。

请注意使用 persistent 属性永久设置的此类属性。 我的建议是在故障排除或调试期间启用日志记录级别 DEBUG 或 TRACE。 当你完成生产中的 “救火” 情节时,将其重置回 INFO 以避免将大量请求写入磁盘。

更多阅读,请参考文章 “Elastic:配置 Elasticsearch 服务器 logs”。

JVM 选项

因为 Elasticsearch 使用 Java 编程语言,所以可以在 JVM 级别进行大量优化调整。 出于显而易见的原因,在本文中讨论如此庞大的话题是不够公正的。 但是,如果你很好奇并想了解 JVM 的本质或想在较低级别微调性能,请参阅 Optimizing Java(Ben Evan 和 Jame Gough)或 Java Performance(Scott Oaks)等书籍。 我强烈推荐它们,因为它们不仅提供基础知识,还提供操作提示和技巧。

Elasticsearch 在 /config 目录中提供了一个 jvm.options 文件,其中包含 JVM 设置。 但是,此文件仅供参考(例如,检查节点的内存设置),不得编辑。 根据节点的可用内存,为 Elasticsearch 服务器自动设置堆内存。

警告:在任何情况下我们都不应该编辑 jvm.options 文件。 这样做可能会破坏 Elasticsearch 的内部运作。

如果我们想要升级内存或更改任何 JVM 设置,我们必须创建一个以 .options 作为文件扩展名的新文件,提供适当的调整参数,并将该文件放在 config 下一个名为 jvm.options.d 的目录中以便以存档形式进行安装(tar 或 zip)。 我们可以为我们的自定义文件指定任何名称,但我们需要在其文件名中包含固定的 .options 扩展名。

对于 RPM/Debian 软件包安装,此文件应位于 /etc/elasticsearch/jvm.options.d/ 目录下。 同样,将选项文件挂载在 /usr/share/elasticsearch/config 文件夹下以进行 Docker 安装。

我们可以编辑这个自定义 JVM 选项文件中的设置。 例如,要升级名为 jvm_custom.options 的文件中的堆内存,我们可以使用以下清单中的代码。

升级堆内存:

# Setting the JVM heap memory in jvm_custom.options file
-Xms4g
-Xmx4g

_Xms 标志设置初始堆内存,而 _Xmx 调整最大堆内存。 不成文的规则是不要让 _Xms 和 _Xmx 设置超过节点总 RAM 的 50% 以上。 在引擎盖下运行的 Apache Lucene 将内存的后半部分用于其分段、缓存和其他进程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/7201.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023年泰迪杯数据挖掘挑战赛B题--产品订单数据分析与需求预测(2.数据探索性分析)

前言 继续上一片数据预处理进行续写,利用预处理之后的数据进行数据分析并且解决问题一相关的问题。问题一主要目的是让研究各种因素对于需求量的影响,然后找到确定影响需求量的主要因素并且进行数据分析和主要特征抽取。 对于问题提出的八个小问&#…

解决云服务器ssh经常断开的问题

问题描述:无论是腾讯云服务器还是阿里云服务器等,在使用MobaXterm或者Xshell连接云服务器时,如果十分钟左右无任何操作,ssh就会自动断开,非常烦人,下面提供几种方法来解决该问题。 MobaXterm的报错如下&am…

Cookie和Session的工作流程及区别(附代码案例)

目录 一、 HTTP协议 1.1 为什么HTTP协议是无状态的? 1.2 在HTTP协议中流式传输和分块传输编码的区别 二、Cookie和Session 2.1 Cookie 2.2 Session 2.3 Cookie和Session的区别 三、servlet中与Cookie和Session相关的API 3.1 HttpServletRequest 类中的相关方…

mysql与redis区别

一、.redis和mysql的区别总结 (1)类型上 从类型上来说,mysql是关系型数据库,redis是缓存数据库 (2)作用上 mysql用于持久化的存储数据到硬盘,功能强大,但是速度较慢 redis用于存储使…

【新2023Q2押题JAVA】华为OD机试 - 挑选字符串

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:挑选字符串 题目 给定a-z,…

二.microchip samE54-- ATSAME54P20A 开发板使用总结

板子图片 2.1 板子硬件资源 2.1.1 外部插件1 2.2.2 外部插件2 2.2.3 外部插件3 2.2.IDE KIT连接(USB DEBUG) 板子自带,不是JLINK 出现这个说明板载 调试软件识别成功 2.3 编译与下载 D:\HarmonyProjects\usart\usart_echo_blocking\f…

DataHub调研数据血缘

DataHub调研&数据血缘 1. DataHub? 阿里的数据工具datahub? 回答: 不是 DataHub是由Linkedin开源的,官方喊出的口号为:The Metadata Platform for the Modern Data Stack - 为现代数据栈而生的元数据平台。官方网站A Metadata Platfo…

Qt C++与Python混合编程:补充错误

在提示中,需要引用Python.h,出现错误。 1、找不到Python.h 如果是pro工程,需要在里面配置; INCLUDEPATH /Users/xinnianwang/opt/anaconda3/include LIBS /Users/xinnianwang/opt/anaconda3/lib 如果是CMakeLists.txt需要配…

【清明节】开发平台公司流辰信息缅怀先祖,传承精神,撸起袖子创佳绩!

四月暖春,草长莺飞,杨柳依依,大自然呈现出一片生机勃勃的朝气景象。中国传统民俗节日——清明节踏春而来,在回乡祭祖,缅怀先人的季节里,哀思、怀念、伤感已经成为整个清明节的主基调。在这万物复苏、春和景…

Spring循环依赖冤冤相报何时了

Spring循环依赖 🚎什么是循环依赖?那么循环依赖是个问题吗?单例setter, spring是如何解决的为什么需要三级缓存单单只有两级缓存行不行还得是你三级缓存三级缓存解决依赖循环全解梦想不会逃跑,会逃跑的永远都是自己 什么是循环依赖…

MySQL逻辑架构

讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. 逻辑架构剖析 1.1 服务器处理客户端请求 首先MySQL是典型的C/S架构,即Client/Server 架构,服务器端程序使用的mysqld…

【2023】Kubernetes之Pod与容器状态关系

目录简单创建一个podPod运行阶段:容器运行阶段简单创建一个pod apiVersion: v1 kind: pod metadata: name: nginx-pod spec:containers:- name: nginximages: nginx:1.20以上代码表示创建一个名为nginx-pod的pod资源对象。 Pod运行阶段: Pod创建后&am…

vba:end属性

1.从录制一个宏开始。操作:(ctrl向上键、ctrl向下键、ctrl向左键、ctrl向右键) 2.看代码 Range.End 属性 返回一个 Range 对象,该对象代表包含源区域的区域尾端的单元格。 等同于按键 (End向上键、End向下键、End向左键、End向右键) 语法 表达式.End (…

Java基础(十四):包装类

Java基础系列文章 Java基础(一):语言概述 Java基础(二):原码、反码、补码及进制之间的运算 Java基础(三):数据类型与进制 Java基础(四):逻辑运算符和位运算符 Java基础(六):数组 Java基础(七):面向对…

打包构建优化

最近沉迷逛某蓝色软件,收益良多!万分感谢博主 海阔_天空,写的太棒了👍🎉 下面是原文链接,我在原文的基础上浅做个笔记,方便个人快速复习 PS:本篇文章在评论区里存在很多吐槽技术太…

常见密码的编码

1.base64编码 字符包括字母A-Z、a-z、数字0-9,这样共有62个字符 当看到号的加密方式时,可以考虑base64。例:cTZ1NQ解码之后为q5u5。 bash32 只有大写字母(A-Z)和数字234567 bash64 只有数字0-9以及大写字母ABCDE…

Java 网络编程之NIO(Channel)

同步 VS 异步 同步 同步编程是指当程序执行某个操作时,它必须等待该操作完成才能继续执行下一个操作。这意味着程序在执行网络请求时必须等待网络请求完成才能继续执行下一步操作,因此同步编程通常会导致程序的性能降低。在网络编程中,同步编…

【分享】免梯子的GPT,玩 ChatGPT 的正确姿势

火了一周的 ChatGPT,HG 不允许还有小伙伴不知道这个东西是什么?简单来说就是,你可以让它扮演任何事物,据说已经有人用它开始了颜色文学创作。因为它太火了,所以,本周特推在几十个带有“chatgpt”的项目中选…

基于YOLOv5的水下海洋目标检测

摘要:水下海洋目标检测技术具有广泛的应用前景,可以用于海洋环境监测、海洋资源开发、海洋生物学研究等领域。本文提出了一种基于 YOLOv5 的水下海洋目标检测方法,使用数据增强方法进行了大量实验,并与其他方法进行了对比&#xf…

postgres 日志级别要设置成 wal_level = logical 的影响? 物理复制和逻辑复制

物理复制和逻辑复制 物理复制和逻辑复制 概念 WAL 区别 逻辑复制 将 PostgreSQL 的日志级别设置为 wal_level logical 会启用逻辑复制(logical replication)功能,这对于一些应用场景非常有用。 逻辑复制是一种高级的复制技术&#x…