分布式微服务系统架构第128集:elastic-search安装摆设

[复制链接]
发表于 2025-9-11 18:49:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
加群接洽作者vx:xiaoda0423

仓库地址:https://webvueblog.github.io/JavaPlusDoc/

https://1024bat.cn/

✅ 一、情况准备


  • 操纵系统:Linux(Ubuntu 20+/CentOS 7+/Rocky)或 macOS

  • 内存要求:建议 4GB+(最小 2GB)

  • Java:Elasticsearch 7.x+ 内置了 OpenJDK,不需额外安装

  • 版本推荐:ES 7.17.x(稳定)或 ES 8.x(安全增强)


✅ 二、单机安装(得当开发)

📦 1. 下载并解压 Elasticsearch
  1. # 官方源下载
  2. wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.14-linux-x86_64.tar.gz
  3. tar -zxvf elasticsearch-7.17.14-linux-x86_64.tar.gz
  4. cd elasticsearch-7.17.14
复制代码
🛠 2. 修改设置文件(config/elasticsearch.yml)
  1. cluster.name: my-es-cluster
  2. node.name: node-1
  3. network.host: 0.0.0.0
  4. http.port: 9200
  5. discovery.seed_hosts: ["127.0.0.1"]
  6. cluster.initial_master_nodes: ["node-1"]
复制代码
🔧 3. 设置 JVM 内存(可选:config/jvm.options)
  1. -Xms1g
  2. -Xmx1g
复制代码
设置为系统可用内存一半或略小(制止 OOM)


🚀 4. 启动 Elasticsearch
  1. # 建议用非 root 用户
  2. ./bin/elasticsearch
复制代码
另起窗口测试:
  1. curl http://localhost:9200
复制代码

✅ 三、集群摆设(2~3 节点生产情况)

假设摆设两台节点:


  • node-1:192.168.1.101

  • node-2:192.168.1.102


🧩 设置文件(每台机器修改 config/elasticsearch.yml)

📍 node-1:
  1. cluster.name: my-es-cluster
  2. node.name: node-1
  3. network.host: 192.168.1.101
  4. http.port: 9200
  5. discovery.seed_hosts: ["192.168.1.101", "192.168.1.102"]
  6. cluster.initial_master_nodes: ["node-1", "node-2"]
复制代码
📍 node-2:
  1. cluster.name: my-es-cluster
  2. node.name: node-2
  3. network.host: 192.168.1.102
  4. http.port: 9200
  5. discovery.seed_hosts: ["192.168.1.101", "192.168.1.102"]
  6. cluster.initial_master_nodes: ["node-1", "node-2"]
复制代码

🚀 启动两台节点,并验证集群:
  1. curl http://192.168.1.101:9200/_cluster/health?pretty
  2. curl http://192.168.1.101:9200/_cat/nodes?v
复制代码
返回包含两个节点,则阐明集群 OK。


✅ 四、可选增强:安装 Kibana(可视化控制台)
  1. wget https://artifacts.elastic.co/downloads/kibana/kibana-7.17.14-linux-x86_64.tar.gz
  2. tar -zxvf kibana-7.17.14-linux-x86_64.tar.gz
  3. cd kibana-7.17.14/config
  4. # 修改 kibana.yml
  5. server.port: 5601
  6. server.host: "0.0.0.0"
  7. elasticsearch.hosts: ["http://192.168.1.101:9200"]
复制代码
启动 Kibana:
  1. ./bin/kibana
复制代码
访问地址:http://localhost:5601


✅ 五、常用 Elasticsearch 命令

命令
阐明
GET /
查看 ES 基本信息
GET _cat/nodes?v
查看全部节点
GET _cat/indices?v
查看全部索引
GET /my-index/_search
查询索引数据
PUT /my-index
创建索引
DELETE /my-index
删除索引

✅ 六、常见问题

问题
原因与办理方案
bootstrap checks failed
克制用 root 启动,设置 vm.max_map_count=262144
cluster.name 不同等
全部节点必须同等
master not discovered 报错
discovery.seed_hosts 配错
9200端口无法访问
防火墙未开、未设置 network.host 为公网 IP 或 0.0.0.0

