28、Elasticsearch 集群管理与性能监控全解析

Elasticsearch 集群管理与性能监控全解析

1. 响应结构与统计信息

在 Elasticsearch 中,对某些命令的响应可能包含大量信息。当响应行数超过 500 时,我们通常只关注其结构。响应中除了状态和时间信息外,主要包含三个对象: primaries total indices
- indices :包含库和映射索引的信息。
- primaries :包含当前节点上分配的主分片信息。
- total :包含所有分片(包括副本)的信息。

这些对象中又包含描述特定统计信息的子对象,如 docs store indexing get search 等。下面详细介绍这些统计信息:
- Docs :显示索引文档的信息,例如:

"docs" : {
    "count" : 4,
    "deleted" : 0
}

count 表示文档数量,当删除文档时,Elasticsearch 不会立即物理删除,而是标记为删除,在段合并时才真正删除, deleted 表示标记为删除的文档数量。
- Store :提供存储相关信息,例如:

"store" : {
    "size_in_bytes" : 6003,
    "throttle_time_in_millis" : 0
}

主要信息是索引大小,还可查看限流统计,在系统 I/O 性能有问题且对段合并操作有限制时有用。
- Indexing、get 和 search :提供数据操作信息,示例如下:

"indexing" : {
    "index_total" : 11501,
    "index_time_in_millis" : 4574,
    "index_current" : 0,
    "delete_total" : 0,
    "delete_time_in_millis" : 0,
    "delete_current" : 0
},
"get" : {
    "total" : 3,
    "time_in_millis" : 0,
    "exists_total" : 2,
    "exists_time_in_millis" : 0,
    "missing_total" : 1,
    "missing_time_in_millis" : 0,
    "current" : 0
},
"search" : {
    "query_total" : 0,
    "query_time_in_millis" : 0,
    "query_current" : 0,
    "fetch_total" : 0, 
    "fetch_time_in_millis" : 0,
    "fetch_current" : 0
}

这些统计信息结构相似,可读取各种请求类型的总时间和请求数量,从而计算单个查询的平均时间。对于实时 get 请求, missing_total 表示未找到文档的数量。

此外,Elasticsearch 还提供以下信息:
- merges :Lucene 段合并信息。
- refresh :刷新操作信息。
- flush :刷新信息。
- warmer :预热器信息及执行时间。
- filter_cache :过滤器缓存统计。
- id_cache :标识符缓存统计。
- fielddata :字段数据缓存统计。
- percolate :过滤器使用信息。
- completion :自动完成建议器信息。
- segments :Lucene 段信息。
- translog :事务日志数量和大小信息。

2. 各类 API 介绍

Elasticsearch 提供了多种 API 用于获取集群和索引的信息,下面详细介绍这些 API:
- 状态 API(Status API) :通过 _status 端点获取索引信息,返回的信息包括可用分片、主分片信息、分片分配节点、分片状态、事务日志和合并过程信息以及刷新和刷新统计。
- 节点信息 API(Nodes Info API) :通过向 _nodes REST 端点发送请求获取集群节点信息。可根据以下方面获取特定节点信息:
- 节点名称:如 _nodes/Pulse
- 节点标识符:如 _nodes/ny4hftjNQtuKMyEvpUdQWg
- IP 地址:如 _nodes/192.168.1.103
- Elasticsearch 配置参数:如 /_nodes/rack:2

还可通过模式(如 _nodes/192.168.1.* )、节点枚举(如 _nodes/Pulse,Slab )或两者结合(如 / _nodes/P*,S* )获取多个节点信息。默认返回节点基本信息,添加以下参数可获取更多信息:
- settings :Elasticsearch 配置信息。
- os :服务器信息,如处理器、内存和交换空间。
- process :进程标识符和可用文件描述符。
- jvm :Java 虚拟机信息,如内存限制。
- thread_pool :线程池配置。
- network :网络接口名称和地址。
- transport :传输模块监听地址。
- http :HTTP 监听地址。
- plugins :已安装插件信息。

示例命令:

curl 'localhost:9200/_nodes/Pulse/os,jvm,plugins?pretty'

该命令将返回节点 Pulse 的操作系统、Java 虚拟机和插件信息。

  • 节点统计 API(Nodes Stats API) :与节点信息 API 类似,但主要提供集群工作过程中的统计信息。向 / _nodes/stats REST 端点发送请求使用该 API,也可获取特定节点信息(如 _nodes/Pulse/stats )。默认返回所有可用统计信息,可通过以下选项限制:
    • indices :索引信息,包括大小、文档数量、索引统计、搜索和获取时间、缓存、段合并等。
    • os :操作系统信息,如可用磁盘空间、内存和交换使用情况。
    • process :Elasticsearch 进程的内存、CPU 和文件处理使用情况。
    • jvm :Java 虚拟机内存和垃圾回收统计。
    • network :TCP 级信息。
    • transport :传输模块发送和接收的数据信息。
    • http :HTTP 连接信息。
    • fs :可用磁盘空间和 I/O 操作统计。
    • thread_pool :线程状态信息。
    • breaker :字段数据缓存断路器信息。

