1. 首页 > ElasticSearch教程 > 正文

ElasticSearch教程FG004-ElasticSearch单节点部署优化实战

本文档风哥主要介绍ElasticSearch数据库的单节点部署优化,包括单节点部署的概念、适用场景、局限性、硬件要求、软件要求、网络要求、安装配置、性能调优、监控设置、备份与恢复等内容,风哥教程参考ElasticSearch官方文档Run Elasticsearch locally、Configuring Elasticsearch等内容编写,适合DBA人员和开发人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。

Part01-基础概念与理论知识

1.1 单节点部署概念

ElasticSearch单节点部署是指在单个服务器上运行一个ElasticSearch实例,不形成集群。这种部署方式简单易用,适合小型应用和测试环境。更多视频教程www.fgedu.net.cn

1.2 单节点部署适用场景

单节点部署适用于以下场景:

  • 开发环境:开发人员进行本地开发和测试
  • 测试环境:功能测试和集成测试
  • 小型应用:数据量小、访问量低的应用
  • 原型验证:验证ElasticSearch的功能和性能
  • 学习环境:学习ElasticSearch的基本使用

1.3 单节点部署局限性

单节点部署的局限性:

  • 高可用性:没有冗余,节点故障会导致服务中断
  • 扩展性:无法通过添加节点扩展容量和性能
  • 数据安全:没有数据副本,数据丢失风险高
  • 性能:受限于单节点的硬件资源
  • 负载能力:无法处理高并发请求
风哥提示:单节点部署适合开发和测试环境,生产环境建议使用集群部署以提高可用性和性能。学习交流加群风哥微信: itpux-com

Part02-生产环境规划与建议

2.1 硬件要求

单节点部署的硬件要求:

# 硬件要求

## 内存
– 最低:4GB RAM
– 推荐:8GB-16GB RAM
– 注意:根据数据量和查询复杂度调整

## CPU
– 最低:2核
– 推荐:4核-8核
– 注意:多核CPU对并行处理查询和索引操作很重要

## 存储
– 类型:SSD(推荐)或HDD
– 容量:根据数据量计算,预留50%的空间
– IOPS:至少1000 IOPS

## 网络
– 最低:1Gbps
– 注意:对于外部访问的应用,网络带宽很重要

2.2 软件要求

单节点部署的软件要求:

  • 操作系统:Linux(推荐)、Windows、macOS
  • Java:ElasticSearch 8.x内置JDK,无需单独安装
  • ElasticSearch:最新稳定版本
  • 防火墙:开放9200端口(API访问)

2.3 网络要求

单节点部署的网络要求:

  • 网络连接:稳定的网络连接
  • 端口开放:9200(API访问)
  • 主机名:可解析的主机名
  • 防火墙:允许必要的网络流量
生产环境建议:即使是单节点部署,也建议使用SSD存储以提高性能,特别是对于索引和搜索操作。学习交流加群风哥QQ113257174

Part03-生产环境项目实施方案

3.1 单节点安装实战

ElasticSearch单节点安装:

# 单节点安装步骤

## 1. 准备系统环境
# 检查系统信息
$ uname -a
Linux fgedu.net.cn 5.14.0-362.8.1.el9_3.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Oct 13 17:40:42 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

# 检查内存
$ free -h
total used free shared buff/cache available
Mem: 16G 2.1G 12G 128M 1.8G 13G
Swap: 4G 0B 4G

# 检查磁盘空间
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 10G 38G 21% /
/dev/sdb1 100G 10G 85G 11% /es

## 2. 安装ElasticSearch
# 导入GPG密钥
$ rpm –import https://artifacts.elastic.co/GPG-KEY-elasticsearch

# 创建yum仓库
$ cat > /etc/yum.repos.d/elasticsearch.repo << EOF [elasticsearch-8.x] name=Elasticsearch repository for 8.x packages baseurl=https://artifacts.elastic.co/packages/8.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md EOF # 安装ElasticSearch $ yum install -y elasticsearch ## 3. 启动服务 $ systemctl daemon-reload $ systemctl enable elasticsearch $ systemctl start elasticsearch ## 4. 检查服务状态 $ systemctl status elasticsearch ● elasticsearch.service - Elasticsearch Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2026-04-07 10:00:00 CST; 1min ago Docs: https://www.elastic.co Main PID: 12345 (java) Tasks: 68 Memory: 2.1G CGroup: /system.slice/elasticsearch.service └─12345 /usr/share/elasticsearch/jdk/bin/java -Xms1g -Xmx1g -XX:+UseG1GC -XX:MaxGCPauseMillis=200...