✅ 七、优化建议(生产)


  • 设置专用的数据节点、主节点

  • 关闭自动索引创建(action.auto_create_index: false)

  • 使用 HTTPS 和账号密码(ES 8+ 默认开启安全

  • 设置慢查询日志日志 + 索引模板

  • 安装 IK 分词器 / Pinyin 分词器(中文搜索)

Elasticsearch 安装与摆设指南(2025 年版)

适用人群:需要在生产情况(4 核 / 16 GB RAM 以上)构建高可用、可观测可观测的 Elasticsearch 集群的 DevOps / 后端工程师。


1. 版本选择

重要版本
最新小版本
发布时间
Java 需求
阐明
8.138.13.2
2025‑04‑18
内置 OpenJDK 21
最新 GA,官方推荐,默认开启安全 (TLS + Basic Auth)
7.17 LTS7.17.18
2025‑03‑28
JDK 11
恒久维护分支,制止 Feature 更新,仅安全补丁
新集群 建议直接使用 8.x 分支;若与旧版兼容或 Logstash/Beats 仍停顿在 7.x,可暂用 7.17 并规划升级。


2. 基础情况要求

资源
最低
建议生产设置
CPU
4 vCPU
≥8 vCPU (高 IO 任务 ≥16 核)
内存
16 GB
32 GB (Heap 16 GB + OS Cache 16 GB)
磁盘
SSD/NVMe ≥ 200 GB
多块 NVMe RAID‑0/10;关闭 swap;ext4/xfs noatime
OS
Ubuntu 22.04 / AlmaLinux 9 / Debian 12
内核 ≥ 5.15, vm.max_map_count=262144
系统调优:
  1. # /etc/sysctl.d/99-es.conf
  2. vm.swappiness = 1
  3. vm.max_map_count = 262144
  4. fs.file-max = 2097152
  5. # 生效
  6. sysctl -p /etc/sysctl.d/99-es.conf
  7. # ulimit
  8. * soft nofile 65536
  9. * hard nofile 65536
复制代码

3. 安装方式对比

方式
优点
缺点
rpm/apt 包一条命令自动 systemd,快捷
版本更新节奏依赖仓库;多版本共存困难
tar.gz 二进制完全控制目次与版本,便于滚动升级
需手动设置 systemd & 用户
Docker / K8s情况隔离、易横向扩展
恒久化卷、内核调优需要额外关注
生产建议:物理机 / VM 优选 tar.gz + systemd云原生可使用 Elastic Cloud on K8s (ECK) 。


4. 单节点快速安装(tar.gz)
  1. # 4.1 下载 (以 8.13.2 为例)
  2. wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.13.2-linux-x86_64.tar.gz
  3. # 4.2 创建用户与目录
  4. useradd --system --no-create-home --shell /sbin/nologin elasticsearch
  5. mkdir -p /opt/elastic/{data,logs}
  6. # 4.3 解压并软链
  7. tar -xzf elasticsearch-8.13.2-linux-x86_64.tar.gz -C /opt/elastic
  8. ln -s /opt/elastic/elasticsearch-8.13.2 /opt/elastic/current
  9. chown -R elasticsearch:elasticsearch /opt/elastic
  10. # 4.4 修改 elasticsearch.yml
  11. vim /opt/elastic/current/config/elasticsearch.yml
  12. # 关键字段示例
  13. cluster.name: demo-cluster
  14. node.name: node-1
  15. path.data: /opt/elastic/data
  16. path.logs: /opt/elastic/logs
  17. network.host: 0.0.0.0
  18. http.port: 9200
  19. xpack.security.enabled: true
  20. xpack.security.http.ssl:
  21.   enabled: true
  22.   keystore.path: certs/http.p12    # 8.x 安装时会自动生成自签证书 (elastic-certificates.p12)
  23. # 如需关闭 TLS 仅测试:
  24. # xpack.security.transport.ssl.enabled: false
  25. # 4.5 初始化密码(仅 8.x 首次启动)
  26. /opt/elastic/current/bin/elasticsearch-reset-password -u elastic -b
  27. # 4.6 创建 systemd
  28. cat >/etc/systemd/system/elasticsearch.service <<'EOF'
  29. [Unit]
  30. Description=Elasticsearch
  31. Wants=network-online.target
  32. After=network-online.target
  33. LimitNOFILE=65536
  34. [Service]
  35. Type=simple
  36. User=elasticsearch
  37. Group=elasticsearch
  38. ExecStart=/opt/elastic/current/bin/elasticsearch -p /var/run/elasticsearch.pid
  39. Restart=on-failure
  40. TimeoutStopSec=300
  41. [Install]
  42. WantedBy=multi-user.target
  43. EOF
  44. systemctl daemon-reload
  45. systemctl enable --now elasticsearch
  46. # 4.7 验证
  47. curl --cacert /opt/elastic/current/config/certs/http_ca.crt -u elastic:<密码> https://localhost:9200
复制代码

5. 三节点高可用集群摆设

5.1 架构规划


  • 3 个 master/data 热节点,副本因子 1 (总 2 份数据)

  • 需要更多层次可引入 warm/cold/node roles: data_hot, data_warm, data_cold, data_frozen。

5.2 设置示例(node-1)
  1. cluster.name: prod-cluster
  2. node.name: node-1
  3. node.roles: [ master, data_hot ]
  4. network.host: 192.168.10.11
  5. seed_hosts: ["192.168.10.11","192.168.10.12","192.168.10.13"]
  6. cluster.initial_master_nodes: ["node-1","node-2","node-3"]
  7. path.data: /data/es
  8. xpack.security.enabled: true
复制代码
其余节点修改 node.name 与 network.host 即可。

5.3 TLS 与认证


  • bin/elasticsearch-certutil cert --pem --in instance.yml --out certs.zip

  • 将生成的 cert 分发到每节点 config/certs,yml 指向对应 p12/PEM。

  • 使用 elasticsearch-users 或 Kibana Stack Management → Users/Roles 管理权限。


6. 系统与 JVM 调优

参数
建议
Heap Size
-Xms -Xmx 设相同,≤ 32 GB (压缩指针);生产常见 50% 内存
GC
G1GC (8.x 默认),Heap ≤ 16 GB 时 CMS 也可
indices.memory.index_buffer_size10% (默认);大 bulk 写可临时调高
thread_pool.write.queue_size写入高峰得当加大,如 1000
Shard 大小
单 shard 10–50 GB;过大影响规复,过小浪费资源
ILM
热→温→冷→冻结;定期 rollover、shrink、delete

7. 监控监控与告警


  • Elastic Stack:Metricbeat + Filebeat + Kibana Stack Monitoring。

  • Prometheus Exporter:prometheus/elasticsearch_exporter → Grafana。

  • 关键指标:CPU load, Heap Usage, JVMMemoryPressure, Search/Index Latency, Disk I/O, Segment Count, ClusterHealth。


8. 备份(快照)与规复
  1. # 创建 S3 仓库示例
  2. PUT _snapshot/s3_repo
  3. {
  4.   "type": "s3",
  5.   "settings": {
  6.     "bucket": "es-backup-prod",
  7.     "endpoint": "s3.ap-southeast-1.amazonaws.com",
  8.     "region": "ap-southeast-1"
  9.   }
  10. }
  11. # 触发每日快照
  12. PUT _snapshot/s3_repo/daily-<date>
复制代码
规复:POST _snapshot/s3_repo/snap-2025.05.10/_restore,可指定 index。


9. 常见问题排查

现象
排查点
Yellow 状态
副本未分配 → 查看磁盘阈值、水位,确认节点 roles
索引写入慢
/_nodes/hot_threads, bulk queue,查抄 refresh 隔断、replica 数
CircuitBreaker trip
调大 heap 或优化查询;indices.breaker.request.limit
高 GC
查抄 fielddata、聚合内存,使用 doc_values 或升级硬件

10. 升级路径


  • 7.17 → 8.x:滚动升级需启用安全,先升级 Kibana, Logstash,最后 Beats。

  • 重大版本前务必全量快照,阅读 Upgrade Guide。


完成! 如需 ECK Operator、Terraform 自动化摆设或详细 ILM/安全脚本示例,请另行告知,我可以继承补充。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复

使用道具 举报

×
登录参与点评抽奖,加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表