更新时间:2024-10-25 GMT+08:00

Elasticsearch集群规划建议

在创建Elasticsearch集群前,需要先完成集群规划。规划时,应考虑是否多可用区部署以提高集群的高可用性,合理配置集群的节点类型与节点存储规格,以及根据业务需求选择适当的集群版本和安全模式,同时注意索引分片的优化,以确保集群的稳定性和性能。

规划集群可用区

为防止数据丢失,并确保在服务中断情况下能降低集群的停机时间,从而增强集群的高可用性,CSS服务支持跨可用区(即多可用区)部署。用户可以在同一个区域内选择两个或三个不同的可用区进行集群部署。

在创建集群时,如果用户选择了两个或三个可用区,CSS服务将自动开启跨AZ的高可用性特性,确保节点在这些可用区内均匀分配。具体的节点分布情况,包括不同数量的节点如何在各个可用区中分布,可以参考表1
  • 在创建集群时,选择的任意类型的节点数量都要大于等于所选的AZ数量,否则跨可用区部署会失败。
  • 部署跨AZ集群时,任意类型的节点都会被均匀的分布在不同的AZ上,满足各个AZ之间节点数量的差小于等于1。
  • 当集群中数据节点和冷数据节点的数量和可用区的数量不是整数倍关系时,集群的数据会分布可能会不均匀,从而影响数据查询或写入业务。
表1 节点数量和AZ分布

集群节点个数

单AZ

两AZ

三AZ

AZ1

AZ1

AZ2

AZ1

AZ2

AZ3

1个节点

1

不支持

不支持

2个节点

2

1

1

不支持

3个节点

3

2

1

1

1

1

4个节点

4

2

2

2

1

1

在选择多可用区部署时,建议合理配置副本数量,以更高效地利用跨可用区的高可用性特性。
  • 在跨两个可用区的部署中,当其中一个AZ不可用时,剩下的AZ需要继续提供服务,因此索引的副本个数至少为1个由于Elasticsearch默认副本数为1个,因此如果您对读性能没有特殊要求,可以直接使用默认值。
  • 在跨三个可用区部署中,为了保证其中任意一个AZ不可用时,剩余的AZ可以继续提供服务,因此索引的副本数至少要为1个。为了提高集群的查询能力,也可以设置更多的副本。由于Elasticsearch默认的副本数为1个,因此需要用户修改setting配置来实现修改索引副本个数。

    可以通过如下命令修改索引的副本个数,如:

    curl -XPUT http://ip:9200/{index_name}/_settings -d '{"number_of_replicas":2}'

    也可以通过在模板中指定所有索引的副本个数,如:

    curl -XPUT http://ip:9200/ _template/templatename -d '{ "template": "*", "settings": {"number_of_replicas": 2}}'

    其中,“ip”表示集群内网访问地址,“index_name”表示索引名称,“number_of_replicas”表示修改后的索引副本个数,此处以修改为2个索引副本为例。

当采用多可用区部署时,如果某个可用区发生故障,相关的业务故障行为分析及应对策略请参见表2
表2 AZ故障的业务故障行为分析

可用区数量

主节点个数

业务中断行为及应对建议

2

0

  • 如果节点个数为2的倍数:

    一半的数据节点故障,需要替换故障可用区中的一个节点,才能继续选择主节点。

  • 如果节点数为奇数:
    • 故障AZ含多一个节点,需要替换故障可用区中一个节点,才能继续选择主节点。相关替换请联系技术支持。
    • 故障AZ含少一个节点,不中断业务,能够继续选择主节点。

2

3

有50%机会的停机时间。当两个专用主节点分配到一个可用区中,一个主节点分配到另一个可用区中时:

  • 如果具有一个专用主节点的可用区遇到中断,则剩余可用区具有两个专用主节点,这两个专用主节点可以选择出主节点。
  • 如果具有两个专用主节点的可用区遇到中断,剩余可用区只有一个专用主节点,无法选择出主节点,业务中断,需要联系技术支持。

3

0

当您选择3个可用区,节点个数为4,三个可用区的节点分布数为2,1,1,如果节点个数为2的可用区故障,那么此时业务中断,建议您选择三个可用区时避免选择4个节点。

一般不会出现业务中断时间。

3

3

无业务中断时间。

当集群创建完成后,支持切换可用区,具体操作请参见切换Elasticsearch集群可用区

切换可用区包含两大场景:可用区高可用改造和可用区平移切换。
  • 可用区高可用改造:适用于单AZ改造成两AZ、单AZ改造成三AZ或两AZ改造成三AZ的场景,目的是为了提升集群的高可用性。
  • 可用区平移切换:适用于从一个AZ完全迁移到另一个AZ的场景,目的是为了解决当前可用区资源不足的问题。

