11.4 生产环境部署最佳实践


文档摘要

11.4 生产环境部署最佳实践 Elasticsearch 生产环境部署最佳实践 11.4.1 硬件规划与资源配置 1. 节点类型划分: 根据负载类型,将节点划分为以下几种类型: Master 节点: 负责集群管理,不参与数据存储和搜索。通常需要 3 个或以上的 Master 节点,以确保高可用性。 Data 节点: 负责数据存储和搜索。根据数据量和查询负载,配置足够的 Data 节点。 Ingest 节点: 负责数据预处理和转换。如果数据需要复杂的处理,可以配置专门的 Ingest 节点。 Coordinating 节点: 负责接收客户端请求,并将请求分发到 Data 节点。如果客户端请求量很大,可以配置 Coordinating 节点来分担压力。 2.

11.4 生产环境部署最佳实践

Elasticsearch 生产环境部署最佳实践

11.4.1 硬件规划与资源配置

1. 节点类型划分:

根据负载类型,将节点划分为以下几种类型:

  • Master 节点: 负责集群管理,不参与数据存储和搜索。通常需要 3 个或以上的 Master 节点,以确保高可用性。

  • Data 节点: 负责数据存储和搜索。根据数据量和查询负载,配置足够的 Data 节点。

  • Ingest 节点: 负责数据预处理和转换。如果数据需要复杂的处理,可以配置专门的 Ingest 节点。

  • Coordinating 节点: 负责接收客户端请求,并将请求分发到 Data 节点。如果客户端请求量很大,可以配置 Coordinating 节点来分担压力。

2. 硬件规格建议:

  • CPU:

    • Master 节点:4-8 核

    • Data 节点:8-32 核

    • Ingest 节点:8-16 核

    • Coordinating 节点:4-8 核

  • 内存:

    • Master 节点:8-16 GB

    • Data 节点:32-128 GB (分配一半给 JVM Heap)

    • Ingest 节点:16-32 GB

    • Coordinating 节点:8-16 GB

  • 存储:

    • SSD:提供更快的读写速度,建议用于 Data 节点。

    • 足够的磁盘空间:根据数据量和备份策略,预留足够的磁盘空间。

  • 网络:

    • 高速网络:10Gbps 或更高,减少节点间通信延迟。

3. JVM Heap Size 配置:

  • JVM Heap Size 应该设置为物理内存的一半,但不要超过 32GB。

  • 避免频繁的 GC,可以使用 G1GC 垃圾回收器。

  • jvm.options 文件中配置 JVM 参数:

-Xms16g -Xmx16g -XX:+UseG1GC -XX:G1HeapRegionSize=4g -XX:MaxGCPauseMillis=200 -XX:InitiatingHeapOccupancyPercent=45

4. 操作系统配置:

  • 禁用 Swap:避免 Elasticsearch 使用 Swap 空间,影响性能。

  • 增加文件描述符限制:Elasticsearch 需要打开大量文件,增加文件描述符限制可以避免 "Too many open files" 错误。

    • 修改 /etc/security/limits.conf 文件:
* soft nofile 65535 * hard nofile 65535
  • 修改 /etc/sysctl.conf 文件:
vm.max_map_count=262144
  • 重启系统或执行 sysctl -p 命令使配置生效。

11.4.2 集群配置与优化

1. 集群名称:

  • 确保所有节点配置相同的集群名称。

  • elasticsearch.yml 文件中配置集群名称:

cluster.name: my-production-cluster

2. 节点角色:

  • 明确指定节点的角色,避免节点承担不必要的负载。

  • elasticsearch.yml 文件中配置节点角色:

# Master 节点 node.roles: [ master ] # Data 节点 node.roles: [ data ] # Ingest 节点 node.roles: [ ingest ] # Coordinating 节点 node.roles: [ coordinating_only ]

3. 发现机制:

  • 使用 discovery.seed_hostscluster.initial_master_nodes 配置静态节点发现。

  • 避免使用 multicast 发现,因为它在生产环境中不可靠。

  • elasticsearch.yml 文件中配置发现机制:

discovery.seed_hosts: ["node1", "node2", "node3"] cluster.initial_master_nodes: ["node1", "node2", "node3"]

4. 分片与副本:

  • 合理设置分片数量:每个分片的大小应该在 10-50GB 之间。

  • 设置足够的副本:通常建议设置 1-2 个副本,以提高数据可用性和查询性能。

  • 在创建索引时配置分片和副本:

PUT /my-index { "settings": { "number_of_shards": 3, "number_of_replicas": 1 } }

5. 索引模板:

  • 使用索引模板可以自动应用相同的设置和映射到多个索引。

  • 创建索引模板:

PUT /_template/my-template { "index_patterns": ["logstash-*"], "settings": { "number_of_shards": 3, "number_of_replicas": 1 }, "mappings": { "properties": { "@timestamp": { "type": "date", "format": "strict_date_optional_time||epoch_millis" } } } }

6. 延迟分配:

  • 配置 index.unassigned.node_left.delayed_timeout 选项,延迟分配未分配的分片,避免不必要的重新分配。

  • elasticsearch.yml 文件中配置延迟分配:

index.unassigned.node_left.delayed_timeout: 5m

7. 自动扩展:

  • 考虑使用 Elasticsearch 的自动扩展功能,根据负载动态调整集群规模。

  • 可以使用 Elasticsearch 的 Auto-Scaling API 或第三方工具来实现自动扩展。

11.4.3 安全配置

1. 启用安全认证:

  • 使用 Elasticsearch 的 Security 功能启用安全认证,保护集群免受未经授权的访问。

  • 可以使用内置的用户名/密码认证,也可以集成 LDAP 或 Active Directory。

  • 配置 elasticsearch.yml 文件:

xpack.security.enabled: true xpack.security.transport.ssl.enabled: true xpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.keystore.path: elastic-certificates.p12 xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

2. 角色权限控制:

  • 创建角色,并为角色分配相应的权限。

  • 将用户分配到不同的角色,实现细粒度的权限控制。

  • 可以使用 Kibana 的 Security UI 或 Elasticsearch 的 Security API 来管理角色和权限。

3. 网络隔离:

  • 将 Elasticsearch 集群部署在隔离的网络环境中,限制外部访问。

  • 使用防火墙或网络策略,只允许必要的端口和 IP 地址访问 Elasticsearch 集群。

4. 审计日志:

  • 启用审计日志,记录集群中的所有操作,以便进行安全审计和故障排查。

  • 配置 elasticsearch.yml 文件:

xpack.security.audit.enabled: true xpack.security.audit.logfile.path: /var/log/elasticsearch/audit.log

11.4.4 监控与告警

1. 监控指标:

  • 监控 Elasticsearch 集群的各项指标,包括 CPU 使用率、内存使用率、磁盘使用率、JVM Heap 使用率、GC 时间、搜索延迟、索引延迟等。

  • 可以使用 Elasticsearch 的 Monitoring API、Kibana 的 Monitoring UI 或第三方监控工具(如 Prometheus、Grafana)来监控集群。

2. 告警策略:

  • 设置合理的告警策略,当集群指标超过阈值时,及时发出告警。

  • 可以使用 Elasticsearch 的 Watcher 功能或第三方告警工具(如 Alertmanager)来设置告警策略。

3. 日志管理:

  • 集中管理 Elasticsearch 集群的日志,方便进行故障排查和性能分析。

  • 可以使用 Elasticsearch 的 Filebeat 或 Logstash 将日志发送到 Elasticsearch 集群。

4. 常用监控指标及阈值建议:

指标 描述 阈值建议
CPU 使用率 集群中所有节点的 CPU 使用率之和 超过 80% 需要关注,超过 90% 需要立即处理
内存使用率 集群中所有节点的内存使用率之和 超过 80% 需要关注,超过 90% 需要立即处理
磁盘使用率 集群中所有节点的磁盘使用率之和 超过 80% 需要关注,超过 90% 需要立即处理
JVM Heap 使用率 集群中所有节点的 JVM Heap 使用率之和 超过 75% 需要关注,超过 85% 需要立即处理
GC 时间 集群中所有节点的 GC 时间之和 频繁 GC 需要关注,长时间 GC 需要立即处理
搜索延迟 搜索请求的平均延迟时间 根据业务需求设置,超过阈值需要关注
索引延迟 索引请求的平均延迟时间 根据业务需求设置,超过阈值需要关注
分片未分配数量 集群中未分配的分片数量 任何未分配的分片都需要关注
节点宕机数量 集群中宕机的节点数量 任何节点宕机都需要关注

11.4.5 备份与恢复

1. 备份策略:

  • 制定合理的备份策略,定期备份 Elasticsearch 集群的数据。

  • 可以使用 Elasticsearch 的 Snapshot API 或第三方备份工具(如 Curator)来备份数据。

  • 建议使用增量备份,减少备份时间和存储空间。

2. 备份存储:

  • 将备份数据存储在安全可靠的地方,例如云存储或异地存储。

  • 确保备份数据的可用性和完整性。

3. 恢复测试:

  • 定期进行恢复测试,验证备份数据的可用性和恢复流程的正确性。

  • 确保在发生故障时,可以快速恢复 Elasticsearch 集群的数据。

4. Snapshot API 示例:

  • 创建 Snapshot 仓库:
PUT /_snapshot/my_backup_repo { "type": "fs", "settings": { "location": "/path/to/backup/location", "compress": true } }
  • 创建 Snapshot:
PUT /_snapshot/my_backup_repo/my_backup { "indices": "my-index-*" }
  • 恢复 Snapshot:
POST /_snapshot/my_backup_repo/my_backup/_restore { "indices": "my-index-*" }

11.4.6 升级策略

1. 滚动升级:

  • 使用滚动升级的方式升级 Elasticsearch 集群,避免停机。

  • 一次升级一个节点,确保集群的可用性。

2. 升级前准备:

  • 备份数据:在升级前备份 Elasticsearch 集群的数据,以防万一。

  • 测试升级:在测试环境中测试升级流程,确保升级过程顺利。

  • 阅读升级文档:仔细阅读 Elasticsearch 的升级文档,了解升级过程中的注意事项。

3. 升级流程:

  • 禁用分片分配:在升级节点前,禁用分片分配,避免数据重新分配。
PUT /_cluster/settings { "transient": { "cluster.routing.allocation.enable": "none" } }
  • 停止节点:停止要升级的 Elasticsearch 节点。

  • 升级 Elasticsearch:升级 Elasticsearch 到新版本。

  • 启动节点:启动升级后的 Elasticsearch 节点。

  • 启用分片分配:在升级节点后,启用分片分配。

PUT /_cluster/settings { "transient": { "cluster.routing.allocation.enable": "all" } }
  • 重复以上步骤,直到所有节点都升级完成。

总结

以上是 Elasticsearch 生产环境部署的最佳实践,涵盖了硬件规划、集群配置、安全配置、监控告警、备份恢复和升级策略等方面。通过遵循这些最佳实践,可以构建一个健壮、高效且安全的 Elasticsearch 集群,满足生产环境的需求。 请根据实际业务场景和需求,灵活调整配置和策略。 持续监控和优化 Elasticsearch 集群,确保其稳定运行。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U