搁浅沉默
作者搁浅沉默·2024-04-22 10:56
研发工程师·某股份银行

某行日志平台Elasticsearch运维静态配置篇

字数 5617阅读 539评论 4赞 0

一、 引言

本篇为 Elasticsearch 集群静态配置篇,旨在让大家对于 Elasticsearch 相关的配置有个简单了解,后续会继续推出动态配置篇,之前的两篇文章介绍了 Elasticsearch 集群相关的基础知识, Elasticsearch 集群在企业场景中的实际应用场景,诚然,当前 Elasticsearch 集群版本已经迭代至 8.13 版本,增加了诸多新特性,如“向量”的概念,但由于金融行业的特殊性,对于技术组件的选型往往保持着一个谨慎的态度,且金融场景较为单一,因此,从笔者的视角去观察, Elasticsearch 集群使用较多的场景仍在于搭建各金融行业的日志模块。

本篇将针对 Elasticsearch 的静态配置文件进行一个简单的介绍,该静态文件会在 Elasticsearch 集群启动时进行加载,且一旦修改,需重启 Elasticsearch 集群,因此,在实践过程中,需注意合理进行配置,本次介绍的为 Elasticsearch 7.x 版本下的配置文件。

二、 Elasticsearch 配置项

1. elasticsearch.yml 静态配置文件

elasticsearch.yml 是 Elasticsearch 主要的配置文件之一,用于配置 Elasticsearch 集群的各种参数和选项。这个文件通常位于 Elasticsearch 的安装目录下的 config 子目录中。

1.1. 集群及网关相关配置

1.1.1. cluster.name

指定 Elasticsearch 集群的名称。所有节点必须使用相同的集群名称才能组成一个集群。
示例: cluster.name: cluster-1

1.1.2. network.host

指定 Elasticsearch 节点绑定的网络地址。可以是 IP 地址或主机名。
示例: network.host: 192.168.0.1

1.1.3. http.port

指定 Elasticsearch HTTP API 监听的端口。
示例: http.port: 9200

1.1.4. discovery.seed_hosts

指定用于发现集群中其他节点的主机列表。在启动时,节点将使用这些主机来发现其他节点。
示例: discovery.seed_hosts: ["host1", "host2"]

1.1.5. cluster.initial_master_nodes

指定集群初始化阶段作为主节点的初始节点列表。在集群启动时,这些节点将参与选举过程,并确定初始的主节点。
示例: cluster.initial_master_nodes: ["node-1", "node-2"]

1.1.6. gateway.recover_after_nodes

指定在哪个节点数量已经加入后,开始执行集群恢复。这可以防止在集群启动过程中触发早期的恢复操作。
示例: gateway.recover_after_nodes: 2

1.1.7. gateway.expected_nodes

指定在集群中期望的节点数量。如果节点数少于这个值,集群将不会在启动过程中完成恢复。
示例: gateway.expected_nodes: 3

1.1.8. path.data

指定 Elasticsearch 数据文件的存储路径。每个节点都会在此路径下创建索引和存储数据。
示例: path.data: /path/to/data

1.1.9. path.logs

指定 Elasticsearch 日志文件的存储路径。
示例: path.logs: /path/to/logs

1.2. 节点相关配置

1.2.1. node.attr.*

允许为节点添加自定义属性,以便用于集群中的节点选择和分配。这些属性可以在搜索、索引分片分配等场景中使用。
示例: node.attr.rack: rack-1

1.2.2. node.master

指定节点是否可以成为主节点。可以将此设置为 true 或 false 。默认情况下,所有节点都可以成为主节点。
示例: node.master: true

1.2.3. node.data

指定节点是否可以存储数据。可以将此设置为 true 或 false 。默认情况下,所有节点都可以存储数据。
示例: node.data: true

1.2.4. node.ingest

指定节点是否可以执行 Ingest 转换( Ingest Transformation )。 Ingest 转换允许节点在索引文档之前对文档进行预处理。
示例: node.ingest: true

1.2.5. node.ml

指定节点是否可以执行机器学习任务。如果你使用 Elasticsearch 的机器学习功能,需要确保至少有一个节点设置为 node.ml: true 。
示例: node.ml: true

1.2.6. node.remote_cluster_client

指定节点是否允许作为远程集群客户端。如果你正在配置远程集群连接,需要选择一个或多个节点作为远程集群客户端。
示例: node.remote_cluster_client: true

1.2.7. node.attr.zone

允许为节点指定所属的区域或地理位置。这对于跨多个地理位置的集群部署很有用。
示例: node.attr.zone: us-west

1.3. 安全相关配置

