如何为开发环境设置你的第一个 Elasticsearch 集群
由于 Elasticsearch 具有分布式特性,初次接触可能显得困难重重,但为本地开发设置一个基础集群是相当简单的。本指南将引导你完成快速部署和配置功能性 Elasticsearch 集群的必要步骤,无论你选择简单的单节点设置还是更具代表性的多节点环境。理解此初始配置对于使用 Elasticsearch 强大的搜索和分析功能进行无缝索引、查询和探索数据至关重要。
我们将重点介绍开发环境所需的核心配置方面,确保你在转向生产环境考虑因素之前拥有坚实的基础。
先决条件
在开始之前,请确保满足以下先决条件:
- Java 开发工具包 (JDK): Elasticsearch 要求你的系统上安装兼容的 JDK。Elasticsearch 7.x 及更高版本通常需要 JDK 11 或更高版本。
- 下载 Elasticsearch: 从 Elastic 官方网站获取所需 Elasticsearch 版本的二进制发行版。
- 系统资源: 对于基础的开发测试,2GB 内存通常足够,但建议为多节点测试准备更多内存。
步骤 1:下载和解压 Elasticsearch
下载后(通常是 .zip 或 .tar.gz 文件),将压缩包解压到你想要托管集群文件的目录中(例如,~/elasticsearch-8.12.0)。该目录被称为 Elasticsearch 主目录。
步骤 2:配置单节点集群(开发默认设置)
默认情况下,当你首次运行 Elasticsearch 时,它会尝试以单节点集群启动。然而,现代版本通常需要明确配置,尤其是在安全和内存设置方面,即使是本地开发也不例外。
配置文件位于 Elasticsearch 主目录内的 config/ 目录中。
基本配置 (config/elasticsearch.yml)
主要的配置文件是 elasticsearch.yml。对于本地单节点设置,你至少必须配置集群名称和节点名称。
# 集群配置
cluster.name: dev-cluster
# 节点配置
node.name: node-1
# 网络设置(开发环境请使用 localhost)
network.host: 127.0.0.1
# HTTP 端口(默认是 9200)
http.port: 9200
# 对开发很重要:初始阶段禁用安全功能(在生产环境中使用时务必小心!)
xpack.security.enabled: false
安全警告: 禁用
xpack.security.enabled在初始开发设置中很常见,以简化测试。切勿在公共可访问的环境中运行此配置。对于现代的 Elasticsearch 版本 (7.x+),如果保持启用安全功能,你通常需要先运行设置命令来生成初始密码。
启动单节点
导航到解压目录的根目录并运行相应的启动脚本。在 Linux/macOS 上:
./bin/elasticsearch
在 Windows 上(使用 PowerShell):
.\bin\elasticsearch.bat
等待日志指示节点已成功启动,通常会显示类似 started 的消息。
步骤 3:验证集群状态
一旦进程开始运行,你可以使用 curl 针对默认 HTTP 端口 (9200) 来验证集群状态。
检查集群健康状况
此命令检查集群的整体健康状况:
curl -X GET "http://localhost:9200/_cat/health?v"
预期输出片段:
epoch timestamp cluster status node.total node.data shards prio initialized
1678886400 10:00:00 dev-cluster green 1 1 0 0 1
status 字段应为 green(绿色),表示集群健康,是健康的单节点集群。
检查节点信息
你还可以验证节点信息:
curl -X GET "http://localhost:9200/_cat/nodes?v"
步骤 4:设置多节点集群(用于更真实的测试)
为了进行更真实的开发或分片分配测试,你需要至少两个节点。这需要运行多个独立的 Elasticsearch 实例,每个实例都有不同的配置。
目录结构
在你的主要工作区内为每个节点创建单独的目录(例如,es_data/node1、es_data/node2)。将基础 Elasticsearch 发行版复制到这些目录中的每一个,或者将它们链接到主安装目录。
节点配置差异
为每个节点创建一个唯一的 config/elasticsearch.yml 文件:
节点 1 配置 (es_data/node1/config/elasticsearch.yml)
cluster.name: dev-cluster
node.name: node-1
network.host: 127.0.0.1
http.port: 9200
path.data: node1_data # 唯一数据路径
xpack.security.enabled: false
# 此行告知节点 1 如何找到其他成员
cluster.initial_master_nodes: ["node-1", "node-2"]
节点 2 配置 (es_data/node2/config/elasticsearch.yml)
cluster.name: dev-cluster
node.name: node-2
network.host: 127.0.0.1
http.port: 9201 # 必须使用不同的 HTTP 端口
path.data: node2_data # 唯一数据路径
xpack.security.enabled: false
# 此行告知节点 2 如何找到其他成员
cluster.initial_master_nodes: ["node-1", "node-2"]
启动多节点集群
- 启动节点 1:导航到
es_data/node1并执行./bin/elasticsearch。 - 启动节点 2:导航到
es_data/node2并执行./bin/elasticsearch。
验证多节点集群
使用 API 针对任何正在运行的 HTTP 端口(例如 9200)检查节点数量:
curl -X GET "http://localhost:9200/_cat/nodes?v"
预期输出片段:
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
127.0.0.1 15 50 0 0.01 0.02 0.01 mdi * node-1
127.0.0.1 16 51 0 0.00 0.01 0.01 mdi - node-2
如果你在 name 下看到两个条目,则表示你的多节点集群已正确组建。
开发环境的最佳实践
- 使用专用数据路径: 始终为每个节点显式配置
path.data,尤其是在多节点设置中,以防止实例之间发生意外的数据污染。 - 临时端口: 为每个节点使用唯一的 HTTP 端口 (
http.port),以便在本地运行时它们不会发生冲突。 - 内存锁定: 对于开发,请确保不会遇到堆大小限制。如果遇到与内存相关的启动错误,你可能需要调整
jvm.options文件中的 JVM 堆大小(尽管默认值通常足以满足基本测试)。
下一步:索引数据
集群运行后,下一步就是创建索引和映射设置。例如,要创建一个名为 products 的简单索引:
curl -X PUT "http://localhost:9200/products?pretty"
这个基础设置允许你开始使用客户端库或 Kibana 与 Elasticsearch 进行交互。