2026/10/31 16:35:41

Ubuntu系统部署Elasticsearch集群实战指南

Ubuntu系统部署Elasticsearch集群实战指南 1. 项目概述Elasticsearch简称ES是一个基于Lucene构建的开源分布式搜索引擎广泛应用于全文检索、日志分析、业务监控等场景。在Ubuntu系统上部署ES集群是许多开发者和运维人员的常见需求特别是在需要处理海量数据的企业环境中。我曾在多个生产环境中部署过不同规模的ES集群从3节点的小型集群到上百节点的大型集群都有涉及。在这个过程中积累了不少实战经验也踩过不少坑。本文将分享在Ubuntu系统上部署ES集群的完整流程和注意事项。2. 环境准备2.1 系统要求在开始部署前需要确保所有节点满足以下基本要求Ubuntu 18.04 LTS或更高版本推荐20.04 LTS至少4GB内存生产环境建议8GB以上至少2个CPU核心至少10GB可用磁盘空间SSD强烈推荐Java 11或更高版本ES 7.x要求Java 11注意ES对内存要求较高建议为ES进程单独预留至少50%的系统内存。例如8GB内存的机器可以给ES分配4GB。2.2 集群规划假设我们要部署一个3节点的ES集群节点信息如下节点名称IP地址角色es-node1192.168.1.1master, data, ingestes-node2192.168.1.2master, dataes-node3192.168.1.3data, ingest这种配置提供了高可用性3个master-eligible节点确保集群管理的高可用负载均衡数据节点分散读写压力专用节点ingest节点专门处理数据预处理3. 安装Java环境ES是基于Java开发的因此需要先安装Java环境。以下是安装OpenJDK 11的步骤# 更新软件包列表 sudo apt update # 安装OpenJDK 11 sudo apt install -y openjdk-11-jdk # 验证安装 java -version如果系统中有多个Java版本可以通过以下命令设置默认版本sudo update-alternatives --config java4. 安装Elasticsearch4.1 通过APT仓库安装这是推荐的安装方式可以方便地进行版本管理和更新# 导入Elasticsearch GPG密钥 wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - # 添加Elasticsearch仓库 echo deb https://artifacts.elastic.co/packages/7.x/apt stable main | sudo tee /etc/apt/sources.list.d/elastic-7.x.list # 更新并安装ES sudo apt update sudo apt install -y elasticsearch4.2 手动安装方式如果需要特定版本或离线安装可以下载.deb包手动安装wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.0-amd64.deb sudo dpkg -i elasticsearch-7.17.0-amd64.deb5. 配置Elasticsearch集群5.1 主配置文件修改编辑/etc/elasticsearch/elasticsearch.yml文件以下是关键配置项# 集群名称所有节点必须相同 cluster.name: my-es-cluster # 节点名称每个节点唯一 node.name: es-node1 # 数据存储路径 path.data: /var/lib/elasticsearch # 日志存储路径 path.logs: /var/log/elasticsearch # 网络绑定 network.host: 0.0.0.0 # HTTP端口 http.port: 9200 # 集群初始master节点 cluster.initial_master_nodes: [es-node1, es-node2, es-node3] # 发现配置 discovery.seed_hosts: [192.168.1.1, 192.168.1.2, 192.168.1.3]5.2 JVM堆内存配置编辑/etc/elasticsearch/jvm.options文件设置合适的堆内存大小-Xms4g -Xmx4g经验法则堆内存不应超过物理内存的50%且不超过32GB由于JVM指针压缩限制5.3 系统配置优化为了ES能更好地运行需要调整一些系统参数# 增加虚拟内存映射数量 echo vm.max_map_count262144 | sudo tee -a /etc/sysctl.conf # 增加文件描述符限制 echo elasticsearch - nofile 65535 | sudo tee -a /etc/security/limits.conf # 应用更改 sudo sysctl -p6. 启动和验证集群6.1 启动ES服务sudo systemctl daemon-reload sudo systemctl enable elasticsearch sudo systemctl start elasticsearch6.2 验证集群状态curl -X GET localhost:9200/_cluster/health?pretty健康状态应该是green或yellowyellow表示有副本分片未分配这在单节点测试时是正常的。6.3 查看节点信息curl -X GET localhost:9200/_cat/nodes?v7. 集群调优与安全配置7.1 分片和副本设置对于生产环境合理的分片策略很重要# 创建索引时指定分片和副本数 PUT /my_index { settings: { number_of_shards: 3, number_of_replicas: 1 } }最佳实践每个分片大小建议在10-50GB之间避免过大或过小7.2 安全配置从ES 8.0开始安全功能默认开启。对于7.x版本建议手动启用# 在elasticsearch.yml中添加 xpack.security.enabled: true然后设置密码sudo /usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto8. 常见问题与解决方案8.1 节点无法加入集群可能原因网络连接问题集群名称不匹配发现配置错误解决方案检查防火墙设置验证所有节点的cluster.name是否相同确保discovery.seed_hosts配置正确8.2 内存不足问题症状节点频繁脱离集群查询性能下降解决方案增加JVM堆大小但不超过物理内存50%减少分片数量增加更多数据节点8.3 磁盘空间不足ES有默认的磁盘水位线设置当磁盘空间不足时会停止分配分片。解决方案增加磁盘空间调整磁盘水位线设置PUT _cluster/settings { persistent: { cluster.routing.allocation.disk.watermark.low: 85%, cluster.routing.allocation.disk.watermark.high: 90%, cluster.routing.allocation.disk.watermark.flood_stage: 95% } }9. 监控与维护9.1 使用Elasticsearch Head插件这是一个简单的集群管理界面# 安装插件 sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install mobz/elasticsearch-head访问http://your-es-node:9200/_plugin/head/9.2 定期快照备份配置共享文件系统作为快照仓库PUT _snapshot/my_backup { type: fs, settings: { location: /mnt/backups/elasticsearch, compress: true } }创建快照PUT _snapshot/my_backup/snapshot_1?wait_for_completiontrue10. 性能优化技巧索引设计根据查询模式设计索引结构避免过度嵌套映射优化为不需要全文检索的字段设置index: false查询优化使用filter代替query进行不计算相关度的过滤硬件选择优先考虑SSD、更多内存和更快CPU分片策略避免分片过多每个分片都有开销我在实际运维中发现很多性能问题源于不合理的分片设计和映射配置。建议在项目初期就规划好索引策略避免后期大规模重构。