1.2 Elasticsearch-单节点启动:开箱即用的 RESTful API

Elasticsearch单节点启动指南

在这里插入图片描述
1.2 Elasticsearch-单节点启动:开箱即用的 RESTful API

0. 写在动手之前

单节点实例不是“玩具”,而是所有 Elasticsearch 集群的原子模型。只要把下面三步跑通,你就拥有了后续水平扩展、滚动升级、跨机房容灾的同一套 RESTful 接口。本章全部命令在 macOS/Linux/WSL 下通用,Windows 用户把 curl 换成 PowerShell 的 Invoke-RestMethod 即可。

1. 获取发行包

# 1. 下载与上一章相同的 8.13.0 版本(已自带 JDK 21)
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.13.0-linux-x86_64.tar.gz
tar -xzf elasticsearch-8.13.0-linux-x86_64.tar.gz
cd elasticsearch-8.13.0/

2. 第一次启动:安全自动配置

8.x 默认开启安全。单节点场景下,Elasticsearch 会为你自动生成:

  • TLS 传输层证书
  • HTTP 层证书
  • 内置用户 elastic 的初始密码
  • Kibana 注册令牌(可选)
# 2. 前台启动观察日志
./bin/elasticsearch

看到日志最后一行出现
HttpServerTransport publish_address {127.0.0.1:9200}, bound_addresses {[::1]:9200}
代表 RESTful 层已就绪。控制台会打印:

Password for the elastic user is: 4a3C2b1LRs68PvqQRzlD

记下密码,后面所有 curl 都要带。

3. 最简健康检查

# 3. 验证节点级信息
curl -u elastic:4a3C2b1LRs68PvqQRzlD --cacert config/certs/http_ca.crt \
  https://localhost:9200

返回 JSON 片段:

{
  "name" : "jimn-mbp.local",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "Xc4b0sTpQ0KpU8Y2H5jpBg",
  "version" : {
    "number" : "8.13.0",
    "build_flavor" : "default",
    "build_type" : "tar",
    "lucene_version" : "9.10.0"
  },
  "tagline" : "You Know, for Search"
}

只要出现 "tagline" : "You Know, for Search",就说明 RESTful 通道 100% 可用。

4. 集群级健康度 API

curl -u elastic:4a3C2b1LRs68PvqQRzlD --cacert config/certs/http_ca.crt \
  https://localhost:9200/_cluster/health?pretty

单节点默认分片副本为 0,因此:
"status" : "yellow" 是正常预期,不是异常。
"number_of_nodes" : 1 再次确认你只跑了一个进程。

5. 节点统计:看 JVM、线程、文件句柄

curl -u elastic:4a3C2b1LRs68PvqQRzlD --cacert config/certs/http_ca.crt \
  https://localhost:9200/_nodes/stats/jvm,os,process?pretty \
  | jq '.nodes[] | {name: .name, heap_used: .jvm.mem.heap_used_in_bytes}'

拿到堆内存用量,方便后面调优 -Xms/-Xmx

6. 索引生命周期第一步:创建并写一条文档

# 6.1 创建索引(默认 1 分片 1 副本,单节点副本无法分配,会 yellow)
curl -u elastic:4a3C2b1LRs68PvqQRzlD --cacert config/certs/http_ca.crt \
  -X PUT https://localhost:9200/shop_order

# 6.2 写文档,自动生成 _id
curl -u elastic:4a3C2b1LRs68PvqQRzlD --cacert config/certs/http_ca.crt \
  -X POST https://localhost:9200/shop_order/_doc \
  -H 'Content-Type: application/json' \
  -d'
{
  "title": "Elasticsearch 8 实战",
  "price": 98.0,
  "timestamp": "2025-10-17T12:00:00Z"
}'

返回

{"_id":"cQbnzI0BZaVvGgVfJcFP","result":"created","_shards":{"total":1,"successful":1,"failed":0}}

即代表写入成功。注意 _shards.successful=1,单节点只有主分片。

7. 读回刚才的文档

curl -u elastic:4a3C2b1LRs68PvqQRzlD --cacert config/certs/http_ca.crt \
  https://localhost:9200/shop_order/_doc/cQbnzI0BZaVvGgVfJcFP?pretty

可以看到 _source 里正是刚才提交的 JSON。

8. 搜索:URI 查询与 DSL 查询对比

# 8.1 URI 查询(q=参数)
curl -u elastic:4a3C2b1LRs68PvqQRzlD --cacert config/certs/http_ca.crt \
  https://localhost:9200/shop_order/_search?q=title:实战

# 8.2 DSL 查询(推荐生产使用)
curl -u elastic:4a3C2b1LRs68PvqQRzlD --cacert config/certs/http_ca.crt \
  -X POST https://localhost:9200/shop_order/_search \
  -H 'Content-Type: application/json' \
  -d'
{
  "query": {
    "match": {
      "title": "实战"
    }
  }
}'

两者返回结构完全一致,都位于 hits.hits[] 数组。DSL 才是后续聚合、高亮、分页、过滤的真正入口。

9. 批量 bulk:一次 REST 调用写 100 条

# 9. 准备 bulk.ndjson(注意最后一行要换行)
cat > bulk.ndjson <<'EOF'
{"index":{"_index":"shop_order","_id":"1"}}
{"title":"MacBook Pro","price":19999}
{"index":{"_index":"shop_order","_id":"2"}}
{"title":"AirPods","price":1299}
{"index":{"_index":"shop_order","_id":"3"}}
{"title":"Magic Keyboard","price":799}
EOF

curl -u elastic:4a3C2b1LRs68PvqQRzlD --cacert config/certs/http_ca.crt \
  -X POST https://localhost:9200/_bulk \
  -H 'Content-Type: application/x-ndjson' \
  --data-binary @bulk.ndjson

返回摘要
"errors":false 即全部成功;"took":123 代表 123ms 完成,可粗略估算单节点写入吞吐。

10. 常见启动报错速查表

日志关键字原因解决
max virtual memory areas vm.max_map_count [65530] is too low系统内核参数不足sudo sysctl -w vm.max_map_count=262144
Unable to lock JVM Memory未启用 memlock启动前 ulimit -l unlimited,或修改 /etc/security/limits.conf
address already in use9200 被占用lsof -i:9200 杀掉旧进程
Certificate path does not exist找不到自动生成的证书确认启动日志里 HTTP CA certificate SHA-256 fingerprint 行,重新拷贝 http_ca.crt 路径

11. 单节点调优三件套

  1. 禁用冗余副本:
    curl -u elastic:4a3C2b1LRs68PvqQRzlD --cacert config/certs/http_ca.crt \
      -X PUT https://localhost:9200/*/_settings \
      -H 'Content-Type: application/json' \
      -d'{"number_of_replicas":0}'
    
    集群状态立即变 green。
  2. 降低刷新间隔,提升写入吞吐:
    "index.refresh_interval":"30s"
  3. 开发机内存有限时,把堆压到 512MB:
    export ES_JAVA_OPTS="-Xms512m -Xmx512m"
    同时关闭机器学习:
    xpack.ml.enabled: false

12. 小结

单节点启动只需解压、运行、记住密码,就能通过 HTTPS + 基本认证获得完整的 RESTful 能力。
本章演示的 _cluster/health_nodes/stats_search_bulk 四大端点,在任何规模集群里路径与参数完全一致;后续无论是垂直扩容(加内存)还是水平扩容(加节点),你依旧用同一套 URL、同一组 JSON 结构。掌握单节点,就是掌握整个 Elasticsearch 的“元模型”。
更多技术文章见公众号: 大城市小农民

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乔丹搞IT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值