安全配置在最初多数企业实际使用 Elasticsearch 集群时,很少进行配置,导致 Elasticsearch 集群无需用户即可访问,增加了数据的不安全性,近年来,由于各行业对于数据安全的要求提高,故而笔者在此列出了安全相关方面配置,以供大家了解使用。

1.3.1. xpack.security.enabled

指定是否启用 X-Pack 安全功能。开启后,访问 Elasticsearch 集群则需要预先进行用户登录操作。
示例: xpack.security.enabled: true

1.3.2. xpack.security.transport.ssl.enabled

指定是否启用 Elasticsearch 之间的节点间通信加密。当启用时,节点间通信将使用 SSL/TLS 进行加密。
示例: xpack.security.transport.ssl.enabled: true

1.3.3. xpack.security.http.ssl.enabled

指定是否启用 HTTP 客户端与 Elasticsearch 之间的通信加密。当启用时,客户端与 Elasticsearch 节点之间的通信将使用 SSL/TLS 进行加密。
示例: xpack.security.http.ssl.enabled: true

1.3.4. xpack.security.transport.ssl.keystore.path

指定 SSL/TLS 加密所需的密钥库( Keystore )路径。密钥库包含用于加密和身份验证的证书和密钥。
示例: xpack.security.transport.ssl.keystore.path: /path/to/keystore

1.3.5. xpack.security.transport.ssl.truststore.path

指定 SSL/TLS 加密所需的信任库( Truststore )路径。信任库包含用于验证对方身份的受信任证书。
示例: xpack.security.transport.ssl.truststore.path: /path/to/truststore

1.3.6. xpack.security.http.ssl.keystore.path

指定 HTTP 客户端与 Elasticsearch 之间通信加密所需的密钥库路径。
示例: xpack.security.http.ssl.keystore.path: /path/to/keystore

1.3.7. xpack.security.http.ssl.truststore.path

指定 HTTP 客户端与 Elasticsearch 之间通信加密所需的信任库路径。
示例: xpack.security.http.ssl.truststore.path: /path/to/truststore

三、 jvm.options 配置文件

jvm.options 文件是 Elasticsearch 用来配置 Java 虚拟机 (JVM) 的选项的文件之一。这个文件通常位于 Elasticsearch 的配置目录 config 下,在 jvm.options 文件中,可以配置 JVM 的参数,如堆内存大小、垃圾回收器选项等,以优化 Elasticsearch 的性能和稳定性。

1. -Xms 和 -Xmx 参数

这两个参数分别表示 JVM 的初始堆大小 (-Xms) 和最大堆大小 (-Xmx) 。通过设置这两个参数来控制 Elasticsearch 使用的内存量。例如, -Xms4g 和 -Xmx4g 表示初始堆大小和最大堆大小都为 4GB ,建议 Elasticsearch 实际场景下,该值一般为机器资源内存的一半,但是最大值为 31GB ,过大反而会引起问题,原因如下:

Elasticsearch 是基于 Lucene 开发的,而 Lucene 可以利用操作系统底层机制来缓存内存数据结构 。 Lucene 中的段是分别存储到单个文件中的,而且这些文件并不会发生变化,故而会使用缓存去缓存这些数据,同时操作系统也会将这些段文件缓存起来,以便更快的访问。
Lucene 的性能取决于和操作系统的交互,如果将所有的内存都分配给 Elasticsearch ,不留一点给 Lucene ,全文检索性能将会很差。

因此,建议把 50% 的内存给 Elasticsearch , Lucene 会很快占用剩下的内存。

这里简要解释一下原因:

JVM 在内存小于 32G 的时候会采用一个内存对象指针压缩技术。在 Java 中,所有的对象都分配在堆上,通过指针引用对象。普通对象指针( OOP )指向这些对象,通常为 CPU 字长的大小根据处理器的不同,分为 32 位或 64 位。指针引用的就是这个 OOP 值的字节位置。对于 32 位的系统,堆内存最大为 4GB 。对于 64 位的系统,则可以使用更大的内存,但是 64 位的指针意味着更大的浪费,因为指针本身过大。更大的指针在主内存和各级缓存(例如 LLC , L1 等)之间移动数据的时候,会占用更多的带宽。

内存指针压缩( compressed oops )技术:指针不再表示对象在内存中的精确位置,而是表示偏移量。这意味着 32 位的指针可以引用 40 亿个对象,而不是 40 亿个字节。也就是说堆内存增长到 32 GB 的物理内存,也可以用 32 位的指针表示。

但是,当分配的内存超过 32 GB 的时候,指针就会切回普通对象的指针。每个对象的指针都变长了,就会使用更多的 CPU 内存带宽,也就是说实际上失去了更多的内存。实际上,当内存到达 40–50 GB 时,有效内存才相当于使用内存对象指针压缩技术时候的 32 GB 内存。

