# 7.1 部署优化

# 7.1.1 硬件选择

ES的数据节点,保存包含索引文档的分片数据,执行CRUD、搜索、聚合相关的操作。属于:内存、CPU、IO密集型,对硬件资源要求高。

# 1. 硬盘尽量SSD

Elasticsearch 最大的瓶颈往往是磁盘读写性能,尤其是随机读取性能。使用SSD(PCI-E接口SSD卡/SATA接口SSD盘)通常比机械硬盘(SATA盘/SAS盘)查询速度快5~10倍,写入性能提升不明显。 对于文档检索类查询性能要求较高的场景,建议考虑 SSD 作为存储,同时按照 1:10 的比例配置内存和硬盘。对于日志分析类查询并发要求较低的场景,可以考虑采用机械硬盘作为存储,同时按照 1:50 的比例配置内存和硬盘。单节点存储数据建议在2TB以内,不要超过5TB,避免查询速度慢、系统不稳定。

# 2. CPU核心数尽量多

Elasticsearch 对 CPU 的需求取决于具体的工作负载。一般来说,更多的 CPU 核心可以提高查询和索引的并发性能。在选择 CPU 时,应该考虑核心数量、时钟频率和缓存大小等因素。

# 2. 运行内存尽量大

内存对 Elasticsearch 的性能至关重要。足够的内存可以提高缓存命中率,减少磁盘 I/O。建议为 Elasticsearch 分配尽可能多的内存,但要留出足够的空间给操作系统的文件缓存。大量数据缓存可以提高性能、提升速度。

# 7.1.2 运行配置优化

# 1. JVM配置机器一半的内存

修改 conf/jvm.options 配置,-Xms 和 -Xmx 设置为相同的值,推荐设置为机器内存的一半左右,剩余一半留给操作系统缓存使用。JVM 内存建议不要低于 2G,否则有可能因为内存不足导致 ES 无法正常启动或内存溢出,JVM 建议不要超过 32G,否则 JVM 会禁用内存对象指针压缩技术,造成内存浪费。机器内存大于 64G 内存时,推荐配置 -Xms30g -Xmx30g。JVM 堆内存较大时,内存垃圾回收暂停时间比较长,建议配置 ZGC 或 G1 垃圾回收算法。

# 2. 关闭交换分区SWAP

防止内存置换降低性能。 将/etc/fstab 文件中包含swap的行注释掉 sed -i '/swap/s/^/#/' /etc/fstab swapoff -a # 单用户可以打开的最大文件数量,可以设置为官方推荐的65536或更大些 echo "* - nofile 655360" >> /etc/security/limits.conf # 单用户线程数调大 echo "* - nproc 131072" >> /etc/security/limits.conf # 单进程可以使用的最大map内存区域数量 echo "vm.max_map_count = 655360" >> /etc/sysctl.conf # 参数修改立即生效 sysctl -p

Last Updated: 11/15/2023, 4:32:26 PM
点击加入Q群:564759181