2. Elasticsearch 安装与部署


文档摘要

Elasticsearch 安装与部署 Elasticsearch 安装与部署详解:从单节点到集群实践 引言 Elasticsearch 作为一款强大的开源分布式搜索和分析引擎,在现代数据处理领域占据着举足轻重的地位。它以其卓越的性能、灵活的扩展性和丰富的特性,被广泛应用于日志分析、全文搜索、应用监控、安全信息和事件管理(SIEM)等众多场景。要充分发挥 Elasticsearch 的潜力,首先需要掌握其安装与部署的关键步骤。 1. 准备工作 在开始 Elasticsearch 的安装部署之前,我们需要进行一些准备工作,确保环境满足 Elasticsearch 的运行要求。 1.

2. Elasticsearch 安装与部署

Elasticsearch 安装与部署详解:从单节点到集群实践

引言

Elasticsearch 作为一款强大的开源分布式搜索和分析引擎,在现代数据处理领域占据着举足轻重的地位。它以其卓越的性能、灵活的扩展性和丰富的特性,被广泛应用于日志分析、全文搜索、应用监控、安全信息和事件管理(SIEM)等众多场景。要充分发挥 Elasticsearch 的潜力,首先需要掌握其安装与部署的关键步骤。

1. 准备工作

在开始 Elasticsearch 的安装部署之前,我们需要进行一些准备工作,确保环境满足 Elasticsearch 的运行要求。

1.1 系统要求

  • 操作系统: Elasticsearch 支持多种操作系统,包括 Linux、macOS 和 Windows。 建议使用 Linux 系统作为生产环境,例如 CentOS, Ubuntu, Debian 等。

  • Java 环境: Elasticsearch 基于 Java 开发,因此需要安装 Java Development Kit (JDK)。 推荐使用 OpenJDK 11 或更高版本。您可以通过以下命令检查 Java 版本:

    java -version

    如果未安装或版本过低,请根据您的操作系统选择合适的 JDK 版本进行安装。例如,在 Ubuntu 系统上可以使用 apt 命令安装 OpenJDK 11:

    sudo apt update sudo apt install openjdk-11-jdk
  • 资源需求: Elasticsearch 的性能与资源配置密切相关。 建议根据您的数据量和查询负载预估资源需求。

    • 内存 (RAM): Elasticsearch 依赖于堆内存来存储索引和执行搜索。 建议至少分配 4GB 内存,生产环境建议 8GB 或更多

    • 磁盘空间: 用于存储索引数据。 预估数据量并留出足够的磁盘空间。 建议使用 SSD 固态硬盘 以获得更好的性能。

    • CPU: Elasticsearch 可以充分利用多核 CPU。 建议根据负载选择合适的 CPU 核心数。

  • 网络配置: 确保服务器网络连接正常,防火墙允许 Elasticsearch 使用的端口 (默认 9200 用于 HTTP API, 9300 用于节点间通信)。

1.2 下载 Elasticsearch

访问 Elasticsearch 官方网站的 下载页面,根据您的操作系统和需求选择合适的 Elasticsearch 版本进行下载。 Elasticsearch 提供了多种安装包格式:

  • .tar.gz (Linux/macOS): 通用的压缩包格式,适用于 Linux 和 macOS 系统,方便手动安装。

  • .zip (Windows): Windows 系统的压缩包格式。

  • .deb (Debian/Ubuntu): Debian 和 Ubuntu 系统的软件包格式,可以使用 apt 命令安装。

  • .rpm (CentOS/RedHat): CentOS 和 RedHat 系统的软件包格式,可以使用 yumrpm 命令安装。

  • Docker 镜像: 方便使用 Docker 容器部署 Elasticsearch。

2. 单节点 Elasticsearch 安装与部署

单节点 Elasticsearch 适用于开发测试环境或数据量较小的场景。 我们将分别介绍使用 .tar.gz 压缩包和 Docker 镜像两种方式进行安装。