规划集群版本

选择Elasticsearch集群版本时,建议综合考虑业务需求、特性支持、性能改进、安全性更新和长期支持等因素,以确保选择的版本能够满足当前和未来的业务发展,同时提供稳定和安全的运行环境。

  • 当首次使用CSS服务的Elasticsearch集群时,建议选择最新版本。
  • 当需要将自建或第三方Elasticsearch集群迁移到CSS服务,且仅迁移集群不改造集群时,建议版本号和源集群一致。
  • 当需要将自建或第三方Elasticsearch集群迁移到CSS服务,且需要对集群进行代码改造时,建议选择7.10.2或7.6.2版本。
表3 集群版本支持情况

特性

Elasticsearch 7.6.2

Elasticsearch 7.10.2

相关文档

向量检索

配置Elasticsearch集群向量检索

存算分离

配置Elasticsearch集群存算分离

流量控制2.0

配置Elasticsearch集群读写流量控制策略2.0

流量控制1.0

配置Elasticsearch集群读写流量控制策略1.0

大查询隔离

配置Elasticsearch集群大查询隔离

聚合增强

x

配置Elasticsearch集群聚合增强

读写分离

配置Elasticsearch集群读写分离

切换冷热数据

切换Elasticsearch集群冷热数据

索引回收站

x

配置Elasticsearch集群索引回收站

导入性能增强

x

增强Elasticsearch集群数据导入性能

集群内核监控增强

配置Elasticsearch集群内核监控

索引监控

配置Elasticsearch集群索引监控

规划节点类型

在Elasticsearch集群中,合理规划不同节点类型对于优化性能和资源利用率至关重要。在创建集群时,应根据业务需求、查询负载、数据增长模式和性能目标来确定添加哪些类型的节点,以实现合适的集群性能和资源管理。表4是介绍了不同节点类型的适用场景,建议用户根据具体的业务需求和性能预期来选择是否启用该类节点。

  • 如果创建集群时未启用Master节点或Client节点,当业务运行一段时间后,发现数据节点压力太大时,支持单独添加Master节点或Client节点,具体操作请参见添加Master或Client节点
  • 如果创建集群时未启用冷数据节点,则集群创建完成后不支持单独添加冷数据节点,请在创建集群时合理选择是否启用冷数据节点。
表4 各类节点的适用场景

节点类型

节点功能描述

适用场景

数据节点(ess)

数据节点用于存储数据,当集群没有Master节点和Client节点时,数据节点会同时兼顾这两类节点的功能。

集群必配的节点类型。

  • 当集群未启用Master节点和Client节点时,数据节点将同时承担集群管理、存储数据、提供接入集群和分析数据的职责。此时,为保证集群中数据的稳定性,建议设置节点数量大于等于3个。
  • 当集群启用了Master节点但未启用Client节点时,数据节点将用于存储数据并提供接入集群和分析数据的功能。
  • 当集群未启用Master节点但启用了Client节点时,数据节点将用于存储数据并提供集群管理功能。
  • 当集群同时启用了Master节点和Client节点时,数据节点将仅用于存储数据。

Master节点(ess-master)

Master节点负责管理集群中所有节点任务,如元数据管理、索引创建与删除、分片分配等。在大规模集群的元数据管理、节点管理、稳定性保障和集群操作控制中发挥着至关重要的作用。

  • 集群规模较大:当集群的节点数超过16个时,为了更有效地管理集群状态和元数据,建议添加专用的Master节点。
  • 拥有高索引和分片数量:如果索引数量或分片数超过1万个,Master节点可以处理更复杂的集群管理任务,避免对数据节点的性能造成影响。
  • 单独管理集群节点:Master节点负责维护集群的元数据,包括索引映射、设置和别名等,对于复杂的集群结构,专用的Master节点可以提供更好的管理。包括节点加入、退出以及故障检测等,Master节点在集群节点管理中扮演核心角色。
  • 提升集群稳定性和可靠性:专用的master节点可以提高集群的稳定性和可靠性,因为它减少了对同时承担数据存储和查询任务的节点的依赖。
  • 优化数据节点性能:通过将集群管理任务从数据节点分离到Master节点,可以优化数据节点的性能,使其专注于数据操作。

Client节点(ess-client)