示例命令:

curl 'localhost:9200/_nodes/Pulse/stats/os,jvm,breaker?pretty'

该命令将返回节点 Pulse 的操作系统、Java 虚拟机和字段数据缓存断路器统计信息。

  • 集群状态 API(Cluster State API) :通过该 API 可获取整个集群的信息,添加 local=true 参数可限制为本地节点信息。基本命令如下:
curl 'localhost:9200/_cluster/state?pretty'

还可通过指定指标和索引来限制返回信息,示例如下:

curl 'localhost:9200/_cluster/state/nodes/map,library?pretty'

可用指标包括:
- version :集群状态版本信息。
- master_node :选举出的主节点信息。
- nodes :节点信息。
- routing_table :路由相关信息。
- metadata :元数据信息,指定 index_templates=true 可包含索引模板。
- blocks :响应中的块信息。

  • 待处理任务 API(Pending Tasks API) :通过向 / _cluster/pending_tasks REST 端点发送请求,可查看等待执行的任务,响应中包含任务优先级和队列时间等信息。
  • 索引段 API(Indices Segments API) :通过 / _segments 端点获取分片、分片位置以及 Lucene 库管理的物理索引段信息,可用于整个集群或单个索引。
  • Cat API :Elasticsearch 提供的更友好的 API,响应为 JSON 格式,方便人类查看。向 _cat REST 端点发送请求,后跟以下选项之一:
    • aliases :别名信息。
    • allocation :分片分配和磁盘使用信息。
    • count :文档数量信息。
    • health :集群健康信息。
    • indices :索引信息。
    • master :主节点信息。
    • nodes :集群拓扑信息。
    • pending_tasks :待处理任务信息。
    • recovery :恢复过程信息。
    • thread_pool :线程池统计信息。
    • shards :分片信息。

示例命令:

curl -XGET 'localhost:9200/_cat/shards?v'

v 参数表示更详细的信息,还可使用 help 参数获取命令头描述, h 参数指定响应中包含的列。响应示例如下:

index   shard prirep state   docs  store ip           node
map     0     p      STARTED    4  5.9kb 192.168.1.40 es_node_1
library 0     p      STARTED    9 11.8kb 192.168.56.1 es_node_2

部分 Cat API 命令可限制返回信息,总结如下:
| 命令 | 限制方式 |
| ---- | ---- |
| aliases | 在请求中追加别名 |
| count | 在请求中追加感兴趣的索引名称 |
| indices | 同 count 命令 |
| shards | 在请求中追加感兴趣的索引名称 |

3. 集群重新平衡控制

默认情况下,Elasticsearch 会尝试在集群中均匀平衡分片及其副本,但在某些情况下,我们需要控制这种行为。
- 重新平衡概念 :重新平衡是在集群不同节点之间移动分片的过程。大多数情况下是有益的,但有时需要避免,如自定义分片放置时。
- 集群就绪状态 :当所有主分片分配到节点(达到黄色健康状态)时,集群即可使用,此时 Elasticsearch 可能仍在初始化副本分片,但不影响搜索和索引操作。

Elasticsearch 提供以下属性控制重新平衡过程:
- 控制重新平衡开始时间 cluster.routing.allocation.allow_rebalance 可设置为以下值:
- always :需要时立即开始重新平衡。
- indices_primaries_active :所有主分片初始化后开始。
- indices_all_active :所有分片和副本初始化后开始(默认值)。
- 控制节点间并发移动分片数量 cluster.routing.allocation.cluster_concurrent_rebalance 默认为 2,可根据集群节点数量调整。
- 控制单节点并发初始化分片数量 cluster.routing.allocation.node_concurrent_recoveries 默认为 2,分片恢复过程 I/O 密集,避免并发恢复过多分片。
- 控制单节点并发初始化主分片数量 cluster.routing.allocation.node_initial_primaries_recoveries 可控制节点上并发初始化的主分片数量。
- 控制分片分配类型 cluster.routing.allocation.enable 可设置为以下值:
- all :允许所有类型分片分配(默认值)。
- primaries :仅分配主分片。
- new_primaries :仅分配新创建的主分片。
- none :禁用分片分配。
- 控制单节点并发流数量 indices.recovery.concurrent_streams 默认为 3,可根据网络和节点性能调整。

通过合理使用这些属性,我们可以更好地控制 Elasticsearch 集群的分片和副本分配,提高集群性能和稳定性。

下面是一个简单的 mermaid 流程图,展示集群重新平衡控制的主要流程:

graph LR
    A[开始] --> B{是否需要控制重新平衡}
    B -- 是 --> C{控制重新平衡开始时间}
    C --> D{控制节点间并发移动分片数量}
    D --> E{控制单节点并发初始化分片数量}
    E --> F{控制单节点并发初始化主分片数量}
    F --> G{控制分片分配类型}
    G --> H{控制单节点并发流数量}
    H --> I[结束]
    B -- 否 --> I