2.1 使用 .tar.gz 压缩包安装 (Linux/macOS)

  1. 下载压缩包: 在官方网站下载 .tar.gz 格式的 Elasticsearch 安装包。 例如 elasticsearch-8.x.x-linux-x86_64.tar.gz

  2. 解压压缩包: 使用 tar 命令将压缩包解压到您希望安装 Elasticsearch 的目录。 例如 /opt 目录:

    sudo tar -xzf elasticsearch-8.x.x-linux-x86_64.tar.gz -C /opt cd /opt/elasticsearch-8.x.x
  3. 配置 Elasticsearch: 进入解压后的 Elasticsearch 目录,编辑 config/elasticsearch.yml 配置文件。 以下是一些重要的配置项:

    # 集群名称,默认为 "elasticsearch" cluster.name: my-es-cluster # 节点名称,默认为随机生成 node.name: node-1 # 数据存储路径 path.data: /var/lib/elasticsearch # 日志存储路径 path.logs: /var/log/elasticsearch # 网络绑定地址,默认为 0.0.0.0 (监听所有网络接口) network.host: 0.0.0.0 # HTTP API 端口,默认为 9200 http.port: 9200 # 节点间通信端口,默认为 9300 transport.port: 9300 # 启用安全特性 (生产环境强烈建议启用) xpack.security.enabled: false # 演示环境关闭,生产环境请设置为 true # 发现机制配置 (单节点部署可以忽略) discovery.type: single-node

    代码解释:

    • cluster.name: 定义 Elasticsearch 集群的名称。 同一集群的节点必须使用相同的集群名称。

    • node.name: 定义节点的名称,用于在集群中唯一标识节点。

    • path.datapath.logs: 分别指定数据和日志的存储路径。 请确保 Elasticsearch 进程对这些目录具有读写权限。

    • network.host: 配置 Elasticsearch 监听的网络地址。 0.0.0.0 表示监听所有网络接口,允许从任何 IP 地址访问。 生产环境建议绑定到特定的 IP 地址以提高安全性。

    • http.porttransport.port: 分别配置 HTTP API 和节点间通信的端口。 默认端口通常无需修改。

    • xpack.security.enabled: 控制是否启用 Elasticsearch 的安全特性。 生产环境强烈建议启用安全特性,并配置用户认证和授权。 演示环境可以暂时关闭,但请务必了解安全风险。

    • discovery.type: single-node: 显式指定为单节点模式,禁用集群发现机制。

  4. 配置 JVM 选项: 编辑 config/jvm.options 文件,配置 JVM 堆内存大小。 根据您的服务器内存和负载情况调整 -Xms (初始堆内存) 和 -Xmx (最大堆内存) 参数。 例如,设置 4GB 堆内存:

    -Xms4g -Xmx4g

    重要提示: -Xms-Xmx 建议设置为相同的值,避免 JVM 运行时动态调整堆内存大小带来的性能开销。 堆内存大小不应超过物理内存的一半,且不应超过 32GB (如果使用 Compressed Oops 技术)。

  5. 启动 Elasticsearch: 在 Elasticsearch 根目录下,执行以下命令启动 Elasticsearch:

    ./bin/elasticsearch

    您可以使用 -d 参数将 Elasticsearch 放入后台运行:

    ./bin/elasticsearch -d
  6. 验证 Elasticsearch: 打开浏览器或使用 curl 命令访问 http://localhost:9200http://<your_server_ip>:9200 (如果您配置了 network.host0.0.0.0)。 如果 Elasticsearch 启动成功,您将看到类似以下的 JSON 响应:

    { "name" : "node-1", "cluster_name" : "my-es-cluster", "cluster_uuid" : "xxxxxxxxxxxxxxxxxxxxxxxxxx", "version" : { "number" : "8.x.x", "build_flavor" : "default", "build_type" : "tar", "build_hash" : "xxxxxxxxxxxxxxxxxxxxxxxxxx", "build_date" : "2023-10-20TxxxxxxZ", "build_snapshot" : false, "lucene_version" : "9.x.x", "minimum_wire_compatibility_version" : "7.17.0", "minimum_index_compatibility_version" : "7.0.0" }, "tagline" : "You Know, for Search" }

    此外,您还可以使用 curl 命令检查集群健康状态:

    curl -X GET "localhost:9200/_cluster/health?pretty"

    正常情况下,您应该看到 statusgreenyellow (单节点集群通常为 yellow,因为副本未分配)。

2.2 使用 Docker 镜像安装