Client节点负责接收并协调外部请求,如search和write请求,在处理高负载查询、复杂聚合、大量分片管理以及优化集群扩展性方面发挥着重要作用。

  • 存在高查询QPS:当集群面临高查询每秒查询率(QPS)时,独立的Client节点可以更均匀地分发查询请求,减轻数据节点的负担,提高整体查询性能。
  • 存在复杂的聚合查询: 对于需要大量计算资源的复杂聚合查询,Client节点可以专门处理聚合结果,从而提升聚合查询的效率和响应速度。
  • 集群分片数量多:在分片数量较多的集群中,Client节点可以有效地协调和管理对各个分片的查询请求,提高请求的转发和处理效率。
  • 可以减轻数据节点压力:Client节点负责解析search请求,确定索引分片的位置,并协调分片节点执行查询。可以减轻数据节点的负载,使它们更专注于数据的存储和索引。
  • 提高集群扩展性:增加client节点可以提供更好的集群扩展性和灵活性,支持更大规模的数据集和更复杂的查询需求。

冷数据节点(ess-cold)

冷数据节点用于存储对查询时延要求不高,但数据量较大的历史数据,是管理大规模数据集和优化存储成本的有效方式。

  • 需要存储大量历史数据:当需要存储大量不常访问但对分析有用的历史数据时,使用冷数据节点可以提供成本效益较高的存储解决方案。
  • 需要优化热数据性能:通过将旧数据迁移到冷数据节点,可以减少对热数据节点的存储压力,从而优化热数据的查询和写入性能。
  • 对查询时延要求不高:对于那些查询频率不高且可以容忍较高查询时延的数据,冷数据节点是合适的存储选择。
  • 追求成本效益:冷数据节点通常采用具有较大磁盘容量的规格,这有助于降低存储成本,同时满足大规模数据存储需求。

规划节点存储

  • 规划节点机型

    CSS服务支持多种节点机型,每种机型适用于不同的业务场景,建议用户根据具体的业务需求和性能预期来选择最合适的机型,以优化存储性能和成本效益。

    表5 节点机型适用场景

    节点机型

    磁盘类型

    规格说明

    适用场景

    计算密集型

    云盘

    CPU:内存=1:2

    推荐场景,用于数据量较少(单节点<100GB)的搜索场景。

    通用计算型

    云盘

    CPU:内存=1:4

    通用场景,用于单节点数据量在100-1000GB间的搜索与分析场景,例如中等规模的电商搜索、社交搜索、日志搜索等场景。

    内存优化型

    云盘

    CPU:内存=1:8

    通用场景,用于单节点数据量在100-2000GB间的搜索与分析场景。

    适合向量检索场景,大内存有利于提升集群的性能与稳定性。

    磁盘增强型

    本地盘

    挂载HDD盘

    适合日志场景,用于存储冷数据,对冷数据的数据查询性能要求低,并且数据需要更新的场景。

    超高I/O型

    (CPU架构为鲲鹏计算)

    本地盘

    挂载SSD盘

    适用大型日志场景,用于存储热数据。

    超高I/O型

    (CPU架构为X86计算)

    本地盘

    挂载SSD盘

    适用大型搜索与分析场景,场景对计算或磁盘I/O均有较高要求,例如舆情分析、专利检索、以及部分数据库加速场景。

  • 规划节点规格

    在规划节点规格时,推荐优先考虑高配置但节点数量较少的方案。例如,一个由3个节点组成的集群,每个节点配置为32核CPU和64GB内存,通常比一个由12个节点组成的集群,每个节点配置为8核CPU和16GB内存,在集群的稳定性和扩展性方面更具优势。

    优势主要体现在如下方面。

    • 集群稳定性:高配置节点通常能提供更强的处理能力和更大的内存空间,从而提高集群的整体稳定性。
    • 扩容便捷性:当高配置集群遇到性能瓶颈时,可以通过横向扩展轻松解决,即简单地向集群中添加更多具有相同高配置的节点。这种扩展方式简单直接,易于实施。
    • 维护简便:较少的节点数量意味着更少的维护工作和更低的管理复杂性。

    相比之下,低配置集群在需要扩容时,往往需要进行纵向扩展,即提升单个节点的配置。这不仅可能涉及更复杂的迁移和升级过程,还可能增加额外的维护成本和技术挑战。

    因此,在规划集群时,应综合考虑性能、成本、维护和扩展性,选择最适合业务需求的节点规格。

  • 规划存储容量

    在规划CSS集群的存储容量时,应考虑数据量、副本因子、数据膨胀率和磁盘使用率等多个关键因素。以下是一个推荐的计算方法,用以确定所需的集群存储容量。

    存储容量=源数据x(1+副本数量)x(1+数据膨胀率)x(1+预留空间比例)

    • 源数据:首先确定预期存储的原始数据量。
    • 副本数量:设置副本因子,默认建议值为1,以保证数据的高可用性。
    • 数据膨胀率:集群在索引过程中可能会产生额外的数据膨胀,通常建议按照25%的膨胀率进行计算。
    • 磁盘空间使用率:考虑到操作系统和文件系统本身占用的空间,以及留出一定的空间以优化磁盘性能和冗余,建议将磁盘使用率控制在70%,即预留空间比例为30%。

    将具体数值代入公式:存储容量=源数据x2x1.25x1.3

    简化计算,如果源数据量已知,最终的存储容量大约是源数据的3.25倍。这个计算方法提供了一个基础的估算,但实际配置时还需要根据具体业务场景和增长预期进行调整。