3.2 单节点配置实战

ElasticSearch单节点配置:

# 单节点配置

## 1. 编辑配置文件
$ vi /etc/elasticsearch/elasticsearch.yml

# 集群配置
cluster.name: fgedu-single-node

# 节点配置
node.name: single-node
node.roles: [master, data, ingest]

# 路径配置
path.data: /es/fgdata
path.logs: /var/log/elasticsearch

# 网络配置
network.host: 0.0.0.0
http.port: 9200

# 单节点模式
discovery.type: single-node

# 内存配置
bootstrap.memory_lock: true

# 安全配置
xpack.security.enabled: true

## 2. 配置JVM堆大小
$ vi /etc/elasticsearch/jvm.options
# 修改堆大小
-Xms8g
-Xmx8g

## 3. 重启服务
$ systemctl restart elasticsearch

## 4. 查看服务状态
$ systemctl status elasticsearch
● elasticsearch.service – Elasticsearch
Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2026-04-07 10:10:00 CST; 1min ago
Main PID: 67890 (java)
Tasks: 68
Memory: 2.1G
CGroup: /system.slice/elasticsearch.service
└─67890 /usr/share/elasticsearch/jdk/bin/java -Xms8g -Xmx8g -XX:+UseG1GC -XX:MaxGCPauseMillis=200…

3.3 单节点优化实战

ElasticSearch单节点优化:

# 单节点优化

## 1. 系统优化
# 关闭透明大页
$ echo “never” > /sys/kernel/mm/transparent_hugepage/enabled
$ echo “never” > /sys/kernel/mm/transparent_hugepage/defrag

# 配置文件描述符
$ echo “elasticsearch soft nofile 65536” >> /etc/security/limits.conf
$ echo “elasticsearch hard nofile 65536” >> /etc/security/limits.conf

# 配置内存锁定
$ echo “elasticsearch soft memlock unlimited” >> /etc/security/limits.conf
$ echo “elasticsearch hard memlock unlimited” >> /etc/security/limits.conf

# 配置内核参数
$ vi /etc/sysctl.conf
# 添加以下参数
vm.max_map_count=262144

$ sysctl -p

## 2. 索引优化
# 创建索引时设置合理的分片和副本
$ curl -X PUT “http://localhost:9200/fgedu-index” -H “Content-Type: application/json” -d ‘{
“settings”: {
“number_of_shards”: 1,
“number_of_replicas”: 0,
“refresh_interval”: “30s”,
“translog”: {
“durability”: “async”,
“flush_threshold_size”: “512mb”
}
}
}’
{
“acknowledged” : true,
“shards_acknowledged” : true,
“index” : “fgedu-index”
}

## 3. 线程池优化
# 调整线程池设置
$ curl -X PUT “http://localhost:9200/_cluster/settings” -H “Content-Type: application/json” -d ‘{
“persistent”: {
“thread_pool.search.size”: 8,
“thread_pool.search.queue_size”: 1000,
“thread_pool.write.size”: 4,
“thread_pool.write.queue_size”: 1000
}
}’
{
“acknowledged” : true,
“persistent” : {
“thread_pool” : {
“search” : {
“queue_size” : “1000”,
“size” : “8”
},
“write” : {
“queue_size” : “1000”,
“size” : “4”
}
}
},
“transient” : { }
}

Part04-生产案例与实战讲解

4.1 性能调优实战

ElasticSearch单节点性能调优:

# 性能调优实战

## 1. 查看当前性能指标
$ curl -X GET “http://localhost:9200/_nodes/stats?pretty”
{
“nodes” : {
“single-node” : {
“name” : “single-node”,
“transport_address” : “127.0.0.1:9300”,
“host” : “localhost”,
“ip” : “127.0.0.1”,
“roles” : [ “data”, “ingest”, “master” ],
“jvm” : {
“mem” : {
“heap_used_in_bytes” : 4294967296,
“heap_used_percent” : 50,
“heap_committed_in_bytes” : 8589934592,
“heap_max_in_bytes” : 8589934592
},
“gc” : {
“collectors” : {
“old” : {
“collection_count” : 0,
“collection_time_in_millis” : 0
},
“young” : {
“collection_count” : 5,
“collection_time_in_millis” : 100
}
}
}
},
“fs” : {
“total” : {
“total_in_bytes” : 107374182400,
“free_in_bytes” : 90792931328,
“available_in_bytes” : 90792931328
}
}
}
}
}