通过以上介绍,我们了解了 Elasticsearch 中各种统计信息、API 的使用以及集群重新平衡的控制方法,这些知识有助于我们更好地管理和监控 Elasticsearch 集群。

4. 集群重新平衡控制的实际应用场景

在实际使用 Elasticsearch 集群时,我们会遇到各种需要控制集群重新平衡的场景,以下为你详细介绍:
- 网络流量场景
- 高流量网络 :当你的网络能够处理非常高的流量时,你可以适当增加 cluster.routing.allocation.cluster_concurrent_rebalance 的值,让更多的分片在节点间并发移动,加快集群重新平衡的速度。例如,将其从默认的 2 增加到 5,这样可以在短时间内完成更多分片的迁移,使集群更快达到平衡状态。
- 低流量网络 :若网络使用频繁,为避免网络压力过大,你可以减少并发移动的分片数量,甚至将 cluster.routing.allocation.allow_rebalance 设置为 none 暂时禁止重新平衡,待网络压力减小后再恢复。
- I/O 子系统场景 :在全集群重启后,为减轻 I/O 子系统的压力,你可以降低 cluster.routing.allocation.node_concurrent_recoveries 的值,减少同时初始化的分片数量。比如将其从 2 降低到 1,让分片和副本逐个初始化,避免 I/O 系统过载。

5. 集群管理的最佳实践

为了更好地管理 Elasticsearch 集群,我们可以遵循以下最佳实践:
- 定期监控 :使用上述介绍的各种 API 定期获取集群和节点的信息,监控集群的健康状态、节点性能、索引状态等。例如,每天定时使用节点统计 API 获取节点的资源使用情况,及时发现潜在问题。
- 合理配置重新平衡参数 :根据实际的网络和 I/O 情况,合理设置集群重新平衡的相关参数。在网络稳定、I/O 性能较好时,适当提高并发移动和初始化的分片数量;在网络或 I/O 压力较大时,降低并发数量或禁止重新平衡。
- 备份与恢复 :定期备份索引数据,以防止数据丢失。可以使用 Elasticsearch 的快照和恢复功能,将索引数据备份到远程存储中。在需要时,能够快速恢复数据。
- 集群扩展 :当集群负载增加时,及时添加节点进行扩展。在添加节点后,根据新的集群规模调整重新平衡参数,确保分片和副本均匀分布。

6. 总结

Elasticsearch 提供了丰富的功能和 API 来帮助我们管理和监控集群。通过了解响应结构中的统计信息,我们可以深入了解索引和节点的状态;使用各种 API 可以方便地获取集群和节点的详细信息;合理控制集群重新平衡可以根据实际情况优化集群性能。

在实际应用中,我们要根据网络、I/O 等具体情况,灵活调整相关参数,遵循最佳实践,确保 Elasticsearch 集群的稳定运行和高效性能。

以下是一个简单的 mermaid 流程图,展示了 Elasticsearch 集群管理的整体流程:

graph LR
    A[开始] --> B[监控集群状态]
    B --> C{是否需要调整?}
    C -- 是 --> D[调整重新平衡参数]
    D --> E[重新监控]
    C -- 否 --> E
    E --> F{是否达到预期状态?}
    F -- 否 --> D
    F -- 是 --> G[结束]

希望通过本文的介绍,你能更好地掌握 Elasticsearch 集群的管理和监控方法,让你的集群在实际应用中发挥出最佳性能。

【博士论文复现】【阻抗建模、验证扫频法】光伏并网逆变器扫频稳定性分析(包含锁相环电流环)(Simulink仿真实现)内容概要:本文档是一份关于“光伏并网逆变器扫频稳定性分析”的Simulink仿真实现资源,重点复现博士论文中的阻抗建模扫频法验证过程,涵盖锁相环和电流环等关键控制环节。通过构建详细的逆变器模型,采用小信号扰动方法进行频域扫描,获取系统输出阻抗特性,并结合奈奎斯特稳定判据分析并网系统的稳定性,帮助深入理解光伏发电系统在弱电网条件下的动态行为失稳机理。; 适合人群:具备电力电子、自动控制理论基础,熟悉Simulink仿真环境,从事新能源发电、微电网或电力系统稳定性研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握光伏并网逆变器的阻抗建模方法;②学习基于扫频法的系统稳定性分析流程;③复现高水平学术论文中的关键技术环节,支撑科研项目或学位论文工作;④为实际工程中并网逆变器的稳定性问题提供仿真分析手段。; 阅读建议:建议读者结合相关理论教材原始论文,逐步运行并调试提供的Simulink模型,重点关注锁相环电流控制器参数对系统阻抗特性的影响,通过改变电网强度等条件观察系统稳定性变化,深化对阻抗分析法的理解应用能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值