Docker 容器化部署 Elasticsearch 更加便捷和高效,尤其是在需要快速搭建开发测试环境或进行集群管理时。

  1. 拉取 Elasticsearch 镜像: 使用 docker pull 命令从 Docker Hub 拉取官方 Elasticsearch 镜像。 例如,拉取 8.x.x 版本的镜像:

    docker pull docker.elastic.co/elasticsearch/elasticsearch:8.x.x
  2. 运行 Elasticsearch 容器: 使用 docker run 命令创建并运行 Elasticsearch 容器。 以下是一个基本的运行命令示例:

    docker run -d \ --name es-single-node \ -p 9200:9200 -p 9300:9300 \ -e "discovery.type=single-node" \ -e "ES_JAVA_OPTS=-Xms4g -Xmx4g" \ docker.elastic.co/elasticsearch/elasticsearch:8.x.x

    代码解释:

    • -d: 后台运行容器。

    • --name es-single-node: 为容器指定名称 es-single-node

    • -p 9200:9200 -p 9300:9300: 将容器的 9200 和 9300 端口映射到宿主机的 9200 和 9300 端口,以便从宿主机访问 Elasticsearch 服务。

    • -e "discovery.type=single-node": 通过环境变量设置 discovery.typesingle-node,指定为单节点模式。

    • -e "ES_JAVA_OPTS=-Xms4g -Xmx4g": 通过环境变量设置 JVM 堆内存大小为 4GB。

    • docker.elastic.co/elasticsearch/elasticsearch:8.x.x: 指定使用的 Elasticsearch 镜像和版本。

  3. 持久化数据 (可选但推荐): 默认情况下,Docker 容器的数据存储在容器内部,容器删除后数据会丢失。 为了持久化数据,您可以将宿主机的目录挂载到容器的 /usr/share/elasticsearch/data 目录。 修改 docker run 命令如下:

    docker run -d \ --name es-single-node \ -p 9200:9200 -p 9300:9300 \ -v /path/to/esdata:/usr/share/elasticsearch/data \ # 挂载数据卷 -e "discovery.type=single-node" \ -e "ES_JAVA_OPTS=-Xms4g -Xmx4g" \ docker.elastic.co/elasticsearch/elasticsearch:8.x.x

    /path/to/esdata 替换为您希望在宿主机上存储 Elasticsearch 数据的目录。

  4. 验证 Elasticsearch:.tar.gz 安装方式相同,使用浏览器或 curl 命令访问 http://localhost:9200http://<your_server_ip>:9200 验证 Elasticsearch 是否启动成功。

3. Elasticsearch 集群部署

在生产环境中,为了保证高可用性和可扩展性,通常需要部署 Elasticsearch 集群。 一个典型的 Elasticsearch 集群由多个节点组成,节点之间协同工作,共同存储和处理数据。

3.1 集群架构

Elasticsearch 集群主要包含以下几种类型的节点:

  • Master 节点: 负责集群管理和元数据维护,例如索引创建、分片分配、集群状态更新等。 Master 节点不参与数据存储和搜索,但对集群的稳定性和健康至关重要。 建议配置 奇数个 Master 候选节点 (通常为 3 或 5),通过选举机制选出一个 Master 节点。

  • Data 节点: 负责存储索引数据和执行搜索请求。 Data 节点是集群的核心组件,性能直接影响搜索和索引效率。 根据数据量和查询负载,可以配置多个 Data 节点。

  • Coordinating 节点 (可选): 负责接收客户端请求,并将请求路由到合适的 Data 节点或 Master 节点。 Coordinating 节点本身不存储数据,但可以分担 Master 节点的压力,并提供负载均衡和请求路由功能。 在大型集群中,可以配置独立的 Coordinating 节点。

  • Ingest 节点 (可选): 负责数据预处理和转换,例如数据清洗、字段提取、数据增强等。 Ingest 节点可以在数据写入索引之前对其进行处理,减轻 Data 节点的负担。

Mermaid 图表 - Elasticsearch 集群架构:

3.2 集群部署步骤 (以 .tar.gz 安装为例)

