如何搭建你的第一个 Elasticsearch 开发集群
搭建本地 Elasticsearch 开发集群,验证集群健康状态,并避免常见的单节点和多节点配置错误。
如何搭建你的第一个 Elasticsearch 开发集群
搭建第一个 Elasticsearch 集群主要在于选择安全的开发配置,并验证节点是否成功加入预期的集群。单节点设置足以进行基本的索引和搜索测试;本地多节点设置则有助于学习发现和分片分配。
本文重点在于本地开发。请勿将这些宽松的设置用于公共或生产集群。
前提条件
在开始之前,请确保满足以下前提条件:
- Java 运行时: 较新的 Elasticsearch 发行版包含内置的 JDK。如果你使用的软件包或发行版不包含,请安装该 Elasticsearch 版本所需的 Java 版本。
- 下载 Elasticsearch: 从 Elastic 官方网站获取所需 Elasticsearch 版本的二进制发行版。
- 系统资源: 对于基本的开发测试,2GB 内存通常足够,但多节点测试建议使用更多内存。
第一步:下载并解压 Elasticsearch
下载完成后(通常为 .zip 或 .tar.gz 文件),将压缩包解压到你希望存放集群文件的目录(例如 ~/elasticsearch-8.12.0)。该目录称为 Elasticsearch 主目录。
第二步:配置单节点集群(开发默认)
默认情况下,首次运行 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 的消息。
第三步:验证集群状态
进程运行后,你可以使用 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"
第四步:设置多节点集群(用于更真实的测试)
为了进行更真实的开发或测试分片分配,你至少需要两个节点。这需要运行多个独立的 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
transport.port: 9300
path.data: node1_data # 唯一的数据路径
xpack.security.enabled: false
discovery.seed_hosts: ["127.0.0.1:9300", "127.0.0.1:9301"]
# 此行告诉节点 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 端口
transport.port: 9301 # 必须使用不同的传输端口
path.data: node2_data # 唯一的数据路径
xpack.security.enabled: false
discovery.seed_hosts: ["127.0.0.1:9300", "127.0.0.1:9301"]
# 此行告诉节点 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)和传输端口(transport.port),以避免冲突。 - 内存锁定: 对于开发环境,确保没有遇到堆大小限制。如果遇到与内存相关的启动错误,可能需要调整
jvm.options文件中的 JVM 堆大小(但默认值通常适用于基本测试)。
下一步:索引数据
集群运行后,下一步是创建索引并映射设置。例如,要创建一个名为 products 的简单索引:
curl -X PUT "http://localhost:9200/products?pretty"
这个基础设置允许你开始使用客户端库或 Kibana 与 Elasticsearch 进行交互。