27、Elasticsearch 模板与集群管理全解析

Elasticsearch模板与集群管理详解

Elasticsearch 模板与集群管理全解析

在 Elasticsearch 的使用中,模板和集群管理是非常重要的部分,它们能帮助我们更好地管理索引和监控集群状态。下面将详细介绍相关内容。

索引模板

索引模板可以让我们对新创建的索引应用预定义的设置和映射。

通用模板设置

以下是一个通用模板的示例:

{
  "template": "*",
  "order": 1,
  "settings": {
    "index.number_of_replicas": 0
  },
  "mappings": {
    "_default_": {
      "_source": {
        "enabled": false
      }
    }
  }
}

这里, template 参数值为 * ,意味着该模板会应用到所有索引。 order 参数用于确定模板的应用顺序,值越小越先应用。 settings 部分设置了索引的副本数量为 0, mappings 部分禁用了 _source 字段的存储。

特定前缀模板

我们还可以定义特定前缀的模板,例如:

curl -XPUT http://localhost:9200/_template/ha_template?pretty -d '{
  "template": "ha_*",
  "order": 10,
  "settings": {
    "index.number_of_replicas": 5
  }
}'

这个模板会应用到所有以 ha_ 开头的索引。对于这些索引,会先应用通用模板,再应用这个特定模板,最终这些索引会有 5 个副本且禁用 _source 字段存储。

文件存储模板

模板也可以存储在文件中,默认应放在 config/templates 目录下。例如, ha_template 模板文件 config/templates/ha_template.json 的内容如下:

{
  "ha_template": {
    "template": "ha_*",
    "order": 10,
    "settings": {
      "index.number_of_replicas": 5
    }
  }
}

需要注意的是,JSON 结构有所不同,模板名作为主对象键。并且模板必须放在每个 Elasticsearch 实例上,通过文件定义的模板不能通过 REST API 调用获取。

动态模板

动态模板可以根据字段名和类型来定义映射。

动态模板示例
{
  "mappings": {
    "article": {
      "dynamic_templates": [
        {
          "template_test": {
            "match": "*",
            "mapping": {
              "index": "analyzed",
              "fields": {
                "str": {
                  "type": "{dynamic_type}",
                  "index": "not_analyzed" 
                }
              }
            }
          }
        }
      ]
    }
  }
}

在这个示例中,为 article 类型定义了一个动态模板 template_test 。由于 match 属性为 * ,该模板会应用到输入文档的每个字段。每个字段会被视为多字段,包括一个与原字段同名的字段(类型由 Elasticsearch 确定)和一个后缀为 str 的字段(类型为字符串且不进行分析)。

匹配模式

定义匹配模式有两种方式:
- match :当字段名匹配模式时使用该模板。
- unmatch :当字段名不匹配模式时使用该模板。

默认使用简单的 glob 模式,可通过 match_pattern=regexp 改为正则表达式模式。还有 path_match path_unmatch 可用于匹配嵌套文档中的名称。

字段定义

编写目标字段定义时,可使用以下变量:
- {name} :输入文档中原始字段的名称。
- {dynamic_type} :从原始文档确定的类型。

需要注意的是,Elasticsearch 按定义顺序检查模板,第一个匹配的模板会被应用,所以最通用的模板(如 match: "*" )应最后定义。

集群管理

在 Elasticsearch 中,集群管理涉及多个方面,包括快照、监控等。

快照功能

快照可以保存集群的所有数据,包括集群状态和索引信息。

  • 创建快照存储库
    每个存储库有唯一名称、类型(如 fs 表示共享文件系统存储库, url 表示通过 URL 访问的只读存储库)和设置。创建文件系统存储库的命令如下:
curl -XPUT localhost:9200/_snapshot/backup -d '{
  "type": "fs",
  "settings": {
    "location": "/tmp/es_backup_folder/cluster1"
  }
}'