2. -Xss 参数

-Xss 这个参数用来设置线程的栈大小。默认值取决于操作系统和 JVM 的版本,通常是 512KB 或 1MB 。可以根据需要调整这个值,建议不要将其设置得过大,以避免消耗过多的内存。

3. -XX:+UseConcMarkSweepGC 和 -XX:+UseG1GC 参数

这两个参数用来选择垃圾回收器。 UseConcMarkSweepGC 表示使用 CMS 垃圾回收器,而 UseG1GC 表示使用 G1 垃圾回收器。

4. XX:MaxGCPauseMillis 参数

这个参数用来设置垃圾回收的最大停顿时间。可以通过调整这个值来平衡垃圾回收的性能和停顿时间。

5. -XX:+HeapDumpOnOutOfMemoryError 参数

当 JVM 发生内存溢出错误时,这个参数会导致 JVM 在退出之前生成堆转储文件。

6. -XX:+HeapDumpOnOutOfMemoryError 参数

这个参数用来指定堆转储文件的路径。

7. -XX:+UseCompressedOops

这个参数用来启用压缩指针,以减少对象引用的内存消耗。

8. -Dfile.encoding

这个参数用来设置文件编码。

四、 log4j2.properties 配置文件

用于配置日志记录器 log4j2 的属性文件之一。 log4j2 是 Elasticsearch 使用的日志框架,它负责管理日志记录、输出和日志级别等设置。
这个配置文件包含了以下几个部分:

  • 全局属性设置:在配置文件的顶部,可以设置一些全局属性,比如 status ,用于设置日志的记录级别, status = error 表示只记录错误级别的日志。
  • Appender 配置: Appender 是用于指定日志输出位置和格式的组件。在上面的示例中,定义了一个名为 console 的控制台输出的 Appender 。指定了输出格式为 PatternLayout ,并定义了输出格式的模式。
  • Root Logger 配置:根日志记录器是所有日志记录器的父记录器,它定义了日志记录器的默认日志级别和输出目标。在上面的示例中,根日志记录器的级别被设置为 info ,并且指定了使用 console 这个 Appender 。

五、结语

本篇主要介绍了 Elasticsearch 集群的静态配置文件主要参数的情况,一家之言,仅供参考。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论4 条评论

jillmejillme课题专家组CIO某大型银行
2024-05-05 09:26
真技术文章,专注于Elasticsearch的静态配置,特别是针对关键配置文件进行了深入的探讨。内容深度与准确性上,能够为读者提供有价值的指导和参考。文章中的配置项和配置方法都是基于实际运维经验的总结,具有很强的实用性。读者可以根据文章中的指导,针对自己的Elasticsearch环境进行相应的配置调整。同时,文章还通过具体的配置示例来辅助说明,进一步提高了可读性。 本文章对于希望深入了解Elasticsearch静态配置的读者来说,是一本宝贵的资料。 建议作者在未来可以进一步扩展文章的内容,例如增加对Elasticsearch其他重要配置文件的讨论或者深入探讨一些高级的配置方法和技巧。此外,还可以结合一些实际的案例或场景来讲解配置的应用和效果,使得文章更加生动和具体。
朱向东朱向东课题专家组高级工程师某银行
2024-04-29 11:53
这是一篇内容丰富的技术文章,对于需要深入了解Elasticsearch静态配置的用户来说,是一个很好的资源。
hellopqshihellopqshi数据库架构师金电信息科技(北京)有限责任公司
2024-04-27 16:53
本文提供了关于Elasticsearch集群静态配置的详细介绍,涵盖了从基础到高级的多个配置项。为Elasticsearch运维人员提供了宝贵的配置指导,有助于构建和管理一个高效、安全的Elasticsearch集群。
ccww552010ccww552010课题专家组软件开发工程师某科技企业
2024-04-26 19:16
这篇文章提供了关于Elasticsearch集群配置的详细指南,特别是针对静态配置文件的介绍。作者从集群和网关的配置讲起,逐步深入到节点相关设置、安全配置,以及JVM和日志框架的优化。文章内容丰富,示例清晰,对于运维人员和开发人员来说,是一份很好的参考资源。特别是对于金融行业,Elasticsearch作为日志模块的常见选择,这篇文章提供了实用的配置指导,有助于提高集群的性能和安全性。不过,需要注意的是,Elasticsearch的版本更新可能会带来新的配置选项或改变现有配置的默认行为,因此在应用这些配置时,应结合当前使用的版本进行适当的调整。
Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广