本篇为 Elasticsearch 集群静态配置篇,旨在让大家对于 Elasticsearch 相关的配置有个简单了解,后续会继续推出动态配置篇,之前的两篇文章介绍了 Elasticsearch 集群相关的基础知识, Elasticsearch 集群在企业场景中的实际应用场景,诚然,当前 Elasticsearch 集群版本已经迭代至 8.13 版本,增加了诸多新特性,如“向量”的概念,但由于金融行业的特殊性,对于技术组件的选型往往保持着一个谨慎的态度,且金融场景较为单一,因此,从笔者的视角去观察, Elasticsearch 集群使用较多的场景仍在于搭建各金融行业的日志模块。
本篇将针对 Elasticsearch 的静态配置文件进行一个简单的介绍,该静态文件会在 Elasticsearch 集群启动时进行加载,且一旦修改,需重启 Elasticsearch 集群,因此,在实践过程中,需注意合理进行配置,本次介绍的为 Elasticsearch 7.x 版本下的配置文件。
elasticsearch.yml 是 Elasticsearch 主要的配置文件之一,用于配置 Elasticsearch 集群的各种参数和选项。这个文件通常位于 Elasticsearch 的安装目录下的 config 子目录中。
指定 Elasticsearch 集群的名称。所有节点必须使用相同的集群名称才能组成一个集群。
示例: cluster.name: cluster-1
指定 Elasticsearch 节点绑定的网络地址。可以是 IP 地址或主机名。
示例: network.host: 192.168.0.1
指定 Elasticsearch HTTP API 监听的端口。
示例: http.port: 9200
指定用于发现集群中其他节点的主机列表。在启动时,节点将使用这些主机来发现其他节点。
示例: discovery.seed_hosts: ["host1", "host2"]
指定集群初始化阶段作为主节点的初始节点列表。在集群启动时,这些节点将参与选举过程,并确定初始的主节点。
示例: cluster.initial_master_nodes: ["node-1", "node-2"]
指定在哪个节点数量已经加入后,开始执行集群恢复。这可以防止在集群启动过程中触发早期的恢复操作。
示例: gateway.recover_after_nodes: 2
指定在集群中期望的节点数量。如果节点数少于这个值,集群将不会在启动过程中完成恢复。
示例: gateway.expected_nodes: 3
指定 Elasticsearch 数据文件的存储路径。每个节点都会在此路径下创建索引和存储数据。
示例: path.data: /path/to/data
指定 Elasticsearch 日志文件的存储路径。
示例: path.logs: /path/to/logs
允许为节点添加自定义属性,以便用于集群中的节点选择和分配。这些属性可以在搜索、索引分片分配等场景中使用。
示例: node.attr.rack: rack-1
指定节点是否可以成为主节点。可以将此设置为 true 或 false 。默认情况下,所有节点都可以成为主节点。
示例: node.master: true
指定节点是否可以存储数据。可以将此设置为 true 或 false 。默认情况下,所有节点都可以存储数据。
示例: node.data: true
指定节点是否可以执行 Ingest 转换( Ingest Transformation )。 Ingest 转换允许节点在索引文档之前对文档进行预处理。
示例: node.ingest: true
指定节点是否可以执行机器学习任务。如果你使用 Elasticsearch 的机器学习功能,需要确保至少有一个节点设置为 node.ml: true 。
示例: node.ml: true
指定节点是否允许作为远程集群客户端。如果你正在配置远程集群连接,需要选择一个或多个节点作为远程集群客户端。
示例: node.remote_cluster_client: true
允许为节点指定所属的区域或地理位置。这对于跨多个地理位置的集群部署很有用。
示例: node.attr.zone: us-west
安全配置在最初多数企业实际使用 Elasticsearch 集群时,很少进行配置,导致 Elasticsearch 集群无需用户即可访问,增加了数据的不安全性,近年来,由于各行业对于数据安全的要求提高,故而笔者在此列出了安全相关方面配置,以供大家了解使用。
指定是否启用 X-Pack 安全功能。开启后,访问 Elasticsearch 集群则需要预先进行用户登录操作。
示例: xpack.security.enabled: true
指定是否启用 Elasticsearch 之间的节点间通信加密。当启用时,节点间通信将使用 SSL/TLS 进行加密。
示例: xpack.security.transport.ssl.enabled: true
指定是否启用 HTTP 客户端与 Elasticsearch 之间的通信加密。当启用时,客户端与 Elasticsearch 节点之间的通信将使用 SSL/TLS 进行加密。
示例: xpack.security.http.ssl.enabled: true
指定 SSL/TLS 加密所需的密钥库( Keystore )路径。密钥库包含用于加密和身份验证的证书和密钥。
示例: xpack.security.transport.ssl.keystore.path: /path/to/keystore
指定 SSL/TLS 加密所需的信任库( Truststore )路径。信任库包含用于验证对方身份的受信任证书。
示例: xpack.security.transport.ssl.truststore.path: /path/to/truststore
指定 HTTP 客户端与 Elasticsearch 之间通信加密所需的密钥库路径。
示例: xpack.security.http.ssl.keystore.path: /path/to/keystore
指定 HTTP 客户端与 Elasticsearch 之间通信加密所需的信任库路径。
示例: xpack.security.http.ssl.truststore.path: /path/to/truststore
jvm.options 文件是 Elasticsearch 用来配置 Java 虚拟机 (JVM) 的选项的文件之一。这个文件通常位于 Elasticsearch 的配置目录 config 下,在 jvm.options 文件中,可以配置 JVM 的参数,如堆内存大小、垃圾回收器选项等,以优化 Elasticsearch 的性能和稳定性。
这两个参数分别表示 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 内存。
-Xss 这个参数用来设置线程的栈大小。默认值取决于操作系统和 JVM 的版本,通常是 512KB 或 1MB 。可以根据需要调整这个值,建议不要将其设置得过大,以避免消耗过多的内存。
这两个参数用来选择垃圾回收器。 UseConcMarkSweepGC 表示使用 CMS 垃圾回收器,而 UseG1GC 表示使用 G1 垃圾回收器。
这个参数用来设置垃圾回收的最大停顿时间。可以通过调整这个值来平衡垃圾回收的性能和停顿时间。
当 JVM 发生内存溢出错误时,这个参数会导致 JVM 在退出之前生成堆转储文件。
这个参数用来指定堆转储文件的路径。
这个参数用来启用压缩指针,以减少对象引用的内存消耗。
这个参数用来设置文件编码。
用于配置日志记录器 log4j2 的属性文件之一。 log4j2 是 Elasticsearch 使用的日志框架,它负责管理日志记录、输出和日志级别等设置。
这个配置文件包含了以下几个部分:
本篇主要介绍了 Elasticsearch 集群的静态配置文件主要参数的情况,一家之言,仅供参考。
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞0
添加新评论4 条评论
2024-05-05 09:26
2024-04-29 11:53
2024-04-27 16:53
2024-04-26 19:16