假设我们要部署一个包含 3 个节点的 Elasticsearch 集群。 每个节点都安装在不同的服务器上 (或虚拟机/Docker 容器)。

  1. 在每台服务器上安装 Elasticsearch: 按照 2.1 使用 .tar.gz 压缩包安装 中的步骤,在每台服务器上解压 Elasticsearch 安装包。

  2. 配置 Elasticsearch 节点角色和集群信息: 修改每台服务器上的 config/elasticsearch.yml 配置文件。

    • 所有节点都需要配置相同的 cluster.name:

      cluster.name: my-es-cluster
    • 配置不同的 node.namenetwork.host: 确保每个节点的 node.name 唯一,并配置 network.host 为节点的实际 IP 地址。

      Node 1 (Master 候选 + Data 节点):

      cluster.name: my-es-cluster node.name: es-node-1 network.host: 192.168.1.101 # 替换为 Node 1 的 IP 地址 http.port: 9200 transport.port: 9300 node.roles: [master, data, ingest, ml] # 默认节点角色,包含 master, data, ingest, ml discovery.seed_hosts: ["192.168.1.101:9300", "192.168.1.102:9300", "192.168.1.103:9300"] # 集群种子节点列表 cluster.initial_master_nodes: ["es-node-1", "es-node-2", "es-node-3"] # 首次启动集群时指定 Master 候选节点

      Node 2 (Master 候选 + Data 节点):

      cluster.name: my-es-cluster node.name: es-node-2 network.host: 192.168.1.102 # 替换为 Node 2 的 IP 地址 http.port: 9200 transport.port: 9300 node.roles: [master, data, ingest, ml] discovery.seed_hosts: ["192.168.1.101:9300", "192.168.1.102:9300", "192.168.1.103:9300"] cluster.initial_master_nodes: ["es-node-1", "es-node-2", "es-node-3"]

      Node 3 (Master 候选 + Data 节点):

      cluster.name: my-es-cluster node.name: es-node-3 network.host: 192.168.1.103 # 替换为 Node 3 的 IP 地址 http.port: 9200 transport.port: 9300 node.roles: [master, data, ingest, ml] discovery.seed_hosts: ["192.168.1.101:9300", "192.168.1.102:9300", "192.168.1.103:9300"] cluster.initial_master_nodes: ["es-node-1", "es-node-2", "es-node-3"]

      代码解释:

      • node.roles: 配置节点的角色。 [master, data, ingest, ml] 表示该节点同时作为 Master 候选节点、Data 节点、Ingest 节点和 Machine Learning 节点。 您可以根据需求调整节点角色。 例如,如果希望节点只作为 Data 节点,可以设置为 node.roles: [data]

      • discovery.seed_hosts: 配置集群种子节点列表。 列出集群中其他节点的 IP 地址和端口 (通常是 transport.port)。 新节点启动时会尝试连接这些种子节点,加入集群。

      • cluster.initial_master_nodes: 仅在首次启动集群时需要配置。 列出集群中作为 Master 候选节点的 node.name。 Elasticsearch 会根据这些节点进行 Master 选举。 集群首次启动后,此配置可以移除或注释掉。

  3. 启动 Elasticsearch 节点: 在每台服务器上,进入 Elasticsearch 根目录,执行 ./bin/elasticsearch 命令启动节点。

  4. 验证集群状态: 在任意一个节点上,使用 curl 命令检查集群健康状态:

    curl -X GET "localhost:9200/_cluster/health?pretty"

    如果集群部署成功,您应该看到 statusgreen (所有主分片和副本分片都已分配) 或 yellow (主分片已分配,但副本分片可能未完全分配,例如在集群刚启动时)。 如果 statusred,则表示集群存在问题,需要检查日志排查错误。

    您还可以使用 _cat/nodes API 查看集群节点列表:

    curl -X GET "localhost:9200/_cat/nodes?v"

    该 API 将返回集群中所有节点的详细信息,包括节点名称、IP 地址、角色、负载等。

4. 安全配置 (生产环境)

生产环境的 Elasticsearch 集群必须启用安全特性,保护数据安全和集群稳定。 Elasticsearch Security 提供了以下主要功能:

  • 身份认证 (Authentication): 验证用户身份,例如通过用户名/密码、API Key、LDAP、Active Directory 等方式。

  • 授权 (Authorization): 控制用户对集群资源的访问权限,例如索引、文档、API 等。

  • 传输层加密 (TLS/SSL): 加密节点间通信和客户端与集群之间的 HTTP 通信,防止数据泄露和中间人攻击。

  • 审计日志 (Audit Logging): 记录集群安全事件,例如用户登录、权限变更、索引操作等,方便安全审计和问题排查。

启用 Elasticsearch Security (基本步骤):

  1. 启用 Security 特性:elasticsearch.yml 配置文件中,设置 xpack.security.enabled: true

  2. 设置内置用户密码: 首次启动启用 Security 的 Elasticsearch 节点后,需要使用 elasticsearch-setup-passwords 工具设置内置用户 (例如 elastic, kibana_system, apm_system 等) 的密码。 在 Elasticsearch 根目录下执行:

    ./bin/elasticsearch-setup-passwords interactive

    根据提示输入各个内置用户的密码。 请妥善保管这些密码。

  3. 配置客户端认证: 客户端 (例如 Kibana, Logstash, Beats, 应用程序) 连接 Elasticsearch 集群时,需要提供用户名和密码进行认证。 具体配置方式取决于客户端类型。

更高级的安全配置,例如 TLS/SSL 加密、LDAP/AD 集成、更细粒度的权限控制等,请参考 Elasticsearch 官方文档 Security

5. 总结与最佳实践

本文详细介绍了 Elasticsearch 的安装与部署过程,从单节点到集群,涵盖了 .tar.gz 压缩包和 Docker 镜像两种安装方式,并提供了代码实践和配置详解。 以下是一些 Elasticsearch 安装部署的最佳实践:

  • 生产环境务必部署 Elasticsearch 集群,保证高可用性和可扩展性。

  • 根据实际负载预估资源需求,合理配置 JVM 堆内存大小、CPU 核心数和磁盘空间。

  • 生产环境务必启用 Elasticsearch Security 特性,并进行完善的安全配置。

  • 定期监控 Elasticsearch 集群的健康状态和性能指标,及时发现和解决问题。

  • 关注 Elasticsearch 官方文档和社区,及时了解最新版本和最佳实践。

掌握 Elasticsearch 的安装与部署是使用 Elasticsearch 的第一步,也是至关重要的一步。 希望本文能够帮助您顺利搭建 Elasticsearch 环境,并为后续的 Elasticsearch 应用开发和运维打下坚实的基础。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U