规划节点数量

创建集群时,集群的节点数量应当基于业务性能需求和预期负载进行规划。表6提供了计算方式用以确定合适的节点数量。通过这个计算方式可以更科学地规划集群的节点数量,以满足业务需求并保证集群的性能和稳定性。

表6 节点数量的计算方式

节点

性能基线

节点数量计算方式

示例

写入节点

  • 对于挂载云盘的节点,其单核写入性能基线为1MB/s。
  • 对于超高IO型的节点,其单核写入性能基线为1.5MB/s。

写入节点数=业务峰值时的流量÷单节点的核数÷单核写入性能基线x副本数

业务峰值写入100MB/s,使用16u64g的节点,预计需要100÷16÷1x2=12个节点。

查询节点

相同节点,不同业务场景下的性能差异非常大,单节点的性能基线难以评估。这里以业务平均查询响应时间(单位为秒)作为查询的性能基线进行测算。

查询节点数=QPS÷(单节点的核数x3÷2÷平均查询响应时间)x分片数量

查询QPS要求1000,平均查询响应时间100ms,索引规划3个分片,使用16u64g的节点,预计需要1000÷(16x3÷2÷0.1)x3=12个节点。

总节点数量

不涉及

总节点数量=写入节点数+查询节点数

总节点数=写入节点数+查询节点数=24个节点数。

说明:

这里计算的总节点数量表示数据节点和冷数据节点的数量之和。

当一个集群包含的节点类型不同时,各节点类型支持的节点数量不同,设置节点数量时可以参考表7

表7 集群的节点数量取值说明

一个集群包含的节点类型

节点数量的取值范围

ess

ess:1~32

ess、ess-master

ess:1~200

ess-master:3~9的奇数

ess、ess-client

ess:1~32

ess-client:1~32

ess、ess-cold

ess:1~32

ess-cold:1~32

ess、ess-master、ess-client

ess:1~200

ess-master:3~9的奇数

ess-client:1~32

ess、ess-master、ess-cold

ess:1~200

ess-master:3~9的奇数

ess-cold:1~32

ess、ess-client、ess-cold

ess:1~32

ess-client:1~32

ess-cold:1~32

ess、ess-master、ess-client、ess-cold

ess:1~200

ess-master:3~9的奇数

ess-client:1~32

ess-cold:1~32

说明:
  • ess:数据节点,即创建集群时必配的节点类型,其他3种节点类型都是基于业务需要可选的类型。
  • ess-master:Master节点。
  • ess-client:Client节点。
  • ess-cold:冷数据节点。

规划虚拟私有云和子网

CSS服务支持在非共享VPC和共享VPC内创建集群。

共享VPC和非共享VPC相比,有如下优势:

  • 在一个账号内统一创建资源,并将资源共享给其他账号,其他账号无需创建重复资源,可以精简资源数量以及网络架构,提升管理效率并节约成本。

    比如不同账号下的VPC网络互通需要建立对等连接,使用共享VPC后,则不同账号用户可以在同一个VPC创建资源,免去了对等连接配置,有效的简化组网结构。

  • 在一个账号内统一管理运维资源,便于企业集中配置业务安全策略,并且利于对资源使用情况的监控和审计,支撑业务的安全诉求。
当选择使用共享VPC创建集群时,需要提前完成共享VPC子网的创建,操作流程请参见表8。有关共享VPC的使用限制及详细操作指导等信息可以参考共享VPC概述
表8 共享子网创建流程说明

方法

说明

操作指导