执行该命令后,会创建一个名为 backup 的存储库,备份文件将存储在指定位置。

  • 查看和删除存储库
    查看存储库定义:
curl -XGET localhost:9200/_snapshot/backup?pretty

查看所有存储库:

curl -XGET localhost:9200/_snapshot/_all?pretty

删除存储库:

curl -XDELETE localhost:9200/_snapshot/backup?pretty
  • 创建快照
    创建新快照需要选择唯一名称,例如:
curl -XPUT 'localhost:9200/_snapshot/backup/bckp1'

该命令会在 backup 存储库中创建名为 bckp1 的快照,命令会立即返回 {"accepted":true} ,表示快照创建过程已在后台开始。若要等待快照创建完成后返回响应,可添加 wait_for_completion 参数:

curl -XPUT 'localhost:9200/_snapshot/backup/bckp2?wait_for_completion=true&pretty'
  • 快照命令的额外参数
  • indices :指定要快照的索引名称。
  • ignore_unavailable :默认为 true ,若设为 false ,当 indices 参数指向不存在的索引时,命令会失败。
  • include_global_state :默认为 true ,表示将集群状态写入快照(除临时设置外)。
  • partial :若设为 true ,当部分分片不可用时,只保存可用分片。

示例:

curl -XPUT 'localhost:9200/_snapshot/backup/bckp?wait_for_completion=true&pretty' -d '{ "indices": "b*", "include_global_state": "false" }'
  • 恢复快照
    列出所有快照:
curl -XGET 'localhost:9200/_snapshot/backup/_all?pretty'

恢复名为 bckp1 的快照:

curl -XPOST 'localhost:9200/_snapshot/backup/bckp1/_restore'

若只想恢复特定索引,可使用 indices 参数:

curl -XPOST 'localhost:9200/_snapshot/backup/bck1/_restore?pretty' -d '{ "indices": "c*"}'

恢复时还可使用以下参数:
- ignore_unavailable :与快照创建时相同。
- include_global_state :与快照创建时相同。
- rename_pattern :用于更改快照中索引的名称,值为正则表达式。
- rename_replacement :与 rename_pattern 一起定义目标索引名称。

例如, rename_pattern=products_(.*) rename_replacement=items_$1 会将 products_cars 索引恢复为 items_cars 索引。

  • 清理旧快照
    删除旧快照很简单,例如删除 backup 存储库中的 bckp1 快照:
curl -XDELETE 'localhost:9200/_snapshot/backup/bckp1?pretty'
集群监控

监控集群状态和健康对于系统管理员来说非常重要。

  • 集群健康 API
    使用以下命令获取集群整体状态信息:
curl 'localhost:9200/_cluster/health?pretty'

示例响应如下:

{
  "cluster_name": "es-book",
  "status": "green",
  "timed_out": false,
  "number_of_nodes": 1,
  "number_of_data_nodes": 1,
  "active_primary_shards": 4,
  "active_shards": 4,
  "relocating_shards": 0,
  "initializing_shards": 0,
  "unassigned_shards": 0
}

集群状态有三种:
- green :所有分片已正确分配,无错误。
- yellow :主分片已分配,但部分或所有副本未分配。
- red :至少有一个主分片未分配,集群不可用,查询可能返回错误或不完整结果。

也可检查特定索引的健康状态:

curl 'localhost:9200/_cluster/health/library,map/?pretty'
  • 控制信息细节
    可通过 level 参数控制健康 API 返回信息的详细程度,取值为 cluster (默认)、 indices shards

  • 额外参数

  • timeout :控制命令执行的最大等待时间,默认 30 秒。
  • wait_for_status :指定集群达到的健康状态才返回结果,可选值为 green yellow red
  • wait_for_nodes :设置返回健康命令响应所需的节点数量,可设为整数或简单方程。
  • wait_for_relocating_shard :指定等待的迁移分片数量,设为 0 表示等待所有迁移分片。

示例:

curl 'localhost:9200/_cluster/health?wait_for_status=green&wait_for_nodes=>=3&timeout=100s'
  • 索引统计 API
    使用 _stats 端点可获取集群中索引的各种信息,可获取所有索引、单个索引或多个索引的统计信息。例如,检查 library map 索引的统计信息:
curl localhost:9200/library,map/_stats?pretty

通过以上介绍,我们可以看到 Elasticsearch 的模板和集群管理功能非常强大,合理使用这些功能可以提高系统的稳定性和性能。在实际应用中,可根据具体需求灵活配置和使用这些功能。

Elasticsearch 模板与集群管理全解析

集群再平衡调整

集群再平衡是 Elasticsearch 中确保数据均匀分布在各个节点上的重要机制。合理调整集群再平衡可以提高集群的性能和稳定性。

再平衡的触发条件

Elasticsearch 会在以下几种情况下触发集群再平衡:
- 节点加入或离开集群。
- 分片分配发生变化。
- 手动触发再平衡操作。

调整再平衡参数

可以通过修改 Elasticsearch 的配置参数来调整再平衡的行为。以下是一些常用的参数:
- cluster.routing.rebalance.enable :控制是否允许再平衡操作,可选值为 all (允许所有再平衡)、 primaries (仅允许主分片再平衡)、 replicas (仅允许副本分片再平衡)、 none (禁止再平衡)。
- cluster.routing.allocation.node_initial_primaries_recoveries :控制每个节点上初始主分片恢复的最大并发数。
- cluster.routing.allocation.node_concurrent_recoveries :控制每个节点上并发恢复的最大分片数。

例如,要禁止再平衡操作,可以使用以下命令:

curl -XPUT 'localhost:9200/_cluster/settings' -d '{
  "persistent": {
    "cluster.routing.rebalance.enable": "none"
  }
}'
分片移动

在 Elasticsearch 中,有时需要手动移动分片以优化集群性能或处理节点故障。

移动分片的步骤
  1. 确定需要移动的分片 :可以通过集群健康 API 或索引统计 API 来查看分片的分布情况,确定需要移动的分片。
  2. 选择目标节点 :根据集群的负载情况和节点的资源状况,选择合适的目标节点。
  3. 执行移动操作 :使用 Elasticsearch 的集群分配 API 来执行分片移动操作。

以下是一个移动分片的示例:

curl -XPOST 'localhost:9200/_cluster/reroute' -d '{
  "commands": [
    {
      "move": {
        "index": "your_index",
        "shard": 0,
        "from_node": "source_node",
        "to_node": "target_node"
      }
    }
  ]
}'
预热索引

索引预热是一种提高查询性能的技术,通过在查询之前加载索引数据到内存中,减少查询时的磁盘 I/O 操作。

预热的实现方式

可以通过创建索引预热器来实现索引预热。索引预热器是一个查询,当索引打开时会自动执行该查询,将相关数据加载到内存中。

以下是一个创建索引预热器的示例:

curl -XPUT 'localhost:9200/your_index/_warmers/warmer_name' -d '{
  "query": {
    "match_all": {}
  }
}'
别名使用

别名是 Elasticsearch 中一种非常有用的功能,它可以为一个或多个索引提供一个统一的名称,方便进行查询和管理。

别名的创建和管理
  • 创建别名 :使用以下命令为一个或多个索引创建别名:
curl -XPOST 'localhost:9200/_aliases' -d '{
  "actions": [
    {
      "add": {
        "index": "your_index",
        "alias": "your_alias"
      }
    }
  ]
}'
  • 删除别名 :使用以下命令删除别名:
curl -XPOST 'localhost:9200/_aliases' -d '{
  "actions": [
    {
      "remove": {
        "index": "your_index",
        "alias": "your_alias"
      }
    }
  ]
}'
  • 切换别名 :可以通过别名的添加和删除操作来实现索引的无缝切换。例如,将别名从一个索引切换到另一个索引:
curl -XPOST 'localhost:9200/_aliases' -d '{
  "actions": [
    {
      "remove": {
        "index": "old_index",
        "alias": "your_alias"
      }
    },
    {
      "add": {
        "index": "new_index",
        "alias": "your_alias"
      }
    }
  ]
}'
插件安装与管理

Elasticsearch 支持通过插件来扩展其功能,例如安装用于存储快照到 Amazon S3 或 HDFS 的插件。

插件安装步骤
  1. 选择插件 :根据需求选择合适的插件,可以从 Elasticsearch 的官方插件库或第三方插件库中查找。
  2. 下载插件 :使用 Elasticsearch 的插件管理工具下载插件,例如:
bin/elasticsearch-plugin install https://github.com/elasticsearch/elasticsearch-cloud-aws/releases/download/v7.17.0/elasticsearch-cloud-aws-7.17.0.zip
  1. 重启 Elasticsearch :安装插件后,需要重启 Elasticsearch 使插件生效。
插件管理命令
  • 列出已安装的插件
bin/elasticsearch-plugin list
  • 卸载插件
bin/elasticsearch-plugin remove your_plugin_name
更新设置 API

Elasticsearch 的更新设置 API 允许在运行时修改索引或集群的设置。

更新设置的操作步骤
  1. 确定要更新的设置 :根据需求确定要更新的索引或集群设置。
  2. 使用更新设置 API 进行更新 :使用以下命令更新设置:
curl -XPUT 'localhost:9200/your_index/_settings' -d '{
  "index": {
    "number_of_replicas": 2
  }
}'

总结

Elasticsearch 提供了丰富的功能来管理集群和索引,包括模板、快照、监控、再平衡、分片移动、预热、别名、插件安装和更新设置等。通过合理使用这些功能,可以提高集群的性能、稳定性和可维护性。在实际应用中,需要根据具体的业务需求和集群环境来灵活配置和使用这些功能,以达到最佳的效果。

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

graph LR
    A[创建索引模板] --> B[创建快照存储库]
    B --> C[创建快照]
    C --> D[恢复快照]
    A --> E[动态模板配置]
    E --> F[集群监控]
    F --> G[调整再平衡]
    G --> H[移动分片]
    F --> I[预热索引]
    F --> J[使用别名]
    F --> K[安装插件]
    F --> L[更新设置]

通过以上的介绍和示例,相信大家对 Elasticsearch 的模板和集群管理功能有了更深入的了解。希望这些内容能帮助大家更好地使用 Elasticsearch 来构建高效、稳定的应用系统。

【四轴飞行器】非线性三自由度四轴飞行器模拟器研究(Matlab代码实现)内容概要:本文围绕非线性三自由度四轴飞行器的建模仿真展开,重点介绍了基于Matlab的飞行器动力学模型构建控制系统设计方法。通过对四轴飞行器非线性运动方程的推导,建立其在三维空间中的姿态位置动态模型,并采用数值仿真手段实现飞行器在复杂环境下的行为模拟。文中详细阐述了系统状态方程的构建、控制输入设计以及仿真参数设置,并结合具体代码实现展示了如何对飞行器进行稳定控制轨迹跟踪。此外,文章还提到了多种优化控制策略的应用背景,如模型预测控制、PID控制等,突出了Matlab工具在无人机系统仿真中的强大功能。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的高校学生、科研人员及从事无人机系统开发的工程师;尤其适合从事飞行器建模、控制算法研究及相关领域研究的专业人士。; 使用场景及目标:①用于四轴飞行器非线性动力学建模的教学科研实践;②为无人机控制系统设计(如姿态控制、轨迹跟踪)提供仿真验证平台;③支持高级控制算法(如MPC、LQR、PID)的研究对比分析; 阅读建议:建议读者结合文中提到的Matlab代码仿真模型,动手实践飞行器建模控制流程,重点关注动力学方程的实现控制器参数调优,同时可拓展至多自由度或复杂环境下的飞行仿真研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值