## 2. 优化索引性能
# 批量索引测试
$ curl -X POST “http://localhost:9200/fgedu-index/_bulk” -H “Content-Type: application/json” -d ‘{
“index”: {“_id”: 1}
}
{
“name”: “测试文档1”,
“content”: “这是一个测试文档,用于测试ElasticSearch的索引性能”
}
{
“index”: {“_id”: 2}
}
{
“name”: “测试文档2”,
“content”: “这是另一个测试文档,用于测试ElasticSearch的性能”
}

{
“took” : 10,
“errors” : false,
“items” : [
{
“index” : {
“_index” : “fgedu-index”,
“_type” : “_doc”,
“_id” : “1”,
“_version” : 1,
“result” : “created”,
“_shards” : {
“total” : 1,
“successful” : 1,
“failed” : 0
},
“_seq_no” : 0,
“_primary_term” : 1
}
},
{
“index” : {
“_index” : “fgedu-index”,
“_type” : “_doc”,
“_id” : “2”,
“_version” : 1,
“result” : “created”,
“_shards” : {
“total” : 1,
“successful” : 1,
“failed” : 0
},
“_seq_no” : 1,
“_primary_term” : 1
}
}
]
}

## 3. 优化搜索性能
# 搜索测试
$ curl -X GET “http://localhost:9200/fgedu-index/_search?pretty”
{
“took” : 1,
“timed_out” : false,
“_shards” : {
“total” : 1,
“successful” : 1,
“skipped” : 0,
“failed” : 0
},
“hits” : {
“total” : {
“value” : 2,
“relation” : “eq”
},
“max_score” : 1.0,
“hits” : [
{
“_index” : “fgedu-index”,
“_type” : “_doc”,
“_id” : “1”,
“_score” : 1.0,
“_source” : {
“name” : “测试文档1”,
“content” : “这是一个测试文档,用于测试ElasticSearch的索引性能”
}
},
{
“_index” : “fgedu-index”,
“_type” : “_doc”,
“_id” : “2”,
“_score” : 1.0,
“_source” : {
“name” : “测试文档2”,
“content” : “这是另一个测试文档,用于测试ElasticSearch的性能”
}
}
]
}
}

4.2 监控设置实战

ElasticSearch单节点监控设置:

# 监控设置实战

## 1. 启用监控
$ curl -X PUT “http://localhost:9200/_cluster/settings” -H “Content-Type: application/json” -d ‘{
“persistent”: {
“xpack.monitoring.collection.enabled”: true
}
}’
{
“acknowledged” : true,
“persistent” : {
“xpack” : {
“monitoring” : {
“collection” : {
“enabled” : “true”
}
}
}
},
“transient” : { }
}

## 2. 查看监控指标
$ curl -X GET “http://localhost:9200/_monitoring/metrics?pretty”
{
“_nodes” : {
“total” : 1,
“successful” : 1,
“failed” : 0
},
“cluster_name” : “fgedu-single-node”,
“timestamp” : 1712445600000,
“metrics” : {
“nodes” : {
“single-node” : {
“indices” : {
“docs” : {
“count” : 2,
“deleted” : 0
},
“store” : {
“size_in_bytes” : 10240
}
},
“jvm” : {
“mem” : {
“heap_used_in_bytes” : 4294967296,
“heap_used_percent” : 50
}
}
}
}
}
}

## 3. 配置日志监控
# 查看日志
$ tail -f /var/log/elasticsearch/fgedu-single-node.log
[2026-04-07T10:30:00,000][INFO ][o.e.c.m.MetadataCreateIndexService] [single-node] [fgedu-index] creating index, cause [api], templates [], shards [1]/[0], mappings []
[2026-04-07T10:30:00,000][INFO ][o.e.c.r.a.AllocationService] [single-node] updating number_of_replicas to [0] for indices [fgedu-index]
[2026-04-07T10:30:00,000][INFO ][o.e.c.m.MetadataMappingService] [single-node] [fgedu-index/_mapping] update_mapping [_doc]

4.3 备份与恢复实战

ElasticSearch单节点备份与恢复:

# 备份与恢复实战

## 1. 创建备份仓库
$ curl -X PUT “http://localhost:9200/_snapshot/fgedu_backup” -H “Content-Type: application/json” -d ‘{
“type”: “fs”,
“settings”: {
“location”: “/es/backup”
}
}’
{
“acknowledged” : true
}

## 2. 执行备份
$ curl -X PUT “http://localhost:9200/_snapshot/fgedu_backup/snapshot_1”
{
“accepted” : true
}