方法A

  1. 通过RAM管理控制台,所有者创建共享,将子网共享给使用者。配置如下:
    1. 选择共享子网。
    2. 为共享子网选择权限,即指定使用者对该共享子网具备的权限。

      CSS服务在共享VPC中创建集群需要选择权限:default vpc subnet statement。

    3. 指定共享子网的使用者,可以指定多个。
  2. 共享创建完成后,通过RAM管理控制台,使用者可以选择接受或者拒绝共享申请。
    • 使用者接受共享申请,子网共享成功。

      如果后续使用者不再需要使用该共享子网,可以退出该共享。

    • 使用者拒绝共享申请,子网共享失败。
  1. 创建共享
  2. 接受/拒绝共享邀请

    退出共享

方法B

  1. 通过RAM管理控制台,所有者创建共享,将子网共享给使用者。配置如下:
    1. 选择共享子网。
    2. 为共享子网选择权限,即指定使用者对该共享子网具备的权限。

      CSS服务在共享VPC中创建集群需要选择权限:default vpc subnet statement。

    3. 指定共享子网的使用者,可以指定多个。
  2. 通过VPC管理控制台,选择上一步中已创建的共享,将子网加入到该共享内。
  3. 共享创建完成后,通过RAM管理控制台,使用者可以选择接受或者拒绝共享申请。
    • 使用者接受共享申请,子网共享成功。

      如果后续使用者不再需要使用该共享子网,可以退出该共享。

    • 使用者拒绝共享申请,子网共享失败。
  1. 创建共享
  2. 将VPC子网共享给其他账号
  3. 接受/拒绝共享邀请

    退出共享

规划集群安全模式

表9 集群类型介绍

集群类型

集群描述

适用场景

非安全集群

非安全模式的集群

非安全模式的集群无需安全认证即可访问,采用HTTP协议明文传输数据。建议确认访问环境的安全性,勿将访问接口暴露到公网环境上。

适合内网业务,用于测试场景。

  • 优点:简单,接入集群容易。
  • 缺点:安全性差,任何人都可以访问集群。

安全集群

安全模式+HTTP协议的集群

安全模式的集群需要通过安全认证才能访问,且支持对集群进行授权、加密等功能。采用HTTP协议明文传输数据。建议确认访问环境的安全性,勿将访问接口暴露到公网环境上。

可以实现用户权限隔离,适用于对集群性能敏感的场景。

  • 优点:访问集群需要安全认证,提升了集群安全性。通过HTTP协议访问集群又能保留集群的高性能。
  • 缺点:无法公网访问集群。

安全模式+HTTPS协议的集群

安全模式的集群需要通过安全认证才能访问,且支持对集群进行授权、加密等功能。采用HTTPS协议进行通信加密,使数据更安全。

有非常高的安全要求,且需要公网访问集群的场景。

  • 优点:访问集群需要安全认证,提升了集群安全性,且HTTPS协议的通讯加密可以实现集群公网访问功能。
  • 缺点:通过HTTPS协议访问集群,集群的读取性能相对HTTP协议来说,会下降20%左右。

当访问安全模式的集群时,需要输入用户名和密码通过安全认证才能访问。CSS服务支持以下两类用户的安全认证:

  • 集群的管理员:管理员账户名默认为admin,密码为创建集群时设置的管理员密码。
  • 集群的用户:集群的管理员通过Kibana创建集群的用户和密码。创建方式请参见创建Elasticsearch集群用户并授权使用

当集群创建完成后,支持切换安全模式,具体操作请参见更改Elasticsearch集群安全模式

切换安全模式包含三大场景:非安全模式切换为安全模式、安全模式切换为非安全模式、安全模式的协议切换。

规划索引分片数

在使用集群的过程时,特别是在进行数据导入操作之前,建议根据具体的业务需求,提前对集群的数据结构和分布进行规划。这包括合理设计索引和确定分片数量。为了确保集群在性能和可扩展性方面达到最佳状态,以下是一些建议。

  • 单个分片大小:建议将每个分片的大小控制在10GB到50GB之间。这有助于在存储效率和查询性能之间取得平衡。
  • 集群总分片数量:为了管理方便和避免过度扩展,建议将集群的总分片数量控制在3万以内。这有助于保持集群的稳定性和响应速度。
  • 内存与分片比例:在资源分配上,建议每1GB的内存空间放置20到30个分片。这样可以确保每个分片都有足够的内存资源进行索引和查询操作。
  • 单节点分片数:为了避免单点过载,建议每个节点上的分片数量不超过1000个。这有助于避免节点资源竞争,确保节点的稳定运行。
  • 索引分片与节点数的关系:对于单个索引,建议其分片数与集群的节点数保持一致,或者设置为节点数的整数倍。这有助于实现负载均衡,优化查询和索引的性能。

通过以上建议,可以更有效地规划和管理CSS集群的索引分片,从而提升集群的整体性能和可维护性。