1. Elasticsearch 单节点开发环境搭建与健康检查
单节点开发环境的核心约束
单节点 Elasticsearch 开发环境的关键特征是:只有一个节点同时承担主节点与数据节点角色。这意味着集群健康状态不会出现 green,因为副本分片无法分配到第二个节点。理解这一点,才能正确判断“服务是否可用”与“集群是否健康”的区别。
开发环境推荐使用 Docker 启动,避免手动安装 JDK、配置 elasticsearch.yml 和系统参数的繁琐过程。以下命令启动一个单节点容器,并关闭安全认证以便本地调试:
docker run -d \
--name es-dev \
-p 9200:9200 \
-e discovery.type=single-node \
-e xpack.security.enabled=false \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
docker.elastic.co/elasticsearch/elasticsearch:8.13.4
参数说明:discovery.type=single-node 跳过主节点选举,xpack.security.enabled=false 关闭 HTTPS 与账号密码,ES_JAVA_OPTS 限制堆内存避免开发机资源被占满。启动后等待约 20–40 秒,容器日志出现 started 即表示服务就绪。
健康检查的三个接口与判读逻辑
服务启动后,用三个 REST 接口从不同层面验证可用性:
GET /_cluster/health:返回集群整体状态。单节点下status通常为yellow,number_of_nodes为 1,active_shards与unassigned_shards反映分片分配情况。GET /_nodes:返回节点列表与角色信息。确认nodes下只有一个节点,且roles包含data、master等。GET /_cat/indices?v:以表格形式列出索引。新环境通常为空,返回空表或仅系统索引。
判读要点:yellow 是单节点环境的正常状态,不是故障。若 status 为 red,说明主分片未分配,需检查磁盘、内存或启动日志。若接口无响应,优先确认容器是否运行、端口是否被占用。
开发环境关闭安全认证仅用于本地学习,切勿用于生产或暴露到公网。
验证操作与结果确认
按以下顺序执行验证,每一步都有明确的通过条件:
- 确认容器运行:
docker ps --filter name=es-dev,状态应为Up。 - 检查集群健康:
curl -s localhost:9200/_cluster/health?pretty,预期status为yellow,number_of_nodes为1。 - 查看节点信息:
curl -s localhost:9200/_nodes?pretty,确认nodes对象下只有一个节点 ID,且roles包含data与master。 - 列出索引:
curl -s "localhost:9200/_cat/indices?v",新环境通常返回空表头或仅系统索引,能正常返回即表示 REST 层可用。
若第 2 步返回 red,常见原因是磁盘水位触发或 JVM 堆内存不足。可执行 docker logs es-dev 查看启动日志中的 disk watermark 或 OutOfMemoryError 关键字。若 9200 端口无响应,先用 docker logs es-dev 确认是否仍在启动中,再检查 lsof -i :9200 是否被其他进程占用。
开发环境搭建完成的标志:三个接口均能返回结构化 JSON 或表格数据,且
_cluster/health 的 status 为 yellow。此时即可进入索引创建与文档写入阶段。