业务场景需求
业务特征
目前日志统计分析集群具有以下关键特征:
- 延迟要求:30秒以内
- 并发性能:高并发读写
- 数据容错:可容忍少量数据丢失
数据规模
- 每日原始日志采集量:约150GB
- 数据查询范围:
- 近期数据:最近3天
- 历史数据:最大查询时间7天
- 归档数据:目前最长支持30天
在正式规划前,我们需要详细了解Elasticsearch(ES)的资源组成,以选择最合适的资源配置。
硬件设置
- ES集群:在k8s集群下部署,3个master节点、3个hot节点,2个warm节点,1个冷节点
- ELK版本:7.17.15
ES 性能资源分析
ES 的高性能依赖于以下四类资源:
- 存储:负责保存数据。
- 内存:用于缓存数据。
- 计算:处理数据操作。
- 网络:支持数据传输。
存储策略建议
- 建议:优先使用 SSD,特别是搜索和索引节点。对于冷热分层架构,可以选择热节点使用 SSD,温节点和冷节点使用更经济的存储方案。
- 最佳实践
- 使用本地磁盘,成本低且避免网络开销。
- 避免使用网络附加存储(NAS),例如 SMB、NFS 等,因其可能导致高延迟和存储抽象层带来的性能问题。
内存配置
内存分为两个关键部分:JVM内存和操作系统缓存
JVM内存配置
-
JVM内存建议:
-
Xms和Xmx设置必须一致
在 jvm 的参数中 -Xms 和 -Xmx 设置的不一致,在初始化时只会初始 -Xms 大小的空间存储信息,每当空间不够用时再向操作系统申请,这样的话必然要进行一次 GC,GC会带来 STW。而剩余空间很多时,会触发缩容。再次不够用时再扩容,如此反复,这些过程会影响系统性能。同理在 MetaSpace 区也有类似的问题。
并且如果不一样的话,es也启动不起来,会报错
Initial heap size set to a larger value than the maximum heap size
-
jvm 建议不要超过 32G,否则 jvm 会禁用内存对象指针压缩技术,造成内存浪费
-
Xmx 和 Xms 不要超过物理 RAM 的50%。 参考:官方堆内存设置的建议
-
操作系统缓存
操作系统缓存,Elasticsearch 将使用剩余的可用内存来缓存数据(Lucene 使用), 通过避免在全文检索、文档聚合和排序环节的磁盘读取,极大地提高了性能。
计算资源
- CPU核心数和性能决定数据操作速度和吞吐量
- 关注线程池和线程队列配置
网络资源
- 带宽可能成为Elasticsearch性能瓶颈
- 大规模集群面临网络饱和风险
- 优化建议:
- 升级网络连接速度
- 考虑跨集群搜索(CCS)方案
集群架构规划
架构选型
日志分析业务通常采用 热温冷 架构:
- 热节点:用于存储近期高频访问的数据,推荐使用高速 SSD 和较高写入性能配置。
- 温节点:存储中期数据,使用成本较低的 HDD。
- 冷节点:用于归档长期数据,存储成本最低(如 DAS 或磁带存储)。
但是我们现状是使用nas磁盘
容量预估
计算公式
- 原始数据与索引空间比例:1:1.1
- 预留 15%警戒磁盘水位空间。
- 为错误余量和后台活动预留+ 5%。
- 保留等效的数据节点以处理故障。
存储容量计算
- 150GB原始数据 → 150 * 1.1 = 165GB索引
- 加1个副本后:330GB/天
- 30天总空间:
- 主副分片:165 * 2 * 30 = 9,900GB
- 归档存储(0副本):165 * 30 = 4,950GB
- 总计:14,850GB
热节点规模预估
磁盘与内存的比例 | 有效保留期(天) | 需存储的数据量 (GB) | 所需总磁盘空间 (GB) | 所需总内存 (GB) |
---|---|---|---|---|
30:1 | 3 | 330 * 3 = 990G | 330* 1.2 * 3 = 1188G | 1188/30 = 39.6 |
为保障数据完整性,避免单点故障,同一索引的主副分片不能位于同一节点,因此热温节点数量最少各2台。考虑到hot节点写入负载较高,为提高集群写入能力,规划三台节点,热节点的最低配置如下所示
节点 | CPU(核) | 内存(GB) | 数据盘(GB) | es角色 |
---|---|---|---|---|
hot-1 | 4 | 14 | 400 | data_content,data_hot |
hot-2 | 4 | 14 | 400 | data_content,data_hot |
hot-3 | 3 | 14 | 400 | data_content,data_hot |
温节点规模预估
热节点上超出保留期的数据将会转移到温节点。通过计算这些节点需要存储的数据量,我们便可以预估所需的规模,计算时也需要将高磁盘水位线和后台活动预留的开销考虑在内。
磁盘与内存的比例 | 有效保留期(天) | 需存储的数据量 (GB) | 所需总磁盘空间 (GB) | 所需总内存 (GB) |
---|---|---|---|---|
100:1 | 4 | 330 * 4=1320G | 330* 1.2 * 4 = 1584G | 1584/100 = 15.84 |
温节点的配置如下所示
节点 | CPU(核) | 内存(GB) | 数据盘(GB) | es角色 |
---|---|---|---|---|
warm-1 | 4 | 8 | 800 | data_content,data_warm |
warm-2 | 4 | 8 | 800 | data_content,data_warm |
冷节点规模预估
温节点上超出保留期的数据将会转移到冷节点。
磁盘与内存的比例 | 有效保留期(天) | 需存储的数据量 (GB) | 所需总磁盘空间 (GB) | 所需总内存 (GB) |
---|---|---|---|---|
1000:1 | 30 | 165 * 30 =4950G | 165* 1.2 * 30= 5940G | 5940/1000 = 5.94 |
冷节点的配置如下所示
节点 | CPU(核) | 内存(GB) | 数据盘(GB) | es角色 |
---|---|---|---|---|
cold-1 | 2 | 6 | 6000G | data_content,data_cold |
master节点预估
除了数据节点,我们通常还需要专用master节点,在实际生产环境建议部署3台master节点,以便提高集群的弹性和可用性。由于这些节点不处理任何流量,所以它们的规模很小,后期随着业务集群规模增长再提高配置或增加master节点数。master节点的最低配置如下所示
master节点的最低配置如下所示(生产环境建议master节点3台)
节点 | CPU(核) | 内存(GB) | 数据盘(GB) | es角色 |
---|---|---|---|---|
master | 2 | 8 | 100G | master,ingest |
master | 2 | 8 | 100G | master,ingest |
master | 2 | 8 | 100G | master,ingest |
节点资源使用
角色 | 描述 | 存储 | 内存 | 计算 | 网络 |
---|---|---|---|---|---|
主节点 | 管理集群状态 | 低 | 低 | 低 | 低 |
数据节点 | 存储和检索数据 | 极高 | 高 | 高 | 中 |
Ingest 节点 | 转换输入数据 | 低 | 中 | 高 | 中 |
协调节点 | 请求转发和合并检索结果 | 低 | 中 | 中 | 中 |
机器学习节点 | 机器学习 | 低 | 极高 | 极高 | 中 |
集群架构
集群调用关系
基准测试
至此,我们已经确定了适当的集群规模,我们接下来需要确认所得出的值在实际条件下能否成立。为了在投入生产环境之前更有把握,我们需要进行基准测试,以确认能够达到预期性能和目标 SLA。
可以参考 如何确定ES的集群规模?
参考文献
ES集群与角色规划
Elasticsearch 集群规模和容量规划
如何确定ES的集群规模?