华为云用户手册

  • (可选)准备工作 在创建向量索引前,请根据业务场景,完成集群高级配置。 在离线导入数据场景下,为了提高批量写入性能,建议将索引的“refresh_interval”参数设置为“-1”,即关闭自动刷新索引。 建议将备份数“number_of_replicas”设置为“0”,当离线数据导入完成后,再设置为需要的值。 其他高级功能的参数配置说明请参见表1。 表1 集群高级配置参数说明 参数 说明 native.cache.circuit_breaker.enabled 是否开启堆外内存熔断。 默认值:true。 native.cache.circuit_breaker.cpu.limit 向量索引堆外内存使用上限。 假设使用128GB内存的机器且堆内存大小为31GB,默认堆外内存使用上限为(128 - 31) * 80% = 77.6GB,堆外内存使用量超过该值将会触发写入熔断。 默认值:80%。 native.cache.expiry.enabled 是否开启缓存超时设置。开启时,如果某些缓存项长时间没有被访问过将会被清除。 取值范围:true、false。 默认值:false。 native.cache.expiry.time 超时时长。 默认值:24h。 native.vector.index_threads 创建底层索引时所使用的线程数,每个shard均会使用多个构建线程。该值建议不要设置过大,避免产生过多的构建线程抢占查询资源。 默认值:4。
  • 创建向量索引 登录 云搜索服务 管理控制台。 在“集群管理”页面,选择需要启用向量检索的集群,单击操作列“Kibana”,登录Kibana界面。 单击左侧导航栏的“Dev Tools”,执行如下命令创建向量索引。 创建一个名为“my_index”的索引,该索引包含一个名为“my_vector”的向量字段和一个名为“my_label”的文本字段。其中,向量字段创建了GRAPH图索引,并使用欧式距离作为相似度度量。 PUT my_index { "settings": { "index": { "vector": true } }, "mappings": { "properties": { "my_vector": { "type": "vector", "dimension": 2, "indexing": true, "algorithm": "GRAPH", "metric": "euclidean" }, "my_label": { "type": "keyword" } } } } 表3 创建索引参数说明 类型 参数 说明 Index settings参数 vector 当需要使用向量索引加速时,需要设置该值为true。 vector.exact_search_threshold 用于设置在搜索过程中,从前置过滤搜索切换到暴力搜索的中间结果集大小的阈值控制参数。 当Segment中过滤后的中间结果集的数量小于该参数值时,则执行暴力搜索。 默认值为“null”,即不会切换为暴力搜索。 vector.search.concurrency.enabled 是否开启segment间并发搜索。在Elasticsearch中,每个索引分片由多个segment组成,执行查询时默认采用segment间串行搜索机制。启用并发搜索可通过并行执行搜索任务优化查询性能,这将有效降低查询时延,但不会提升集群的最大查询吞吐量。 开启该参数可能会提高集群的平均CPU使用率。 该参数仅在Elasticsearch 7.10.2集群且镜像版本号不低于7.10.2_25.3.0_x.x.x时才支持配置。 可选值: false:表示执行查询时采用segment间串行搜索机制。 true:表示执行查询时采用segment间并发搜索机制。 默认值:false Field mappings参数 type 字段类型,“vector”表示该字段为向量字段。 dimension 向量数据维度。取值范围:[1, 4096]。 indexing 是否开启向量索引加速。 可选值: false:表示关闭向量索引加速,向量数据仅写入docvalues,只支持使用ScriptScore以及Rescore进行向量查询。 true:表示开启向量索引加速,系统将创建额外的向量索引,索引算法由"algorithm"字段指定,写入数据后可以使用VectorQuery进行查询。 默认值:false。 lazy_indexing 是否开启向量索引延迟构建,仅用于离线构建场景。 仅在“indexing”为“true”,且集群版本为Elasticsearch 7.10.2、集群镜像版本号不低于7.10.2_24.3.3_x.x.x的情况下,配置lazy_indexing才会生效。 可选值: false:不开启。 true:开启延迟构建,此时写入向量数据时,集群不实时创建向量索引结构(比如图索引),而是在数据写入后执行离线构建,再开始创建向量索引结构。构建完成后才可使用VectorQuery进行查询。 algorithm 索引算法。仅当“indexing”为“true”时生效。 可选值: FLAT:暴力计算,目标向量依次和所有向量进行距离计算,此方法计算量大,召回率100%。适用于对召回准确率要求极高的场景。 GRAPH:图索引,内嵌深度优化的HNSW算法,主要应用在对性能和精度均有较高要求且单shard中文档数量在千万个以内的场景。 GRAPH_PQ:将HNSW算法与PQ算法进行了结合,通过PQ降低原始向量的存储开销,能够使HNSW轻松支撑上亿规模的检索场景。 GRAPH_SQ8:将HNSW算法与SQ量化算法进行了结合,将float32数值类型量化为int8,降低原始向量的存储开销,并提升构建和查询效率,但会带来一定的召回率下降。仅Elasticsearch 7.10.2版本的集群支持。 GRAPH_SQ4:将HNSW算法与SQ量化算法进行了结合,将float32数值类型量化为int4,降低原始向量的存储开销,并提升构建和查询效率,但会带来一定的召回率损失。SQ4量化压缩率高于SQ8,且计算效率更高,但召回率下降也会更多。仅Elasticsearch 7.10.2版本的集群支持。 IVF_GRAPH:算法将IVF与HNSW结合,对全量空间进行划分,每一个聚类中心向量代表了一个子空间,极大地提升检索效率,同时会带来微小的检索精度损失。适用于数据量在上亿以上同时对检索性能要求较高的场景。 IVF_GRAPH_PQ:PQ算法与IVF-HNSW的结合,PQ可以通过配置选择与HNSW结合和IVF结合,进一步提升系统的容量并降低系统开销,适用于shard中文档数量在十亿级别以上同时对检索性能要求较高的场景。 默认值:GRAPH。 说明: 当选择IVF_GRAPH或者IVF_GRAPH_PQ索引时,需要额外进行预构建中心点索引以及注册等步骤,具体内容请参考(可选)预构建与注册中心点向量。 其他可选参数 当使用向量索引加速时(即“indexing”为“true”时),为了获得更高的查询性能以及查询精度, CSS 提供了与向量索引相关的可选参数配置,参数说明请参见表4。 metric 计算向量之间距离的度量方式。 可选值: euclidean:欧式距离。 inner_product:内积距离。 cosine:余弦距离。 hamming:汉明距离,仅支持设置"dim_type"为"binary"时使用。 默认值:euclidean。 dim_type 向量维度值的类型。 可选值:binary、float(默认)。 表4 可选参数说明 类型 参数 说明 GRAPH类索引配置参数 neighbors 图索引中每个向量的邻居数,默认值为64,值越大查询精度越高。索引越大,构建速度以及后续的查询速度也会变慢。 取值范围:[10, 255]。 shrink 构建hnsw时的裁边系数,默认值1.0f。 取值范围:(0.1, 10)。 scaling 构建hnsw时上层图节点数的缩放比例,默认值50。 取值范围:(0, 128]。 efc 构建hnsw时考察邻居节点的队列大小,默认值为200,值越大精度越高,构建速度将会变慢。 取值范围:(0, 100000]。 max_scan_num 扫描节点上限,默认值为10000,值越大精度越高,索引速度变慢。 取值范围:(0, 1000000]。 PQ类索引配置参数 centroid_num 每一段的聚类中心点数目,默认值为255。 取值范围:(0, 65535]。 fragment_num 段数,默认值为0,插件自动根据向量长度设置合适的段数。 取值范围:[0, 4096]。
  • 约束限制 集群的节点存储容量只支持扩容不支持缩容,请基于业务量合理选择节点存储容量。 包周期集群不支持同时扩容“节点数量”和“节点存储容量”。 集群的Master节点和Client节点的存储容量不支持扩容。 本地盘类型的数据节点不支持扩容节点存储容量。 扩容集群的节点数量时,不同节点类型的取值范围请参见表3。 表2 节点数量的取值说明 节点类型 取值范围 数据节点 集群没有Master节点时:1~32 集群有Master节点时:1~200 Master节点 3、5、7、9(必须是3~9之间的奇数) Client节点 1~32 冷数据节点 1~32
  • 变更影响 在扩容前,您需要了解以下关键影响和操作建议,以便合理规划变更,最小化业务影响。 扩容节点存储容量(纵向扩展)对业务没有影响,而增加节点数量或增加节点类型(横向扩展)可能产生以下影响: 性能影响 扩容节点不会中断业务,但是扩容过程中数据分片需要均衡到新节点以分摊负载。此过程会消耗IO性能,建议在业务低峰期执行。 建议在业务低峰期提高数据迁移速率以缩短任务耗时,并在业务高峰期前降低迁移速率以减轻对集群性能的影响。数据迁移速率由“indices.recovery.max_bytes_per_sec”参数决定,该参数值默认是“CPU核数 x 32MB”(如4核CPU默认128MB)。该参数取值范围为40MB至1000MB,可根据业务需求调整。 PUT /_cluster/settings { "transient": { "indices.recovery.max_bytes_per_sec": "1000MB" } } 变更过程特性 扩容任务一旦启动就无法中止,直到任务成功或失败才会结束。
  • FAQ:如何跳过索引的rollover步骤? 使用场景 手动执行过rollover的场景:当用户使用生命周期进行索引的rollover,并在policy中设置了基于时间的rollover条件。在条件未被满足之前,用户进行了手动的rollover操作。随后,当索引生命周期中配置的时间条件被满足时,自动的rollover尝试执行,但由于之前手动rollover的存在,导致自动rollover失败,生命周期任务停止。为解决此问题,用户需要配置跳过索引的rollover,然后重试生命周期任务,以使滚动索引能够继续执行。 对已经自动rollover的索引执行过remove或add policy操作的场景:通过生命周期自动rollover过的索引,在修改过policy(如remove policy和add policy)之后,生命周期会从头开始执行,当再次执行到rollover时,任务会失败。为了解决此问题,用户需要配置跳过索引的rollover,然后重试生命周期任务,以使滚动索引能够继续执行。 索引在设置跳过rollover步骤以后,索引生命周期将不再对索引进行rollover步骤,也不会生成rollover后的索引,因此,对正常执行的索引进行跳过rollover步骤可能会导致数据丢失,请谨慎操作。 约束限制 支持跳过索引rollover步骤的Elasticsearch集群要求版本号为7.6.2或7.10.2,并且集群镜像版本号不低于7.x.2_25.1.0_x.x.x。 操作步骤 当索引生命周期任务因为rollover失败而停止时,执行如下命令配置跳过索引的rollover。 PUT index_name/_settings { "index.plugins.index_state_management.rollover_skip": true } 返回结果为“true”,表示配置成功。 配置跳过索引的rollover之后,执行如下命令,重试生命周期任务。 POST _opendistro/_ism/retry/index_name 返回如下信息,表示重试成功。 { "updated_indices": 1, "failures": false, "failed_indices": [] }
  • 查看索引读写流量 当集群启用了索引监控后,支持查询一段时间内的索引读写流量。 执行如下命令,查看所有索引读写流量。 GET /_cat/monitoring 执行如下命令,查看某一索引的读写流量。 GET /_cat/monitoring/{indexname} {indexName}为需要查看读写流量的索引名称。 执行如下命令,查看索引不同时间段的读写流量。 GET _cat/monitoring?begin=1650099461000 GET _cat/monitoring?begin=2022-04-16T08:57:41 GET _cat/monitoring?begin=2022-04-16T08:57:41&end=2022-04-17T08:57:41 表2 配置项说明 配置项 是否必选 说明 indexname 否 索引名称。 说明: 不支持查看系统索引,以“.”开头的索引是系统索引。 begin 否 查看监控的起始时间,UTC时间,默认是当前时间的前5分钟。 支持时间格式:strict_date_optional_time|epoch_millis 默认值:当前时间减去5分钟。 end 否 查看监控的结束时间,UTC时间,默认是当前时间。 支持时间格式: strict_date_optional_time|epoch_millis 默认值:当前时间。 返回信息示例: index begin end status pri rep init unassign docs.count docs.deleted store.size pri.store.size delete.rate indexing.rate search.rate test 2022-03-25T09:46:53.765Z 2022-03-25T09:51:43.767Z yellow 1 1 0 1 9 0 5.9kb 5.9kb 0/s 0/s 0/s 表3 返回信息的参数说明 参数 说明 index 索引名称。 begin 查看监控数据的起始时间。 end 查看监控数据的结束时间。 status 查询监控时间间隔内的索引状态。 pri 查询监控时间间隔内的索引的shard数量。 rep 查询监控时间间隔内的索引副本数量。 init 查询监控时间间隔内的索引的初始化数量。 unassign 查询监控时间间隔内的索引的未分配数量。 docs.count 查询监控时间间隔内的文档数量。 docs.deleted 查询监控时间间隔内的文档删除数量。 store.size 查询监控时间间隔内存储的索引大小。 pri.store.size 查询监控时间间隔内的索引主分片的大小。 delete.rate 监控时间间隔内的索引每秒删除数量。 indexing.rate 监控时间间隔内的索引每秒写入数量。 search.rate 监控时间间隔内的索引每秒查询数量。
  • kibana-monitor配置文件 kibana-monitor配置文件内容如下,建议保存为“monitoring-kibana.ndjson”文件。 {"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{}"},"title":"[monitoring] segment memory in bytes of index for top10","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"[monitoring] segment memory in bytes of index for top10\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"#68BC00\",\"split_mode\":\"terms\",\"split_color_mode\":\"kibana\",\"metrics\":[{\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"type\":\"max\",\"field\":\"index_stats.total.segments.memory_in_bytes\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"label\":\"segments memory in bytes \",\"type\":\"timeseries\",\"terms_field\":\"index_stats.index\",\"terms_order_by\":\"61ca57f2-469d-11e7-af02-69e470af7417\"}],\"time_field\":\"timestamp\",\"index_pattern\":\"monitoring-eye-css-*\",\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"monitoring-eye-css-*\",\"default_timefield\":\"timestamp\",\"isModelInvalid\":false}}"},"id":"3ae5d820-6628-11ed-8cd7-973626cf6f70","references":[],"type":"visualization","updated_at":"2022-12-01T12:41:01.165Z","version":"WzIwNiwyXQ=="} {"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{}"},"title":"[monitoring] segment count of index for top10","uiStateJSON":"{}","version":1,"visState":"{\"aggs\":[],\"params\":{\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"default_index_pattern\":\"monitoring-eye-css-*\",\"default_timefield\":\"timestamp\",\"filter\":{\"language\":\"kuery\",\"query\":\"\"},\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"index_pattern\":\"monitoring-eye-css-*\",\"interval\":\"\",\"isModelInvalid\":false,\"series\":[{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"rgba(231,102,76,1)\",\"fill\":0.5,\"formatter\":\"number\",\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"label\":\"segment count of index for top10\",\"line_width\":1,\"metrics\":[{\"field\":\"index_stats.total.segments.count\",\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"type\":\"max\"}],\"point_size\":1,\"separate_axis\":0,\"split_color_mode\":\"kibana\",\"split_mode\":\"terms\",\"stacked\":\"none\",\"terms_field\":\"index_stats.index\",\"terms_order_by\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"timestamp\",\"tooltip_mode\":\"show_all\",\"type\":\"timeseries\"},\"title\":\"[monitoring] segment count of index for top10\",\"type\":\"metrics\"}"},"id":"45d571c0-6626-11ed-8cd7-973626cf6f70","references":[],"type":"visualization","updated_at":"2022-12-01T12:41:01.165Z","version":"WzIwNywyXQ=="} {"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{}"},"title":"[monitoring] markdown","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"[monitoring] markdown\",\"type\":\"markdown\",\"params\":{\"fontSize\":12,\"openLinksInNewTab\":false,\"markdown\":\"### Index Monitoring \\nThis dashboard contains default table for you to play with. You can view it, search it, and interact with the visualizations.\"},\"aggs\":[]}"},"id":"b2811c70-a5f1-11ec-9a68-ada9d754c566","references":[],"type":"visualization","updated_at":"2022-12-01T12:41:01.165Z","version":"WzIwOCwyXQ=="} {"attributes":{"description":"number of document being indexing for primary and replica shards","kibanaSavedObjectMeta":{"searchSourceJSON":"{}"},"title":"[monitoring] Indexing Rate (/s)","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"[monitoring] Indexing Rate (/s)\",\"type\":\"metrics\",\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"rgba(0,32,188,1)\",\"split_mode\":\"everything\",\"metrics\":[{\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"type\":\"max\",\"field\":\"indices_stats._all.total.indexing.index_total\"},{\"unit\":\"1s\",\"id\":\"fed72db0-a5f8-11ec-aa10-992297d21a2e\",\"type\":\"derivative\",\"field\":\"61ca57f2-469d-11e7-af02-69e470af7417\"},{\"unit\":\"\",\"id\":\"14b66420-a5f9-11ec-aa10-992297d21a2e\",\"type\":\"positive_only\",\"field\":\"fed72db0-a5f8-11ec-aa10-992297d21a2e\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"number\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"label\":\"Indexing Rate (/s)\",\"type\":\"timeseries\",\"split_color_mode\":\"rainbow\",\"hidden\":false}],\"time_field\":\"timestamp\",\"index_pattern\":\"monitoring-eye-css-*\",\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"show_grid\":1,\"default_index_pattern\":\"monitoring-eye-css-*\",\"default_timefield\":\"timestamp\",\"isModelInvalid\":false,\"legend_position\":\"bottom\"},\"aggs\":[]}"},"id":"de4f8ab0-a5f8-11ec-9a68-ada9d754c566","references":[],"type":"visualization","updated_at":"2022-12-01T12:41:01.165Z","version":"WzIwOSwyXQ=="} {"attributes":{"description":"number of search request being executed in primary and replica shards","kibanaSavedObjectMeta":{"searchSourceJSON":"{}"},"title":"[monitoring] Search Rate (/s)","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"[monitoring] Search Rate (/s)\",\"type\":\"metrics\",\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"rgba(0,33,224,1)\",\"split_mode\":\"everything\",\"metrics\":[{\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"type\":\"max\",\"field\":\"indices_stats._all.total.search.query_total\"},{\"unit\":\"1s\",\"id\":\"b1093ac0-a5f7-11ec-aa10-992297d21a2e\",\"type\":\"derivative\",\"field\":\"61ca57f2-469d-11e7-af02-69e470af7417\"},{\"unit\":\"\",\"id\":\"c17db930-a5f7-11ec-aa10-992297d21a2e\",\"type\":\"positive_only\",\"field\":\"b1093ac0-a5f7-11ec-aa10-992297d21a2e\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"number\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"split_color_mode\":\"rainbow\",\"label\":\"Search Rate (/s)\",\"type\":\"timeseries\",\"filter\":{\"query\":\"\",\"language\":\"kuery\"}}],\"time_field\":\"timestamp\",\"index_pattern\":\"monitoring-eye-css-*\",\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"show_grid\":1,\"default_index_pattern\":\"monitoring-eye-css-*\",\"default_timefield\":\"timestamp\",\"isModelInvalid\":false,\"legend_position\":\"bottom\"},\"aggs\":[]}"},"id":"811df7a0-a5f8-11ec-9a68-ada9d754c566","references":[],"type":"visualization","updated_at":"2022-12-01T12:41:01.165Z","version":"WzIxMCwyXQ=="} {"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{}"},"title":"[monitoring] total docs count","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"[monitoring] total docs count\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"rgba(218,139,69,1)\",\"split_mode\":\"everything\",\"split_color_mode\":\"kibana\",\"metrics\":[{\"unit\":\"\",\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"type\":\"max\",\"field\":\"indices_stats._all.total.docs.count\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"number\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"label\":\"total_docs_count\",\"type\":\"timeseries\"}],\"time_field\":\"timestamp\",\"index_pattern\":\"monitoring-eye-css-*\",\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"monitoring-eye-css-*\",\"default_timefield\":\"timestamp\",\"isModelInvalid\":false,\"legend_position\":\"bottom\"}}"},"id":"eea89780-664b-11ed-8cd7-973626cf6f70","references":[],"type":"visualization","updated_at":"2022-12-01T12:41:01.165Z","version":"WzIxMSwyXQ=="} {"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{}"},"title":"[monitoring] total docs delete","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"[monitoring] total docs delete\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"rgba(214,191,87,1)\",\"split_mode\":\"everything\",\"split_color_mode\":\"kibana\",\"metrics\":[{\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"type\":\"max\",\"field\":\"indices_stats._all.total.docs.deleted\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"number\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"label\":\"totol_docs_delete\",\"type\":\"timeseries\",\"hidden\":false}],\"time_field\":\"timestamp\",\"index_pattern\":\"monitoring-eye-css-*\",\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"monitoring-eye-css-*\",\"default_timefield\":\"timestamp\",\"isModelInvalid\":false,\"drop_last_bucket\":1,\"legend_position\":\"bottom\"}}"},"id":"cfbb4e20-664c-11ed-8cd7-973626cf6f70","references":[],"type":"visualization","updated_at":"2022-12-01T12:41:01.165Z","version":"WzIxMiwyXQ=="} {"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{}"},"title":"[monitoring] total store size in bytes","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"[monitoring] total store size in bytes\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"split_color_mode\":\"kibana\",\"metrics\":[{\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"type\":\"max\",\"field\":\"indices_stats._all.total.store.size_in_bytes\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"label\":\"total store size in bytes\",\"type\":\"timeseries\"}],\"time_field\":\"timestamp\",\"index_pattern\":\"monitoring-eye-css-*\",\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"show_grid\":1,\"tooltip_mode\":\"show_all\",\"default_index_pattern\":\"monitoring-eye-css-*\",\"default_timefield\":\"timestamp\",\"isModelInvalid\":false,\"legend_position\":\"bottom\",\"background_color_rules\":[{\"id\":\"7712e550-664f-11ed-8b5d-8db37e5b4cc4\"}],\"bar_color_rules\":[{\"id\":\"77680a30-664f-11ed-8b5d-8db37e5b4cc4\"}]}}"},"id":"c7f72ae0-664e-11ed-8cd7-973626cf6f70","references":[],"type":"visualization","updated_at":"2022-12-01T12:41:01.165Z","version":"WzIxMywyXQ=="} {"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{}"},"title":"[monitoring] indexing rate of index for top10(/s)","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"[monitoring] indexing rate of index for top10(/s)\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"#68BC00\",\"split_mode\":\"terms\",\"metrics\":[{\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"type\":\"max\",\"field\":\"index_stats.total.indexing.index_total\"},{\"unit\":\"1s\",\"id\":\"541ed8f0-a5ee-11ec-aa10-992297d21a2e\",\"type\":\"derivative\",\"field\":\"61ca57f2-469d-11e7-af02-69e470af7417\"},{\"unit\":\"\",\"id\":\"67ec1f50-a5ee-11ec-aa10-992297d21a2e\",\"type\":\"positive_only\",\"field\":\"541ed8f0-a5ee-11ec-aa10-992297d21a2e\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"number\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"label\":\"indexing_rate\",\"type\":\"timeseries\",\"split_filters\":[{\"color\":\"#68BC00\",\"id\":\"81004200-a5ee-11ec-aa10-992297d21a2e\",\"filter\":{\"query\":\"\",\"language\":\"kuery\"}}],\"filter\":{\"query\":\"\",\"language\":\"kuery\"},\"terms_field\":\"index_stats.index\",\"terms_order_by\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"terms_size\":\"10\",\"terms_direction\":\"desc\",\"split_color_mode\":\"rainbow\"}],\"time_field\":\"timestamp\",\"index_pattern\":\"monitoring-eye-css-*\",\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"show_grid\":1,\"default_index_pattern\":\"monitoring-eye-css-*\",\"default_timefield\":\"timestamp\",\"isModelInvalid\":false,\"tooltip_mode\":\"show_all\"}}"},"id":"943b3e00-a5ef-11ec-9a68-ada9d754c566","references":[],"type":"visualization","updated_at":"2022-12-01T12:41:01.165Z","version":"WzIxNCwyXQ=="} {"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{}"},"title":"[monitoring] search rate of index for top10(/s)","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"[monitoring] search rate of index for top10(/s)\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"rgba(99,157,12,1)\",\"split_mode\":\"terms\",\"metrics\":[{\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"type\":\"max\",\"field\":\"index_stats.total.search.query_total\"},{\"unit\":\"1s\",\"id\":\"fdfdfad0-a5ef-11ec-aa10-992297d21a2e\",\"type\":\"derivative\",\"field\":\"61ca57f2-469d-11e7-af02-69e470af7417\"},{\"unit\":\"\",\"id\":\"0aaa26a0-a5f0-11ec-aa10-992297d21a2e\",\"type\":\"positive_only\",\"field\":\"fdfdfad0-a5ef-11ec-aa10-992297d21a2e\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"number\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"label\":\"search rate\",\"type\":\"timeseries\",\"terms_field\":\"index_stats.index\",\"terms_order_by\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"split_color_mode\":\"rainbow\"}],\"time_field\":\"timestamp\",\"index_pattern\":\"monitoring-eye-css-*\",\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"show_grid\":1,\"default_index_pattern\":\"monitoring-eye-css-*\",\"default_timefield\":\"timestamp\",\"isModelInvalid\":false,\"tooltip_mode\":\"show_all\"}}"},"id":"ab503550-a5ef-11ec-9a68-ada9d754c566","references":[],"type":"visualization","updated_at":"2022-12-01T12:41:01.165Z","version":"WzIxNSwyXQ=="} {"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{}"},"title":"[monitoring] indices store_size for top10","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"[monitoring] indices store_size for top10\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"series\":[{\"id\":\"38474c50-a5f5-11ec-aa10-992297d21a2e\",\"color\":\"#68BC00\",\"split_mode\":\"terms\",\"metrics\":[{\"id\":\"38474c51-a5f5-11ec-aa10-992297d21a2e\",\"type\":\"max\",\"field\":\"index_stats.total.store.size_in_bytes\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"label\":\"store_size for index\",\"type\":\"timeseries\",\"terms_field\":\"index_stats.index\",\"terms_order_by\":\"38474c51-a5f5-11ec-aa10-992297d21a2e\",\"filter\":{\"query\":\"\",\"language\":\"kuery\"},\"split_color_mode\":\"rainbow\"}],\"time_field\":\"timestamp\",\"index_pattern\":\"monitoring-eye-css-*\",\"interval\":\"\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"show_grid\":1,\"default_index_pattern\":\"monitoring-eye-css-*\",\"default_timefield\":\"timestamp\",\"isModelInvalid\":false,\"filter\":{\"query\":\"\",\"language\":\"kuery\"},\"bar_color_rules\":[{\"id\":\"7d9d3cb0-a5f5-11ec-aa10-992297d21a2e\"}],\"tooltip_mode\":\"show_all\"}}"},"id":"c78119a0-a5f5-11ec-9a68-ada9d754c566","references":[],"type":"visualization","updated_at":"2022-12-01T12:41:01.165Z","version":"WzIxNiwyXQ=="} {"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{}"},"title":"[monitoring] search query time in millis of index for top10(ms)","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"[monitoring] search query time in millis of index for top10(ms)\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"axis_formatter\":\"number\",\"axis_max\":\"\",\"axis_min\":\"\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"default_index_pattern\":\"monitoring-eye-css-*\",\"default_timefield\":\"timestamp\",\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"index_pattern\":\"monitoring-eye-css-*\",\"interval\":\"\",\"isModelInvalid\":false,\"series\":[{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"number\",\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"label\":\"index_query_time_in_millis\",\"line_width\":1,\"metrics\":[{\"field\":\"index_stats.total.search.query_time_in_millis\",\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"type\":\"max\"},{\"unit\":\"1s\",\"id\":\"42c92b10-6645-11ed-925a-6de90846447d\",\"type\":\"derivative\",\"field\":\"61ca57f2-469d-11e7-af02-69e470af7417\"}],\"point_size\":1,\"separate_axis\":0,\"split_color_mode\":\"kibana\",\"split_mode\":\"terms\",\"stacked\":\"none\",\"terms_field\":\"index_stats.index\",\"terms_order_by\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"timestamp\",\"tooltip_mode\":\"show_all\",\"type\":\"timeseries\",\"background_color\":null,\"filter\":{\"query\":\"\",\"language\":\"kuery\"},\"legend_position\":\"right\"}}"},"id":"c8109100-6627-11ed-8cd7-973626cf6f70","references":[],"type":"visualization","updated_at":"2022-12-01T12:41:01.165Z","version":"WzIxNywyXQ=="} {"attributes":{"description":"","hits":0,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}"},"optionsJSON":"{\"hidePanelTitles\":false,\"useMargins\":true}","panelsJSON":"[{\"gridData\":{\"x\":0,\"y\":0,\"w\":48,\"h\":5,\"i\":\"971ed6c6-81b9-491b-9f08-e3ae9c382abd\"},\"panelIndex\":\"971ed6c6-81b9-491b-9f08-e3ae9c382abd\",\"embeddableConfig\":{},\"panelRefName\":\"panel_0\"},{\"gridData\":{\"x\":0,\"y\":5,\"w\":24,\"h\":15,\"i\":\"5a6982e7-0c6c-4733-8a2d-e4c57cdf7397\"},\"panelIndex\":\"5a6982e7-0c6c-4733-8a2d-e4c57cdf7397\",\"embeddableConfig\":{},\"panelRefName\":\"panel_1\"},{\"gridData\":{\"x\":24,\"y\":5,\"w\":24,\"h\":15,\"i\":\"662476f4-739c-4a05-858c-2ee8230cf410\"},\"panelIndex\":\"662476f4-739c-4a05-858c-2ee8230cf410\",\"embeddableConfig\":{},\"panelRefName\":\"panel_2\"},{\"gridData\":{\"x\":0,\"y\":20,\"w\":16,\"h\":15,\"i\":\"d89c38e2-33f3-4592-b503-20460a6a7a57\"},\"panelIndex\":\"d89c38e2-33f3-4592-b503-20460a6a7a57\",\"embeddableConfig\":{},\"panelRefName\":\"panel_3\"},{\"gridData\":{\"x\":16,\"y\":20,\"w\":16,\"h\":15,\"i\":\"1f693b49-79fa-4807-94e8-0c12f51e54f8\"},\"panelIndex\":\"1f693b49-79fa-4807-94e8-0c12f51e54f8\",\"embeddableConfig\":{},\"panelRefName\":\"panel_4\"},{\"gridData\":{\"x\":32,\"y\":20,\"w\":16,\"h\":15,\"i\":\"616b143d-74e9-4dac-98ba-5849536f0fba\"},\"panelIndex\":\"616b143d-74e9-4dac-98ba-5849536f0fba\",\"embeddableConfig\":{},\"panelRefName\":\"panel_5\"},{\"gridData\":{\"x\":0,\"y\":35,\"w\":24,\"h\":11,\"i\":\"cfa82f27-1b8d-49ba-a7b9-d8809d3b258c\"},\"panelIndex\":\"cfa82f27-1b8d-49ba-a7b9-d8809d3b258c\",\"embeddableConfig\":{},\"panelRefName\":\"panel_6\"},{\"gridData\":{\"x\":24,\"y\":35,\"w\":24,\"h\":11,\"i\":\"135d13eb-aab6-43ca-9029-7d26e91d90e3\"},\"panelIndex\":\"135d13eb-aab6-43ca-9029-7d26e91d90e3\",\"embeddableConfig\":{},\"panelRefName\":\"panel_7\"},{\"gridData\":{\"x\":0,\"y\":46,\"w\":24,\"h\":11,\"i\":\"28a77de1-9110-49e8-b273-724f880b1653\"},\"panelIndex\":\"28a77de1-9110-49e8-b273-724f880b1653\",\"embeddableConfig\":{},\"panelRefName\":\"panel_8\"},{\"gridData\":{\"x\":24,\"y\":46,\"w\":24,\"h\":11,\"i\":\"80ece867-cf23-4935-bfbc-430afa51bcca\"},\"panelIndex\":\"80ece867-cf23-4935-bfbc-430afa51bcca\",\"embeddableConfig\":{},\"panelRefName\":\"panel_9\"},{\"gridData\":{\"x\":0,\"y\":57,\"w\":24,\"h\":11,\"i\":\"2ba970aa-c9c4-491b-bdd3-c1b1ee9bc8d3\"},\"panelIndex\":\"2ba970aa-c9c4-491b-bdd3-c1b1ee9bc8d3\",\"embeddableConfig\":{},\"panelRefName\":\"panel_10\"},{\"gridData\":{\"x\":24,\"y\":57,\"w\":24,\"h\":11,\"i\":\"f2e1b6ab-ddf7-492e-aaca-9460f11aa4aa\"},\"panelIndex\":\"f2e1b6ab-ddf7-492e-aaca-9460f11aa4aa\",\"embeddableConfig\":{},\"panelRefName\":\"panel_11\"},{\"gridData\":{\"x\":0,\"y\":68,\"w\":24,\"h\":11,\"i\":\"dd14182d-d8b9-47f2-bf36-6cba3b09586c\"},\"panelIndex\":\"dd14182d-d8b9-47f2-bf36-6cba3b09586c\",\"embeddableConfig\":{},\"panelRefName\":\"panel_12\"},{\"gridData\":{\"x\":24,\"y\":68,\"w\":24,\"h\":11,\"i\":\"a47f9333-52b7-49b7-8cac-f470cf405131\"},\"panelIndex\":\"a47f9333-52b7-49b7-8cac-f470cf405131\",\"embeddableConfig\":{},\"panelRefName\":\"panel_13\"}]","timeRestore":false,"title":"[Monitoring] Index monitoring Dashboard","version":1},"id":"524eb000-a5f2-11ec-9a68-ada9d754c566","references":[{"id":"b2811c70-a5f1-11ec-9a68-ada9d754c566","name":"panel_0","type":"visualization"},{"id":"de4f8ab0-a5f8-11ec-9a68-ada9d754c566","name":"panel_1","type":"visualization"},{"id":"811df7a0-a5f8-11ec-9a68-ada9d754c566","name":"panel_2","type":"visualization"},{"id":"eea89780-664b-11ed-8cd7-973626cf6f70","name":"panel_3","type":"visualization"},{"id":"cfbb4e20-664c-11ed-8cd7-973626cf6f70","name":"panel_4","type":"visualization"},{"id":"c7f72ae0-664e-11ed-8cd7-973626cf6f70","name":"panel_5","type":"visualization"},{"id":"943b3e00-a5ef-11ec-9a68-ada9d754c566","name":"panel_6","type":"visualization"},{"id":"ab503550-a5ef-11ec-9a68-ada9d754c566","name":"panel_7","type":"visualization"},{"id":"c78119a0-a5f5-11ec-9a68-ada9d754c566","name":"panel_8","type":"visualization"},{"id":"225f6020-a5f1-11ec-9a68-ada9d754c566","name":"panel_9","type":"visualization"},{"id":"17d49220-662a-11ed-8cd7-973626cf6f70","name":"panel_10","type":"visualization"},{"id":"c8109100-6627-11ed-8cd7-973626cf6f70","name":"panel_11","type":"visualization"},{"id":"45d571c0-6626-11ed-8cd7-973626cf6f70","name":"panel_12","type":"visualization"},{"id":"3ae5d820-6628-11ed-8cd7-973626cf6f70","name":"panel_13","type":"visualization"}],"type":"dashboard","updated_at":"2022-12-01T12:41:01.165Z","version":"WzIxOCwyXQ=="} {"exportedCount":16,"missingRefCount":0,"missingReferences":[]}
  • 启用索引监控 执行如下命令,打开索引监控开关。 PUT _cluster/settings { "persistent": { "css.monitoring.index.enabled": "true" } } 当需要监控单个索引时,可以执行如下命令。 PUT _cluster/settings { "persistent": { "css.monitoring.index.enabled": "true", "css.monitoring.index.interval": "30s", "css.monitoring.index.indices": ["index_name"], "css.monitoring.history.duration": "3d" } } 表1 配置项说明 配置项 类型 说明 css.monitoring.index.enabled Boolean 索引监控的控制开关,设置为true将打开集群索引监控功能。 默认值:false css.monitoring.index.interval Time 索引监控采集数据的时间间隔。 最小值:1s 默认值:10s css.monitoring.index.indices String 索引监控的索引名称,默认监控所有索引,可以配置监控单个索引,也可以配置通配符监控某一类索引。 例如: “"css.monitoring.index.indices": ["index_name"]”表示只监控“index_name”索引。 “"css.monitoring.index.indices": ["log_*"]”表示监控以“log_”开头的索引。 “"css.monitoring.index.indices": ["index1", "index2"]”表示监控“index1”和“index2”两个索引。 默认值:*(表示监控所有索引) css.monitoring.history.duration Time 监控数据存储的索引保留时间,默认保存一周。 最小值:1d 默认值:7d
  • 规划集群安全模式 表9 集群类型介绍 集群类型 集群描述 适用场景 非安全集群 非安全模式的集群 非安全模式的集群无需安全认证即可访问,采用HTTP协议明文传输数据。建议确认访问环境的安全性,勿将访问接口暴露到公网环境上。 适合内网业务,用于测试场景。 优点:简单,接入集群容易。 缺点:安全性差,任何人都可以访问集群。 安全集群 安全模式+HTTP协议的集群 安全模式的集群需要通过安全认证才能访问,且支持对集群进行授权、加密等功能。采用HTTP协议明文传输数据。建议确认访问环境的安全性,勿将访问接口暴露到公网环境上。 可以实现用户权限隔离,适用于对集群性能敏感的场景。 优点:访问集群需要安全认证,提升了集群安全性。通过HTTP协议访问集群又能保留集群的高性能。 缺点:无法公网访问集群。 安全模式+HTTPS协议的集群 安全模式的集群需要通过安全认证才能访问,且支持对集群进行授权、加密等功能。采用HTTPS协议进行通信加密,使数据更安全。 有非常高的安全要求,且需要公网访问集群的场景。 优点:访问集群需要安全认证,提升了集群安全性,且HTTPS协议的通讯加密可以实现集群公网访问功能。 缺点:通过HTTPS协议访问集群,集群的读取性能相对HTTP协议来说,会下降20%左右。 当访问安全模式的集群时,需要输入用户名和密码通过安全认证才能访问。 CS S服务支持以下两类用户的安全认证: 集群的管理员:管理员账户名默认为admin,密码为创建集群时设置的管理员密码。 集群的用户:集群的管理员通过Kibana创建集群的用户和密码。创建方式请参见创建Elasticsearch集群用户并授权使用。 当集群创建完成后,支持切换安全模式,具体操作请参见更改Elasticsearch集群安全模式。 切换安全模式包含三大场景:非安全模式切换为安全模式、安全模式切换为非安全模式、安全模式的协议切换。
  • 规划虚拟私有云和子网 CSS服务支持在非共享VPC和共享VPC内创建集群。 共享VPC和非共享VPC相比,有如下优势: 在一个账号内统一创建资源,并将资源共享给其他账号,其他账号无需创建重复资源,可以精简资源数量以及网络架构,提升管理效率并节约成本。 比如不同账号下的VPC网络互通需要建立对等连接,使用共享VPC后,则不同账号用户可以在同一个VPC创建资源,免去了对等连接配置,有效的简化组网结构。 在一个账号内统一管理运维资源,便于企业集中配置业务安全策略,并且利于对资源使用情况的监控和审计,支撑业务的安全诉求。 当选择使用共享VPC创建集群时,需要提前完成共享VPC子网的创建,操作流程请参见表8。有关共享VPC的使用限制及详细操作指导等信息可以参考共享VPC概述。 表8 共享子网创建流程说明 方法 说明 操作指导 方法A 通过 RAM 管理控制台,所有者创建共享,将子网共享给使用者。配置如下: 选择共享子网。 为共享子网选择权限,即指定使用者对该共享子网具备的权限。 CSS服务在共享VPC中创建集群需要选择权限:default vpc subnet statement。 指定共享子网的使用者,可以指定多个。 共享创建完成后,通过RAM管理控制台,使用者可以选择接受或者拒绝共享申请。 使用者接受共享申请,子网共享成功。 如果后续使用者不再需要使用该共享子网,可以退出该共享。 使用者拒绝共享申请,子网共享失败。 创建共享 接受/拒绝共享邀请 退出共享 方法B 通过RAM管理控制台,所有者创建共享,将子网共享给使用者。配置如下: 选择共享子网。 为共享子网选择权限,即指定使用者对该共享子网具备的权限。 CSS服务在共享VPC中创建集群需要选择权限:default vpc subnet statement。 指定共享子网的使用者,可以指定多个。 通过VPC管理控制台,选择上一步中已创建的共享,将子网加入到该共享内。 共享创建完成后,通过RAM管理控制台,使用者可以选择接受或者拒绝共享申请。 使用者接受共享申请,子网共享成功。 如果后续使用者不再需要使用该共享子网,可以退出该共享。 使用者拒绝共享申请,子网共享失败。 创建共享 将VPC子网共享给其他账号 接受/拒绝共享邀请 退出共享
  • 规划节点数量 创建集群时,集群的节点数量应当基于业务性能需求和预期负载进行规划。表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 节点数量的取值说明 节点类型 取值范围 数据节点 集群没有Master节点时:1~32 集群有Master节点时:1~200 Master节点 3、5、7、9(必须是3~9之间的奇数) Client节点 1~32 冷数据节点 1~32
  • 规划索引分片数 在使用集群的过程时,特别是在进行数据导入操作之前,建议根据具体的业务需求,提前对集群的数据结构和分布进行规划。这包括合理设计索引和确定分片数量。为了确保集群在性能和可扩展性方面达到最佳状态,以下是一些建议。 单个分片大小:建议将每个分片的大小控制在10GB到50GB之间。这有助于在存储效率和查询性能之间取得平衡。 集群总分片数量:为了管理方便和避免过度扩展,建议将集群的总分片数量控制在3万以内。这有助于保持集群的稳定性和响应速度。 内存与分片比例:在资源分配上,建议每1GB的内存空间放置20到30个分片。这样可以确保每个分片都有足够的内存资源进行索引和查询操作。 单节点分片数:为了避免单点过载,建议每个节点上的分片数量不超过1000个。这有助于避免节点资源竞争,确保节点的稳定运行。 索引分片与节点数的关系:对于单个索引,建议其分片数与集群的节点数保持一致,或者设置为节点数的整数倍。这有助于实现负载均衡,优化查询和索引的性能。 通过以上建议,可以更有效地规划和管理CSS集群的索引分片,从而提升集群的整体性能和可维护性。
  • 规划节点类型 在Elasticsearch集群中,合理规划不同节点类型对于优化性能和资源利用率至关重要。在创建集群时,应根据业务需求、查询负载、数据增长模式和性能目标来确定添加哪些类型的节点,以实现合适的集群性能和资源管理。表4是介绍了不同节点类型的适用场景,建议用户根据具体的业务需求和性能预期来选择是否启用该类节点。 如果创建集群时未启用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) 冷数据节点用于存储对查询时延要求不高,但数据量较大的历史数据,是管理大规模数据集和优化存储成本的有效方式。 需要存储大量历史数据:当需要存储大量不常访问但对分析有用的历史数据时,使用冷数据节点可以提供成本效益较高的存储解决方案。 需要优化热数据性能:通过将旧数据迁移到冷数据节点,可以减少对热数据节点的存储压力,从而优化热数据的查询和写入性能。 对查询时延要求不高:对于那些查询频率不高且可以容忍较高查询时延的数据,冷数据节点是合适的存储选择。 追求成本效益:冷数据节点通常采用具有较大磁盘容量的规格,这有助于降低存储成本,同时满足大规模数据存储需求。
  • 规划集群版本 选择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集群索引监控
  • 规划集群可用区 为防止数据丢失,并确保在服务中断情况下能降低集群的停机时间,从而增强集群的高可用性,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的场景,目的是为了解决当前可用区资源不足的问题。
  • 约束限制 集群的节点存储容量只支持扩容不支持缩容,请基于业务量合理选择节点存储容量。 包周期集群不支持同时扩容“节点数量”和“节点存储容量”。 集群的Master节点和Client节点的存储容量不支持扩容。 本地盘类型的数据节点不支持扩容节点存储容量。 扩容集群的节点数量时,不同节点类型的取值范围请参见表3。 表2 节点数量的取值说明 节点类型 取值范围 数据节点 集群没有Master节点时:1~32 集群有Master节点时:1~200 Master节点 3、5、7、9(必须是3~9之间的奇数) Client节点 1~32 冷数据节点 1~32
  • 变更影响 在扩容前,您需要了解以下关键影响和操作建议,以便合理规划变更,最小化业务影响。 扩容节点存储容量(纵向扩展)对业务没有影响,而增加节点数量或增加节点类型(横向扩展)可能产生以下影响: 性能影响 扩容节点不会中断业务,但是扩容过程中数据分片需要均衡到新节点以分摊负载。此过程会消耗IO性能,建议在业务低峰期执行。 建议在业务低峰期提高数据迁移速率以缩短任务耗时,并在业务高峰期前降低迁移速率以减轻对集群性能的影响。数据迁移速率由“indices.recovery.max_bytes_per_sec”参数决定,该参数值默认是“CPU核数 x 32MB”(如4核CPU默认128MB)。该参数取值范围为40MB至1000MB,可根据业务需求调整。 PUT /_cluster/settings { "transient": { "indices.recovery.max_bytes_per_sec": "1000MB" } } 变更过程特性 扩容任务一旦启动就无法中止,直到任务成功或失败才会结束。
  • 规划索引分片数 在使用集群的过程时,特别是在进行数据导入操作之前,建议根据具体的业务需求,提前对集群的数据结构和分布进行规划。这包括合理设计索引和确定分片数量。为了确保集群在性能和可扩展性方面达到最佳状态,以下是一些建议。 单个分片大小:建议将每个分片的大小控制在10GB到50GB之间。这有助于在存储效率和查询性能之间取得平衡。 集群总分片数量:为了管理方便和避免过度扩展,建议将集群的总分片数量控制在3万以内。这有助于保持集群的稳定性和响应速度。 内存与分片比例:在资源分配上,建议每1GB的内存空间放置20到30个分片。这样可以确保每个分片都有足够的内存资源进行索引和查询操作。 单节点分片数:为了避免单点过载,建议每个节点上的分片数量不超过1000个。这有助于避免节点资源竞争,确保节点的稳定运行。 索引分片与节点数的关系:对于单个索引,建议其分片数与集群的节点数保持一致,或者设置为节点数的整数倍。这有助于实现负载均衡,优化查询和索引的性能。 通过以上建议,可以更有效地规划和管理CSS集群的索引分片,从而提升集群的整体性能和可维护性。
  • 规划集群安全模式 表9 集群类型介绍 集群类型 集群描述 适用场景 非安全集群 非安全模式的集群 非安全模式的集群无需安全认证即可访问,采用HTTP协议明文传输数据。建议确认访问环境的安全性,勿将访问接口暴露到公网环境上。 适合内网业务,用于测试场景。 优点:简单,接入集群容易。 缺点:安全性差,任何人都可以访问集群。 安全集群 安全模式+HTTP协议的集群 安全模式的集群需要通过安全认证才能访问,且支持对集群进行授权、加密等功能。采用HTTP协议明文传输数据。建议确认访问环境的安全性,勿将访问接口暴露到公网环境上。 可以实现用户权限隔离,适用于对集群性能敏感的场景。 优点:访问集群需要安全认证,提升了集群安全性。通过HTTP协议访问集群又能保留集群的高性能。 缺点:无法公网访问集群。 安全模式+HTTPS协议的集群 安全模式的集群需要通过安全认证才能访问,且支持对集群进行授权、加密等功能。采用HTTPS协议进行通信加密,使数据更安全。 有非常高的安全要求,且需要公网访问集群的场景。 优点:访问集群需要安全认证,提升了集群安全性,且HTTPS协议的通讯加密可以实现集群公网访问功能。 缺点:通过HTTPS协议访问集群,集群的读取性能相对HTTP协议来说,会下降20%左右。 当访问安全模式的集群时,需要输入用户名和密码通过安全认证才能访问。CSS服务支持以下两类用户的安全认证: 集群的管理员:管理员账户名默认为admin,密码为创建集群时设置的管理员密码。 集群的用户:集群的管理员通过Kibana创建集群的用户和密码。创建方式请参见创建OpenSearch集群用户并授权使用。 当集群创建完成后,支持切换安全模式,具体操作请参见更改OpenSearch集群安全模式。 切换安全模式包含三大场景:非安全模式切换为安全模式、安全模式切换为非安全模式、安全模式的协议切换。
  • 规划虚拟私有云和子网 CSS服务支持在非共享VPC和共享VPC内创建集群。 共享VPC和非共享VPC相比,有如下优势: 在一个账号内统一创建资源,并将资源共享给其他账号,其他账号无需创建重复资源,可以精简资源数量以及网络架构,提升管理效率并节约成本。 比如不同账号下的VPC网络互通需要建立对等连接,使用共享VPC后,则不同账号用户可以在同一个VPC创建资源,免去了对等连接配置,有效的简化组网结构。 在一个账号内统一管理运维资源,便于企业集中配置业务安全策略,并且利于对资源使用情况的监控和审计,支撑业务的安全诉求。 当选择使用共享VPC创建集群时,需要提前完成共享VPC子网的创建,操作流程请参见表8。有关共享VPC的使用限制及详细操作指导等信息可以参考共享VPC概述。 表8 共享子网创建流程说明 方法 说明 操作指导 方法A 通过RAM管理控制台,所有者创建共享,将子网共享给使用者。配置如下: 选择共享子网。 为共享子网选择权限,即指定使用者对该共享子网具备的权限。 CSS服务在共享VPC中创建集群需要选择权限:default vpc subnet statement。 指定共享子网的使用者,可以指定多个。 共享创建完成后,通过RAM管理控制台,使用者可以选择接受或者拒绝共享申请。 使用者接受共享申请,子网共享成功。 如果后续使用者不再需要使用该共享子网,可以退出该共享。 使用者拒绝共享申请,子网共享失败。 创建共享 接受/拒绝共享邀请 退出共享 方法B 通过RAM管理控制台,所有者创建共享,将子网共享给使用者。配置如下: 选择共享子网。 为共享子网选择权限,即指定使用者对该共享子网具备的权限。 CSS服务在共享VPC中创建集群需要选择权限:default vpc subnet statement。 指定共享子网的使用者,可以指定多个。 通过VPC管理控制台,选择上一步中已创建的共享,将子网加入到该共享内。 共享创建完成后,通过RAM管理控制台,使用者可以选择接受或者拒绝共享申请。 使用者接受共享申请,子网共享成功。 如果后续使用者不再需要使用该共享子网,可以退出该共享。 使用者拒绝共享申请,子网共享失败。 创建共享 将VPC子网共享给其他账号 接受/拒绝共享邀请 退出共享
  • 规划节点类型 在OpenSearch集群中,合理规划不同节点类型对于优化性能和资源利用率至关重要。在创建集群时,应根据业务需求、查询负载、数据增长模式和性能目标来确定添加哪些类型的节点,以实现合适的集群性能和资源管理。表4是介绍了不同节点类型的适用场景,建议用户根据具体的业务需求和性能预期来选择是否启用该类节点。 如果创建集群时未启用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) 冷数据节点用于存储对查询时延要求不高,但数据量较大的历史数据,是管理大规模数据集和优化存储成本的有效方式。 需要存储大量历史数据:当需要存储大量不常访问但对分析有用的历史数据时,使用冷数据节点可以提供成本效益较高的存储解决方案。 需要优化热数据性能:通过将旧数据迁移到冷数据节点,可以减少对热数据节点的存储压力,从而优化热数据的查询和写入性能。 对查询时延要求不高:对于那些查询频率不高且可以容忍较高查询时延的数据,冷数据节点是合适的存储选择。 追求成本效益:冷数据节点通常采用具有较大磁盘容量的规格,这有助于降低存储成本,同时满足大规模数据存储需求。
  • 规划节点数量 创建集群时,集群的节点数量应当基于业务性能需求和预期负载进行规划。表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 节点数量的取值说明 节点类型 取值范围 数据节点 集群没有Master节点时:1~32 集群有Master节点时:1~200 Master节点 3、5、7、9(必须是3~9之间的奇数) Client节点 1~32 冷数据节点 1~32
  • 规划集群版本 选择OpenSearch集群版本时,建议综合考虑业务需求、特性支持、性能改进、安全性更新和长期支持等因素,以确保选择的版本能够满足当前和未来的业务发展,同时提供稳定和安全的运行环境。 表3 集群版本支持情况 特性 OpenSearch 1.3.6 OpenSearch 2.17.1 相关文档 向量检索 √ x 配置OpenSearch集群向量检索 存算分离 √ x 配置OpenSearch集群存算分离 切换冷热数据 √ √ 切换OpenSearch集群冷热数据 导入性能增强 √ x 增强OpenSearch集群数据导入性能
  • 规划集群可用区 为防止数据丢失,并确保在服务中断情况下能降低集群的停机时间,从而增强集群的高可用性,CSS服务支持跨可用区(即多可用区)部署。用户可以在同一个区域内选择两个或三个不同的可用区进行集群部署。 在创建集群时,如果用户选择了两个或三个可用区,CSS服务将自动开启跨AZ的高可用性特性,确保节点在这些可用区内均匀分配。系统均匀分配的节点满足各个AZ之间节点数量的差小于等于1,具体的节点分布情况,包括不同数量的节点如何在各个可用区中分布,可以参考表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个。由于OpenSearch默认副本数为1个,因此如果您对读性能没有特殊要求,可以直接使用默认值。 在跨三个可用区部署中,为了保证其中任意一个AZ不可用时,剩余的AZ可以继续提供服务,因此索引的副本数至少要为1个。为了提高集群的查询能力,也可以设置更多的副本。由于OpenSearch默认的副本数为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 无业务中断时间。 当集群创建完成后,支持切换可用区,具体操作请参见切换OpenSearch集群可用区。 切换可用区包含两大场景:可用区高可用改造和可用区平移切换。 可用区高可用改造:适用于单AZ改造成两AZ、单AZ改造成三AZ或两AZ改造成三AZ的场景,目的是为了提升集群的高可用性。 可用区平移切换:适用于从一个AZ完全迁移到另一个AZ的场景,目的是为了解决当前可用区资源不足的问题。
  • 约束限制 当集群的网络配置中,“虚拟私有云”选择的是共享VPC,“子网”选择的是共享VPC下的子网,则该集群不支持配置终端节点服务。 创建终端节点需要有相关的权限,请参考 VPC终端节点 权限管理。 公网访问和终端节点服务使用的是同一个负载均衡。当集群开启了公网访问白名单,由于白名单是作用在负载均衡上面,将会同时限制公网访问集群和内网通过VPCEP访问集群的IP地址。此时需要在公网访问白名单中添加一个网络白名单“198.19.128.0/17”,通过该白名单用来放通经过VPCEP的流量。 终端节点服务开通后,在内网通过终端节点IP或内网 域名 访问CSS将不受集群安全组规则限制,需要配合终端节点本身的白名单功能进行访问控制,操作指导请参见设置终端节点的访问控制。
  • 查询存储冷数据的OBS实时速率 仅2023年2月之后创建的、版本为7.6.2或7.10.2的Elasticsearch集群才支持查询存储冷数据的OBS实时速率。 为了更清晰的了解到存算分离的插件在OBS中的使用情况,CSS服务新增了OBS实时速率的统计接口,并且将实时速率记录到系统索引“.freeze_obs_rate-YYYY.mm.dd”中。 OBS实时速率的计算方式:每5秒计算一次,查询前5秒内的平均OBS操作速率。 系统索引“.freeze_obs_rate-YYYY.mm.dd”用于存放OBS操作实时速率和OBS操作数据,便于了解存储冷数据的OBS的操作趋势。该索引的默认保留时间是30天。 查询存储冷数据的OBS实时速率。 执行如下命令,查询所有节点中存储冷数据的OBS实时速率。 GET _frozen_stats/obs_rate 执行如下命令,查询指定节点中存储冷数据的OBS实时速率。 GET _frozen_stats/obs_rate/{nodeId} “{nodeId}”为节点ID。 响应示例: { "_nodes" : { "total" : 1, "successful" : 1, "failed" : 0 }, "cluster_name" : "elasticsearch", "nodes" : { "dflDvcSwTJ-fkiIlT2zE3A" : { "name" : "node-1", "transport_address" : "127.0.0.1:9300", "host" : "127.0.0.1", "ip" : "127.0.0.1", "update_time" : 1671777600482, // 当前统计值的更新时间。 "obs_rate" : { "list_op_rate" : 0.0, // obs list操作的速率,单位:次/秒。 "get_meta_op_rate" : 0.0, // obs get meta操作的速率,单位:次/秒。 "get_obj_op_rate" : 0.0, // obs get操作的速率,单位:次/秒。 "put_op_rate" : 0.0, // obs put操作的速率,单位:次/秒。 "obs_total_op_rate" : 0.0, // obs所有操作的速率,单位:次/秒。 "obs_upload_rate" : "0.0 MB/s", // obs上传数据的速率,MB/秒。 "obs_download_rate" : "0.0 MB/s" // obs下载数据的速率,MB/秒。 } } } } 修改存储OBS实时速率的索引“.freeze_obs_rate-YYYY.mm.dd”的保留时间。索引的默认保留时间是30天。 执行如下命令,将索引保留时间改成7天。 PUT _cluster/settings { "persistent": { "low_cost.obs_rate_index.evict_time": "7d" } } 表17 配置项说明 配置项 类型 scope 是否可动态修改 说明 low_cost.obs_rate_index.evict_time String node 是 用于控制索引“.freeze_obs_rate-YYYY.mm.dd”的保留时间。 取值范围:1d~365d。 默认值:30d。 单位:天。
  • 查看归档索引任务 执行以下命令,查看归档索引任务、恢复归档索引任务的状态。 GET _freeze_archive_progress/{task_uuid} 表12 请求参数说明 参数名 说明 task_uuid 归档索引任务或恢复归档索引任务的ID,该ID由归档已冻结索引任务或恢复已归档索引任务时获取。 返回结果如下: { "id" : "archive:XJTn3hsHSaCjPnvIgv-FFw", "indices" : [ { "index_name" : "log-1017", // 索引名字 "index_uuid" : "HXjhvo9QTwSvjzGBBZBCTw" // 索引ID } ], "stage" : "ARCHIVE_DONE", // 当前状态 "type" : "archive", // 类型,可能为archive(归档)或restore(恢复归档) "node" : "css-d0e8-ess-esn-1-1", // 执行任务的节点名 "start" : 1729222604074, // 开始时间 "time_in_millis" : 788, // 总耗时 "files" : { "total" : 30, // 总文件数 "success" : 30, // 成功文件数 "incremental" : 0, // 多次执行时,部分文件可能已经处于归档状态,此字段标识这样的文件个数 "bytes" : 0, // 所有文件字节数,只有恢复归档索引时才会有该值 "fail" : 0 // 失败文件数 } }
  • 查询存储在OBS中冷数据的缓存状态 冻结索引之后,当冷数据第一次被查询时,系统会自动进行数据缓存,集群支持查询存储在OBS中冷数据的缓存状态。当需要调试集群性能时,也可以重置缓存状态。 查询节点中存储在OBS中冷数据的缓存状态。 执行如下命令,查询所有节点中冷数据的缓存信息。 GET _frozen_stats 执行如下命令,查询指定节点中冷数据的缓存信息。 GET _frozen_stats/${node_id} 表15 请求参数说明 参数名 说明 node_id 节点ID。 返回结果如下: { "_nodes" : { "total" : 3, // 所有节点数量 "successful" : 3, // 成功的节点数量 "failed" : 0 // 失败的节点数量 }, "cluster_name" : "css-zzz1", // 集群名称 "nodes" : { "7uwKO38RRoaON37YsXhCYw" : { "name" : "css-zzz1-ess-esn-2-1", // 节点名称 "transport_address" : "10.0.0.247:9300", // 节点transport连接地址 "host" : "10.0.0.247", // 节点host "ip" : "10.0.0.247", // 节点IP "block_cache" : { "default" : { "type" : "memory", // cache类型,memory表示内存cache "block_cache_capacity" : 8192, // cache容量 "block_cache_blocksize" : 8192, // cache中单个block大小,单位为bytes,如此处表示8k "block_cache_size" : 12, // cache已被占用的大小 "block_cache_hit" : 14, // cache命中数 "block_cache_miss" : 0, // cache未命中数 "block_cache_eviction" : 0, // cache被逐出次数 "block_cache_store_fail" : 0 // 如果cache满了,可能导致新的cache存储失败,此处表示存储失败的次数 } }, "obs_stats" : { "list" : { "obs_list_count" : 17, // 调用OBS list接口的次数 "obs_list_ms" : 265, // 调用OBS list接口的总耗时 "obs_list_avg_ms" : 15 // 调用OBS list接口的平均耗时 }, "get_meta" : { "obs_get_meta_count" : 79, // 调用OBS 获取元数据接口的次数 "obs_get_meta_ms" : 183, // 调用OBS 获取元数据接口的总耗时 "obs_get_meta_avg_ms" : 2 // 调用OBS 获取元数据接口的平均耗时 }, "get_obj" : { "obs_get_obj_count" : 12, // 调用OBS getObject接口的次数 "obs_get_obj_ms" : 123, // 调用OBS getObject接口的总耗时 "obs_get_obj_avg_ms" : 10 // 调用OBS getObject接口的平均耗时 }, "put_obj" : { "obs_put_obj_count" : 12, // 调用OBS putObject接口的总次数 "obs_put_obj_ms" : 2451, // 调用OBS putObject接口的总耗时 "obs_put_obj_avg_ms" : 204 // 调用OBS putObject接口的平均耗时 }, "obs_op_total" : { "obs_op_total_ms" : 3022, // 调用OBS接口的总耗时 "obs_op_total_count" : 120, // 调用OBS接口的总次数 "obs_op_avg_ms" : 25 // 调用OBS接口的平均耗时 } }, "reader_cache" : { "hit_count" : 0, "miss_count" : 1, "load_success_count" : 1, "load_exception_count" : 0, "total_load_time" : 291194714, "eviction_count" : 0 } }, "73EDpEqoQES749umJqxOzQ" : { "name" : "css-zzz1-ess-esn-3-1", "transport_address" : "10.0.0.201:9300", "host" : "10.0.0.201", "ip" : "10.0.0.201", "block_cache" : { "default" : { "type" : "memory", "block_cache_capacity" : 8192, "block_cache_blocksize" : 8192, "block_cache_size" : 12, "block_cache_hit" : 14, "block_cache_miss" : 0, "block_cache_eviction" : 0, "block_cache_store_fail" : 0 } }, "obs_stats" : { "list" : { "obs_list_count" : 17, "obs_list_ms" : 309, "obs_list_avg_ms" : 18 }, "get_meta" : { "obs_get_meta_count" : 79, "obs_get_meta_ms" : 216, "obs_get_meta_avg_ms" : 2 }, "get_obj" : { "obs_get_obj_count" : 12, "obs_get_obj_ms" : 140, "obs_get_obj_avg_ms" : 11 }, "put_obj" : { "obs_put_obj_count" : 12, "obs_put_obj_ms" : 1081, "obs_put_obj_avg_ms" : 90 }, "obs_op_total" : { "obs_op_total_ms" : 1746, "obs_op_total_count" : 120, "obs_op_avg_ms" : 14 } }, "reader_cache" : { "hit_count" : 0, "miss_count" : 1, "load_success_count" : 1, "load_exception_count" : 0, "total_load_time" : 367179751, "eviction_count" : 0 } }, "EF8WoLCUQbqJl1Pkqo9-OA" : { "name" : "css-zzz1-ess-esn-1-1", "transport_address" : "10.0.0.18:9300", "host" : "10.0.0.18", "ip" : "10.0.0.18", "block_cache" : { "default" : { "type" : "memory", "block_cache_capacity" : 8192, "block_cache_blocksize" : 8192, "block_cache_size" : 12, "block_cache_hit" : 14, "block_cache_miss" : 0, "block_cache_eviction" : 0, "block_cache_store_fail" : 0 } }, "obs_stats" : { "list" : { "obs_list_count" : 17, "obs_list_ms" : 220, "obs_list_avg_ms" : 12 }, "get_meta" : { "obs_get_meta_count" : 79, "obs_get_meta_ms" : 139, "obs_get_meta_avg_ms" : 1 }, "get_obj" : { "obs_get_obj_count" : 12, "obs_get_obj_ms" : 82, "obs_get_obj_avg_ms" : 6 }, "put_obj" : { "obs_put_obj_count" : 12, "obs_put_obj_ms" : 879, "obs_put_obj_avg_ms" : 73 }, "obs_op_total" : { "obs_op_total_ms" : 1320, "obs_op_total_count" : 120, "obs_op_avg_ms" : 11 } }, "reader_cache" : { "hit_count" : 0, "miss_count" : 1, "load_success_count" : 1, "load_exception_count" : 0, "total_load_time" : 235706838, "eviction_count" : 0 } } } } 执行如下命令,可以重置缓存状态。 POST _frozen_stats/reset 此命令主要用于调试性能问题,例如重置缓存状态后再次执行查询可以清晰看到本次查询的缓存命令情况。在业务运行阶段不需要执行此命令。 返回结果如下: { "_nodes" : { "total" : 1, "successful" : 1, "failed" : 0 }, "cluster_name" : "Es-0325-007_01", "nodes" : { "mqTdk2YRSPyOSXfesREFSg" : { "result" : "ok" } } }
  • 提升冷数据的查询性能 仅2023年2月之后创建的、版本为7.6.2或7.10.2的Elasticsearch集群才支持提升冷数据的查询性能。 在Kibana的Discover页面首次查询冷数据时,由于此时无任何缓存,导致所有数据均需要从OBS上获取,当命中的数据较多时,需要耗费大量的时间从OBS上获取对应的时间字段以及文件元数据。如果将这一部分数据直接缓存在本地,即可大幅提升查询性能,解决Discover页面首次查询慢的问题。 云搜索 服务就是通过冷数据的本地缓存,实现冷数据的查询性能提升。本地缓存配置是预置的,用户可以基于业务场景修改配置,也可以查询、了解本地缓存信息。 修改冷数据的本地缓存配置。 表16 本地缓存配置项说明 配置项 类型 scope 是否可动态修改 说明 low_cost.local_cache.max.capacity Integer node 是 节点上,能够打开的冷数据缓存的最大数量。(每个shard对应一个缓存对象) 取值范围:10~5000 默认值:500 当堆内存使用率一直很高时,可以尝试降低该值。 当查询冷数据本地缓存的相关统计指标中load_overflow_count数值一直持续快速增加时,建议调大该值。 index.low_cost.local_cache.threshold Integer index 是 启用冷数据本地缓存的阈值。 当date类型字段的占比小于此值时,启用冷数据本地缓存date类型字段。否则不使用。 如果当前索引的date类型字段占据当前索引的绝大部分数据量,则不建议使用此功能。 单位:% 取值范围:0~100 默认值:50 index.low_cost.local_cache.evict_time 字符串 index 是 冷数据的本地缓存的淘汰时间,当缓存时间大于该值,缓存将被删除。根据index.frozen_date(冻结成功的时间)判定,当索引无index.frozen_date时,则根据索引创建时间判定。 单位:天 取值范围:1d~365d 默认值:30d 建议根据磁盘用量调整淘汰时长,节省磁盘空间。 执行如下命令,修改“low_cost.local_cache.max.capacity”。 PUT _cluster/settings { "persistent": { "low_cost.local_cache.max.capacity":1000 } } 执行如下命令,修改“index.low_cost.local_cache.threshold”。 PUT es_write_pref2-00000000021/_settings { "index.low_cost.local_cache.threshold":20 } 执行如下命令,修改“index.low_cost.local_cache.evict_time”。 PUT es_write_pref2-00000000021/_settings { "index.low_cost.local_cache.evict_time":"7d" } 查询冷数据的本地缓存信息。 执行如下命令,查询所有节点中冷数据的本地缓存相关指标。 GET /_frozen_stats/local_cache 执行如下命令,查询指定节点中冷数据的本地缓存相关指标。 GET /_frozen_stats/local_cache/{nodeId} “{nodeId}”为节点ID。 返回结果如下: { "_nodes" : { "total" : 1, "successful" : 1, "failed" : 0 }, "cluster_name" : "elasticsearch", "nodes" : { "6by3lPy1R3m55Dcq3liK8Q" : { "name" : "node-1", "transport_address" : "127.0.0.1:9300", "host" : "127.0.0.1", "ip" : "127.0.0.1", "local_cache" : { "get_stats" : { "get_total_count" : 562, //从冷数据本地缓存查询数据的总次数 "get_hit_count" : 562, //从冷数据本地缓存查询数据命中的次数 "get_miss_count" : 0, //从冷数据本地缓存查询数据未命中的次数 "get_total_ns" : 43849200, //从冷数据本地缓存查询数据的总时长 "get_avg_ns" : 78023 //从冷数据本地缓存查询数据的平均时长 }, "load_stats" : { "load_count" : 2, //加载冷数据本地缓存的次数 "load_total_ms" : 29, //加载冷数据本地缓存的总时长 "load_avg_ms" : 14, //加载冷数据本地缓存的平均时长 "load_fail_count" : 0, //加载冷数据本地缓存的失败次数 "load_overflow_count" : 0 //加载冷数据本地缓存时超过缓存池的次数 }, "reload_stats" : { "reload_count" : 0, //重新生成冷数据本地缓存的次数 "reload_total_ms" : 0, //重新生成冷数据本地缓存的总时长 "reload_avg_ms" : 0, //重新生成冷数据本地缓存的平均时长 "reload_fail_count" : 0 //重新生成冷数据本地缓存的失败次数 }, "init_stats" : { "init_count" : 0, //初始化冷数据本地缓存的次数 "init_total_ms" : 0, //初始化冷数据本地缓存的总时长 "init_avg_ms" : 0, //初始化冷数据本地缓存的平均时长 "init_fail_count" : 0 //初始化冷数据本地缓存的失败次数 } } } } }
  • 基于归档状态查询索引列表 执行以下命令,基于归档状态查询索引列表。 GET _cat/archive_indices?stage={STAGE} 表13 请求参数说明 参数名 说明 STAGE 索引的归档状态,可选值如下: ARCHIVE_INIT:已接收到归档任务,尚未开始 ARCHIVE_STARTED: 归档任务已开始 ARCHIVE_PARTIAL: 归档任务部分成功 ARCHIVE_DONE: 归档任务成功结束 ARCHIVE_FAILURE: 归档任务失败 RESTORE_INIT: 已接收到恢复归档任务,尚未开始 RESTORE_STARTED: 恢复归档任务已开始 RESTORE_PARTIAL: 恢复归档任务部分成功 RESTORE_DONE: 恢复归档任务成功,此时的索引文件恢复仍需要一定的时间,由 RESTORE_FAILURE: 恢复归档任务失败 RESTORE_OPENED: 索引恢复归档任务已完成,索引已打开 RESTORE_CLOSED: 索引的归档的数据已经到达恢复有效期,索引已关闭 返回结果如下: health status index uuid pri rep docs.count docs.deleted store.size pri.store.size close log-105 M0uRAWj_SKydjg0dFzyJow 此命令的参数和返回值与开源Elasticsearch的_cat/indices一致。
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全