安装 OpenSearch
本节提供关于如何在主机上安装 OpenSearch 的信息,包括要打开的端口以及要在主机上配置的重要设置。
有关操作系统兼容性,请参阅兼容的操作系统。
文件系统建议
在生产工作流中,避免将网络文件系统用于节点存储。将网络文件系统用于节点存储可能会因为网络条件(如延迟或有限吞吐量)或读写速度等因素导致集群性能问题。在可能的情况下,应使用安装在主机上的固态硬盘 (SSD) 进行节点存储。
Java 兼容性
适用于 Linux 的 OpenSearch 发行版在 jdk
目录中附带了一个兼容的 Adoptium JDK 版本的 Java。要查找 JDK 版本,请运行 ./jdk/bin/java -version
。例如,OpenSearch 1.0.0 tarball 附带 Java 15.0.1+9 (非 LTS),OpenSearch 1.3.0 附带 Java 11.0.14.1+1 (LTS),OpenSearch 2.0.0 附带 Java 17.0.2+8 (LTS)。OpenSearch 已通过所有兼容的 Java 版本进行测试。
OpenSearch 版本 | 兼容的 Java 版本 | 捆绑的 Java 版本 |
---|---|---|
1.0–1.2.x | 11, 15 | 15.0.1+9 |
1.3.x | 8, 11, 14 | 11.0.25+9 |
2.0.0–2.11.x | 11, 17 | 17.0.2+8 |
2.12.0+ | 11, 17, 21 | 21.0.5+11 |
要使用不同的 Java 安装,请将 OPENSEARCH_JAVA_HOME
或 JAVA_HOME
环境变量设置为 Java 安装位置。例如
export OPENSEARCH_JAVA_HOME=/path/to/opensearch-3.1.0/jdk
网络要求
OpenSearch 组件需要打开以下端口。
端口号 | OpenSearch 组件 |
---|---|
443 | AWS OpenSearch Service 中使用传输加密 (TLS) 的 OpenSearch Dashboards |
5601 | OpenSearch Dashboards |
9200 | OpenSearch REST API |
9300 | 节点通信和传输(内部),跨集群搜索 |
9600 | 性能分析器 |
重要设置
对于生产工作负载,请确保 Linux 设置 vm.max_map_count
至少设置为 262144。即使您使用 Docker 镜像,也请在主机上设置此值。要检查当前值,请运行此命令
cat /proc/sys/vm/max_map_count
要增加该值,请将以下行添加到 /etc/sysctl.conf
vm.max_map_count=262144
然后运行 sudo sysctl -p
重新加载。
对于 Windows 工作负载,您可以通过运行以下命令设置 vm.max_map_count
wsl -d docker-desktop
sysctl -w vm.max_map_count=262144
示例 docker-compose.yml 文件还包含几个关键设置
-
bootstrap.memory_lock=true
禁用交换(以及
memlock
)。交换会显著降低性能和稳定性,因此您应确保在生产集群上禁用它。启用
bootstrap.memory_lock
设置将导致 JVM 保留其所需的任何内存。Java SE Hotspot VM 垃圾回收调优指南中记载了默认 1 GB(千兆字节)的类元数据原生内存保留。结合 Java 堆,这可能导致内存少于这些要求的虚拟机出现原生内存不足的错误。为防止错误,请使用-XX:CompressedClassSpaceSize
或-XX:MaxMetaspaceSize
限制保留内存大小,并设置 Java 堆大小以确保您有足够的系统内存。 -
OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m
设置 Java 堆的大小(建议为系统 RAM 的一半)。
OpenSearch 默认将堆内存分配设置为 -Xms1g -Xmx1g
,这优先于使用百分比表示法(-XX:MinRAMPercentage
、-XX:MaxRAMPercentage
)指定的配置。例如,如果您设置 OPENSEARCH_JAVA_OPTS=-XX:MinRAMPercentage=30 -XX:MaxRAMPercentage=70
,预定义的 -Xms1g -Xmx1g
值将覆盖这些设置。当使用 OPENSEARCH_JAVA_OPTS
定义内存分配时,请确保使用 -Xms
和 -Xmx
表示法。
-
nofile 65536
为 OpenSearch 用户设置 65536 个打开文件的限制。
-
port 9600
允许您通过端口 9600 访问性能分析器。
不要在多个位置声明相同的 JVM 选项,因为这可能导致意外行为或 OpenSearch 服务启动失败。如果您使用环境变量(例如 OPENSEARCH_JAVA_OPTS=-Xms3g -Xmx3g
)声明 JVM 选项,则应注释掉 config/jvm.options
中对该 JVM 选项的任何引用。反之,如果您在 config/jvm.options
中定义 JVM 选项,则不应使用环境变量定义这些 JVM 选项。
重要系统属性
OpenSearch 有许多系统属性,如下表所示,您可以在 config/jvm.options
或 OPENSEARCH_JAVA_OPTS
中使用 -D
命令行参数表示法指定这些属性。
属性 | 描述 |
---|---|
opensearch.xcontent.string.length.max=<value> | 默认情况下,OpenSearch 对 JSON/YAML/CBOR/Smile 字符串字段的最大长度没有限制。为保护您的集群免受潜在的分布式拒绝服务 (DDoS) 或内存问题的影响,您可以将 opensearch.xcontent.string.length.max 系统属性设置为一个合理的限制(最大值为 2,147,483,647),例如,-Dopensearch.xcontent.string.length.max=5000000 。 |
opensearch.xcontent.fast_double_writer=[true|false] | 默认情况下,OpenSearch 使用 Java 运行时环境提供的默认实现序列化浮点数。将此值设置为 true 以使用 Schubfach 算法,该算法速度更快,但可能导致精度上微小差异。默认值为 false 。 |
opensearch.xcontent.name.length.max=<value> | 默认情况下,OpenSearch 对 JSON/YAML/CBOR/Smile 字段名称的最大长度没有限制。为保护您的集群免受潜在的 DDoS 或内存问题的影响,您可以将 opensearch.xcontent.name.length.max 系统属性设置为一个合理的限制(最大值为 2,147,483,647),例如,-Dopensearch.xcontent.name.length.max=50000 。 |
opensearch.xcontent.depth.max=<value> | 默认情况下,OpenSearch 对 JSON/YAML/CBOR/Smile 文档的最大嵌套深度没有限制。为保护您的集群免受潜在的 DDoS 或内存问题的影响,您可以将 opensearch.xcontent.depth.max 系统属性设置为一个合理的限制(最大值为 2,147,483,647),例如,-Dopensearch.xcontent.depth.max=1000 。 |
opensearch.xcontent.codepoint.max=<value> | 默认情况下,OpenSearch 对 YAML 文档的最大大小(以代码点为单位)施加了 52428800 的限制。为了保护您的集群免受潜在的 DDoS 或内存问题的影响,您可以将 opensearch.xcontent.codepoint.max 系统属性更改为一个合理的限制(最大值为 2,147,483,647)。例如,-Dopensearch.xcontent.codepoint.max=5000000 。 |