## 3. 查看备份状态
$ curl -X GET “http://localhost:9200/_snapshot/fgedu_backup/snapshot_1?pretty”
{
“snapshots” : [
{
“snapshot” : “snapshot_1”,
“uuid” : “snapshot_uuid”,
“version_id” : 8070099,
“version” : “8.7.0”,
“indices” : [“fgedu-index”],
“data_streams” : [ ],
“include_global_state” : true,
“state” : “SUCCESS”,
“start_time” : “2026-04-07T10:40:00.000Z”,
“start_time_in_millis” : 1712446800000,
“end_time” : “2026-04-07T10:40:01.000Z”,
“end_time_in_millis” : 1712446801000,
“duration_in_millis” : 1000,
“failures” : [ ],
“shards” : {
“total” : 1,
“failed” : 0,
“successful” : 1
}
}
]
}

## 4. 恢复备份
# 删除索引
$ curl -X DELETE “http://localhost:9200/fgedu-index”
{
“acknowledged” : true
}

# 恢复备份
$ curl -X POST “http://localhost:9200/_snapshot/fgedu_backup/snapshot_1/_restore”
{
“accepted” : true
}

## 5. 验证恢复
$ curl -X GET “http://localhost:9200/fgedu-index/_search?pretty”
{
“took” : 1,
“timed_out” : false,
“_shards” : {
“total” : 1,
“successful” : 1,
“skipped” : 0,
“failed” : 0
},
“hits” : {
“total” : {
“value” : 2,
“relation” : “eq”
},
“max_score” : 1.0,
“hits” : [
{
“_index” : “fgedu-index”,
“_type” : “_doc”,
“_id” : “1”,
“_score” : 1.0,
“_source” : {
“name” : “测试文档1”,
“content” : “这是一个测试文档,用于测试ElasticSearch的索引性能”
}
},
{
“_index” : “fgedu-index”,
“_type” : “_doc”,
“_id” : “2”,
“_score” : 1.0,
“_source” : {
“name” : “测试文档2”,
“content” : “这是另一个测试文档,用于测试ElasticSearch的性能”
}
}
]
}
}

风哥提示:单节点部署虽然简单,但备份仍然非常重要。建议定期执行快照备份,以防止数据丢失。更多学习教程公众号风哥教程itpux_com

Part05-风哥经验总结与分享

5.1 单节点部署最佳实践

ElasticSearch单节点部署最佳实践:

  • 硬件选择:
    • 使用SSD存储提高性能
    • 根据数据量选择合适的内存
    • 选择多核CPU以提高并行处理能力
  • 配置优化:
    • 设置合理的JVM堆大小
    • 启用内存锁定
    • 优化索引设置,减少I/O操作
    • 关闭不必要的功能以节省资源
  • 监控与维护:
    • 启用监控功能
    • 定期检查服务状态
    • 定期备份数据
    • 监控磁盘空间使用情况
  • 安全设置:
    • 启用X-Pack安全功能
    • 设置强密码
    • 限制访问权限
    • 配置防火墙规则

5.2 常见问题与解决方案

ElasticSearch单节点部署常见问题与解决方案:

# 常见问题与解决方案

## 1. 服务启动失败
– 错误信息:Failed to start Elasticsearch service
– 解决方案:
– 检查配置文件语法
– 检查端口是否被占用
– 检查磁盘空间是否足够
– 查看日志文件了解具体错误

## 2. 内存使用过高
– 症状:JVM堆内存使用接近100%
– 解决方案:
– 调整JVM堆大小
– 优化查询,减少内存使用
– 清理不需要的索引
– 增加服务器内存

## 3. 索引速度慢
– 症状:索引文档速度慢
– 解决方案:
– 使用SSD存储
– 调整索引刷新间隔
– 使用批量索引API
– 优化映射设置

## 4. 搜索性能差
– 症状:查询响应时间长
– 解决方案:
– 优化查询语句
– 创建合适的索引
– 增加内存
– 优化JVM配置

## 5. 数据丢失
– 症状:索引数据丢失
– 解决方案:
– 定期执行备份
– 配置合理的translog设置
– 避免非正常关闭服务
– 使用快照备份恢复数据

5.3 扩展策略

当单节点部署无法满足需求时,可以考虑以下扩展策略:

  • 垂直扩展:增加单节点的硬件资源(内存、CPU、存储)
  • 水平扩展:从单节点升级到集群部署
  • 读写分离:使用多个节点分担读写负载
  • 数据分片:将数据分散到多个节点
  • 冷热分离:将热数据和冷数据分离存储
扩展建议:当数据量和访问量增长时,建议从单节点部署升级到集群部署,以提高可用性和性能。from ElasticSearch视频:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息