九、ElasticSearch 运维 -集群维度

news2024/12/29 8:24:24

1. 查看集群健康

用于简单的判断集群的健康状态,集群内的分片的分配迁移情况。

GET _cluster/health

-------------------------Respond-----------------------------
{
  "cluster_name" : "test-jie",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 6,
  "number_of_data_nodes" : 6,
  "active_primary_shards" : 8,
  "active_shards" : 16,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}

参数说明:

  • Respond
    • cluster_name:集群名称
    • status:集群的健康状态
    • timed_out:如果为 false,则在 timeout 参数指定的时间内返回(默认为30s)。
    • number_of_nodes:集群当前有多少节点
    • number_of_data_nodes:集群当前有多少个数据节点
    • active_primary_shards:集群当前主分片总数
    • active_shards:集群当前主分片和副本分片总数
    • relocating_shards:集群当前有多少个正在搬迁中的分片
    • initializing_shards:集群当前有多少个初始化中的分片
    • unassigned_shards:集群当前有多少个还未正常分配的分片
    • delayed_unassigned_shards:由于超时设置而延迟分配的分片数量
    • number_of_pending_tasks:当前集群的任务堆积情况
    • number_of_in_flight_fetch:未完成取回的数量 f e t c h 是什么意思 \color{plum}{fetch 是什么意思} fetch是什么意思
    • task_max_waiting_in_queue_millis:从最早启动的任务开始等待执行的时间(以毫秒为单位)
    • active_shards_percent_as_number:集群集群活跃分片百分比亦或集群恢复的进度

说明:number_of_pending_tasks 数量较大时,可以说明 Master 在处理 task 时有点力不从心,承载的压力较大了。

2. 查看任务堆积详情

GET /_cat/pending_tasks

-------------------------Respond-----------------------------
insertOrder timeInQueue priority source
       1685       855ms HIGH     update-mapping [foo][t]
       1686       843ms HIGH     update-mapping [foo][t]
       1693       753ms HIGH     refresh-mapping [foo][[t]]
       1688       816ms HIGH     update-mapping [foo][t]
       1689       802ms HIGH     update-mapping [foo][t]
       1690       787ms HIGH     update-mapping [foo][t]
       1691       773ms HIGH     update-mapping [foo][t]

参数说明:

  • Respond

    • insertOrder:任务进入队列顺序
    • timeInQueue:任务在队列中等待了多长时间
    • priority:任务优先级,其中优先级由大到小分别为 IMMEDIATE > URGENT > HIGH > NORMAL > LOW > LANGUID
    • source:任务来源
  • request

    • <format>:HTTP 接受报头的简短版本。有效值包括 JSONYAML等。
    • <h>:显示需要展示的列名,以逗号分隔
    • <help>:如果为 true,则响应包含帮助信息。默认为 false
    • <local>:如果为 true,则请求仅从本地节点检索信息。默认为 false,即默认为从主节点检索信息。
    • <master_timeout>:等待连接到主节点的时间。如果在超时之前没有收到响应,则请求失败并返回错误。默认为 30s
    • <s>:用于对响应的列名或列别名排序。列名或列别名以逗号分隔,例如 _cat/pending_tasks?s=timeInQueue:desc,insertOrder:desc
    • <time>:用于显示时间值的单位。
    • <v>:如果为 true,则响应包含列标题,默认为 false

说明: GET _cluster/health 也可以通过 "number_of_pending_tasks" 来查看集群当前任务堆积的量,而 GET/_cat/pending_tasks 可以直接查看具体是哪些任务在执行,通常创建索引的优先级是 URGENT,更新 Mapping 的优先级是 HIGH,如果数据在高压力写入时频繁更新 mapping,则会导致 pending_tasks 堆积的比较严重,对 Master 造成较大压力。此外 GET /_cluster/pending_tasksGET/_cat/pending_tasks 命令相似

GET /_cluster/pending_tasks

-------------------------Respond-----------------------------
{
   "tasks": [
      {
         "insert_order": 101,
         "priority": "URGENT",
         "source": "create-index [foo_9], cause [api]",
         "time_in_queue_millis": 86,
         "time_in_queue": "86ms"
      },
      {
         "insert_order": 46,
         "priority": "HIGH",
         "source": "shard-started ([foo_2][1], node[tMTocMvQQgGCkj7QDHl3OA], [P], s[INITIALIZING]), reason [after recovery from shard_store]",
         "time_in_queue_millis": 842,
         "time_in_queue": "842ms"
      }
  ]
}

参数说明:

  • Respond

    • tasks:多个堆积的任务
    • insert_order:任务插入任务队列的数字(任务插入任务队列的顺序)
    • priority:任务的优先级
    • source:任务的描述内容,包括任务的内容和来源。
    • time_in_queue_millis:任务等待执行的时间(毫秒)
    • time_in_queue:任务等待执行的时间(毫秒)
  • request

    • Path parameters <local>:如果设置为 true,则请求仅从当前节点检索信息。默认为 false,表示从主节点检索信息。
    • Path parameters <master_timeout>:等待获得主节点相应的时间。如果在超时之前没有收到响应,则请求失败并返回一个错误。这里的默认值为 30s(time units)。

3. 查看集群元数据状态信息

GET /_cluster/state/<metrics>/<target>

GET /_cluster/state/metadata,routing_table

-------------------------Respond-----------------------------
{
  "cluster_name" : "test-jie",
  "cluster_uuid" : "UpaYjtZbQ1-40SXOxFJ1aw",
  "metadata" : {
    "cluster_uuid" : "UpaYjtZbQ1-40SXOxFJ1aw",
    "cluster_uuid_committed" : false,
    "cluster_coordination" : {
      "term" : 1,
      "last_committed_config" : [
        "mPoDzYzoTxqLMJgVPigFpQ",
        "pxz2eQt4TRmmgm1LH-Xy0A",
        "tHuo1RPETSOOJkjtLFSd1w"
      ],
      "last_accepted_config" : [
        "mPoDzYzoTxqLMJgVPigFpQ",
        "pxz2eQt4TRmmgm1LH-Xy0A",
        "tHuo1RPETSOOJkjtLFSd1w"
      ],
      "voting_config_exclusions" : [ ]
    },
    "templates" : { },
    "indices" : { },
    "index-graveyard" : {
      "tombstones" : [ ]
    }
  },
  "routing_table" : {
    "indices" : { }
  }
}

参数说明:

  • Respond

    • Path parameters <metrics>
      • _all:显示所有的观测指标。
      • blocks:在响应中显示 blocks 部分。
      • master_node:在响应中显示选出的 master_node 部分。
      • metadata:在响应中显示 metadata 部分。如果提供以逗号分隔的索引列表,则返回的输出将只包含这些索引的元数据。
      • nodes:在响应中显示选出的 nodes 部分。
      • routing_nodes:在响应中显示选出的 routing_nodes 部分。如果提供以逗号分隔的索引列表,则返回的输出将只包含这些索引的 routing_nodes
      • routing_table:在响应中显示选出的 routing_table 部分。
      • version:显示集群状态版本
    • Path parameters <target>: 用一个以逗号分隔的列表来指定 data streamsindicesindex aliases 。支持使用 * 作为通配符。需要查询集群内的所有 data streamsindices 时,可以忽略该参数,或者使用 _all*
    • Query parameters:
      • allow_no_indices:如果设置为 true,则允许使用 * 的表达式没有匹配到任何索引。默认为 true
      • expand_wildcards:是否更全面的展示使用 * 的表达式匹配到的索引,这些索引有可能处于 openclosed 状态,亦或是这两种状态都展示。expand_wildcards 的可选参数为:openclosednoneall
      • flat_settings:如果设置为 true, 则以扁平的方式返回结果。默认为 true
      • ignore_unavailable:如果设置为 true, 则不可用的索引(closedmissing)被。
      • local:如果设置为 true,则请求仅从当前节点检索信息。默认为 false,表示从主节点检索信息。
      • master_timeout:等待获得主节点相应的时间。如果在超时之前没有收到响应,则请求失败并返回一个错误。这里的默认值为 30s(time units)。
      • wait_for_metadata_version
      • wait_for_timeout:指定获取 wait_for_metadata_version 响应的最大等待时间。
  • request

    • ``:

说明: 此 API 可以获取到集群维度非常丰富的元数据相关信息。

  • 集群中节点的集合:包括节点的名称、ip、tcp/http端口号、节点属性等信息。
  • 所有集群级别的设置
  • 集群中索引的信息,包括它们的映射和设置:包括索引的模板信息、索引的分片路由信息、快照等等
  • 集群中所有分片的位置。

例1: 通过在 routing_table 获取 myindex 索引下每个分片的详细路由信息。

GET /_cluster/state/routing_table/myindex

-------------------------Respond-----------------------------
{
  "cluster_name" : "test-jie",
  "cluster_uuid" : "UpaYjtZbQ1-40SXOxFJ1aw",
  "routing_table" : {
    "indices" : {
      "myindex" : {
        "shards" : {
          "1" : [
            {
              "state" : "STARTED",
              "primary" : false,
              "node" : "Wf2vvHoLR06HjT94Jmty3A",
              "relocating_node" : null,
              "shard" : 1,
              "index" : "myindex",
              "allocation_id" : {
                "id" : "clhDgwqtTzuLY3kn-0QpVg"
              }
            },
            {
              "state" : "STARTED",
              "primary" : true,
              "node" : "eezg7elkSz2m-ldmw9YuUg",
              "relocating_node" : null,
              "shard" : 1,
              "index" : "myindex",
              "allocation_id" : {
                "id" : "x_ukq_dOQEuBRhogRbg3Fw"
              }
            }
          ],
          "0" : [
            {
              "state" : "STARTED",
              "primary" : true,
              "node" : "Wf2vvHoLR06HjT94Jmty3A",
              "relocating_node" : null,
              "shard" : 0,
              "index" : "myindex",
              "allocation_id" : {
                "id" : "uzGTFd7aR1qSqZvhB2fPfA"
              }
            },
            {
              "state" : "STARTED",
              "primary" : false,
              "node" : "eezg7elkSz2m-ldmw9YuUg",
              "relocating_node" : null,
              "shard" : 0,
              "index" : "myindex",
              "allocation_id" : {
                "id" : "1xzc2kB9RA2puUjdS1LYyQ"
              }
            }
          ]
        }
      }
    }
  }
}

例2: 通过 routing_nodes 获取集群的节点路由信息。包括每个节点上分配的索引名称以及具体分片信息,分配状态等详情。

GET /_cluster/state/routing_nodes

-------------------------Respond-----------------------------
这里仅作部分展示
{
  "cluster_name" : "test-jie",
  "cluster_uuid" : "UpaYjtZbQ1-40SXOxFJ1aw",
  "routing_nodes" : {
    "unassigned" : [
      {
        "state" : "UNASSIGNED",
        "primary" : false,
        "node" : null,
        "relocating_node" : null,
        "shard" : 0,
        "index" : "tf_b_trade_index_prod",
        "recovery_source" : {
          "type" : "PEER"
        },
        "unassigned_info" : {
          "reason" : "REPLICA_ADDED",
          "at" : "2023-06-19T10:28:04.271Z",
          "delayed" : false,
          "allocation_status" : "no_attempt"
        }
      }
    ],
    "nodes" : {
      "Wf2vvHoLR06HjT94Jmty3A" : [
        {
          "state" : "STARTED",
          "primary" : false,
          "node" : "Wf2vvHoLR06HjT94Jmty3A",
          "relocating_node" : null,
          "shard" : 2,
          "index" : "test_06_09_002",
          "allocation_id" : {
            "id" : "ihDQXHhoQgS__wM4P99_Yw"
          }
        }
      ],
      "1vxkefLiR7CR5fTrfdYi4Q" : [
        {
          "state" : "STARTED",
          "primary" : false,
          "node" : "1vxkefLiR7CR5fTrfdYi4Q",
          "relocating_node" : null,
          "shard" : 0,
          "index" : "tf_b_trade_index_prod",
          "allocation_id" : {
            "id" : "WT6QioHqSx6c6d22nm17hw"
          }
        }
      ]
    }
  }
}

4. 查看集群指标统计信息

GET /_cluster/stats

GET /_cluster/stats/nodes/<node_filter>

-------------------------Respond-----------------------------
仅展示 Respond 结构
{
  "_nodes": {
    "total": 6,
    "successful": 6,
    "failed": 0
  },
  "cluster_name": "test-jie",
  "cluster_uuid": "UpaYjtZbQ1-40SXOxFJ1aw",
  "timestamp": 1687422437426,
  "status": "yellow",
  "indices": {},
  "nodes": {}
}

参数说明:

  • Respond
    • Path parameters <node_filter>:用于指定由 node filters 确定的节点列表,多个 node filters 由 , 分隔。默认为集群中的所有节点。
    • Query parameters <timeout>:等待各个节点响应的时间。 如果节点在超时前没有相应,则在响应的结果中不包含该节点的统计信息,超时的节点会在响应的 _nodes.failed 中。默认没有超时时间。
    • Query parameters <timeout>

说明: 该API展示了集群维度统计的相关指标信息。例如索引分片数量、存储大小、内存使用率、磁盘使用率等信息,以及集群节点数量、节点角色、属性、jvm版本、内存使用率、cpu使用率等监控信息。这个 API 返回的相关内容太多了,详细查看在这里。

例1:

5. 查看集群分片分配详情

GET _cluster/allocation/explain

-------------------------Respond-----------------------------
{
  "index" : "tf_b_trade_index_prod",
  "shard" : 0,
  "primary" : false,
  "current_state" : "unassigned",
  "unassigned_info" : {
    "reason" : "REPLICA_ADDED",
    "at" : "2023-06-19T10:28:04.271Z",
    "last_allocation_status" : "no_attempt"
  },
  "can_allocate" : "no",
  "allocate_explanation" : "cannot allocate because allocation is not permitted to any of the nodes",
  "node_allocation_decisions" : [
    {
      "node_id" : "1vxkefLiR7CR5fTrfdYi4Q",
      "node_name" : "test-jie-node-du99d-g8bz.374423377486-test-vision-xx-test-es.dcos.xixian.unicom.local",
      "transport_address" : "10.125.129.42:34866",
      "node_attributes" : {
        "ml.machine_memory" : "4294967296",
        "ml.max_open_jobs" : "20",
        "xpack.installed" : "true",
        "transform.node" : "true"
      },
      "node_decision" : "no",
      "deciders" : [
        {
          "decider" : "filter",
          "decision" : "NO",
          "explanation" : """node matches cluster setting [cluster.routing.allocation.exclude] filters [_name:"test-jie-node-du99d-g8bz.374423377486-test-vision-xx-test-es.dcos.xixian.unicom.local"]"""
        },
        {
          "decider" : "same_shard",
          "decision" : "NO",
          "explanation" : "a copy of this shard is already allocated to this node [[tf_b_trade_index_prod][0], node[1vxkefLiR7CR5fTrfdYi4Q], [R], s[STARTED], a[id=WT6QioHqSx6c6d22nm17hw]]"
        }
      ]
    }
  ]
}

参数说明:

  • Request

    • Query parameters
      • <include_disk_info>:如果设置为 true,则返回有关磁盘使用情况和分片大小的信息,默认为false
      • <include_yes_decisions>:在响应的 node_allocation_decisions 中返回 YES 决策
    • Request body
      • current_node:指定 节点ID 或 节点名,只解释当前位于指定节点上的分片。
      • index:指定索引名称
      • shard:指定需要解释的分片的ID。
      • primary:如果设置为 true,则返回指定 ID分片的 主分片的解释描述
  • Respond

    • current_state:分片当前的状态
    • unassigned_info.reason:分片最初变成 unassigned 状态的原因
    • can_allocate:是否分配分片
    • node_allocation_decisions.node_decision:是否分片到特定的节点
    • node_allocation_decisions.deciders.decider:导致节点做出 no 的决定的决策器
    • node_allocation_decisions.deciders.explanation:关于节点做出 no 决策的原因提示。
    • configured_delay:设置 由于持有复制分片的节点离开集群导致的副本分片 延迟分配的时间。
    • remaining_delay:分配副本分片的剩余时间
    • node_allocation_decisions.storenode_allocation_decisions.node_id 上该分片数据信息
    • can_remain_on_current_node:当前分片是否能继续存储在当前节点上
    • can_remain_decisions:决定分片不能继续存储在当前节点上的 deciders,并在 can_remain_decisions.explanation给出解释。
    • can_move_to_other_node:分片是否允许分配到其它节点。
    • can_rebalance_cluster:集群是否允许数据重平衡。
    • can_rebalance_to_other_node:是否可以平衡到集群的其他节点。
    • node_decision:分片不能重平衡到其他节点的原因。

说明: 此 API 主要用来查看集群中未分配分片的具体原因,对于诊断集群健康状态异常具有非常大的帮助。如果集群本身是 green 的状态,即所有索引分片都已经正常分配了,执行该 API 则会返回 400 的错误。

例1: 指定查询 索引的分片,未正常分配的原因。

GET _cluster/allocation/explain
{
  "index":"tf_b_trade_index_prod",
  "shard": 0,
  "primary": true
}

-------------------------Respond-----------------------------
{
  "index" : "tf_b_trade_index_prod",
  "shard" : 0,
  "primary" : false,
  "current_state" : "unassigned",
  "unassigned_info" : {
    "reason" : "REPLICA_ADDED",
    "at" : "2023-06-19T10:28:04.271Z",
    "last_allocation_status" : "no_attempt"
  },
  "can_allocate" : "no",
  "allocate_explanation" : "cannot allocate because allocation is not permitted to any of the nodes",
  "node_allocation_decisions" : [
    {
      "node_id" : "1vxkefLiR7CR5fTrfdYi4Q",
      "node_name" : "test-jie-node-du99d-g8bz.374423377486-test-vision-xx-test-es.dcos.xixian.unicom.local",
      "transport_address" : "10.125.129.42:34866",
      "node_attributes" : {
        "ml.machine_memory" : "4294967296",
        "ml.max_open_jobs" : "20",
        "xpack.installed" : "true",
        "transform.node" : "true"
      },
      "node_decision" : "no",
      "deciders" : [
        {
          "decider" : "filter",
          "decision" : "NO",
          "explanation" : """node matches cluster setting [cluster.routing.allocation.exclude] filters [_name:"test-jie-node-du99d-g8bz.374423377486-test-vision-xx-test-es.dcos.xixian.unicom.local"]"""
        },
        {
          "decider" : "same_shard",
          "decision" : "NO",
          "explanation" : "a copy of this shard is already allocated to this node [[tf_b_trade_index_prod][0], node[1vxkefLiR7CR5fTrfdYi4Q], [R], s[STARTED], a[id=WT6QioHqSx6c6d22nm17hw]]"
        }
      ]
    },
    {
      "node_id" : "Wf2vvHoLR06HjT94Jmty3A",
      "node_name" : "test-jie-node-6wzhl-owr3.374423377486-test-vision-xx-test-es.dcos.xixian.unicom.local",
      "transport_address" : "10.125.128.45:34866",
      "node_attributes" : {
        "ml.machine_memory" : "4294967296",
        "ml.max_open_jobs" : "20",
        "xpack.installed" : "true",
        "transform.node" : "true"
      },
      "node_decision" : "no",
      "deciders" : [
        {
          "decider" : "same_shard",
          "decision" : "NO",
          "explanation" : "a copy of this shard is already allocated to this node [[tf_b_trade_index_prod][0], node[Wf2vvHoLR06HjT94Jmty3A], [R], s[STARTED], a[id=_BN9sUDDSwaCXWBF6LLQEg]]"
        }
      ]
    },
    {
      "node_id" : "eezg7elkSz2m-ldmw9YuUg",
      "node_name" : "test-jie-node-48n88-7kn8.374423377486-test-vision-xx-test-es.dcos.xixian.unicom.local",
      "transport_address" : "10.125.128.58:34866",
      "node_attributes" : {
        "ml.machine_memory" : "4294967296",
        "ml.max_open_jobs" : "20",
        "xpack.installed" : "true",
        "transform.node" : "true"
      },
      "node_decision" : "no",
      "deciders" : [
        {
          "decider" : "same_shard",
          "decision" : "NO",
          "explanation" : "a copy of this shard is already allocated to this node [[tf_b_trade_index_prod][0], node[eezg7elkSz2m-ldmw9YuUg], [P], s[STARTED], a[id=l9prWOymQcOufR0rzqhb9g]]"
        }
      ]
    }
  ]
}

6. 更改分片分配

POST /_cluster/reroute

-------------------------Respond-----------------------------
{
  "acknowledged" : true,
  "state" : {
    "cluster_uuid" : "UpaYjtZbQ1-40SXOxFJ1aw",
    "routing_table" : {
      "indices" : {
        ".kibana_security_session_1" : {
          "shards" : {
            "0" : [
              {
                "state" : "STARTED",
                "primary" : false,
                "node" : "Wf2vvHoLR06HjT94Jmty3A",
                "relocating_node" : null,
                "shard" : 0,
                "index" : ".kibana_security_session_1",
                "allocation_id" : {
                  "id" : "qoyfmdxwROWTY6SuUkPovQ"
                }
              },
              {
                "state" : "STARTED",
                "primary" : true,
                "node" : "eezg7elkSz2m-ldmw9YuUg",
                "relocating_node" : null,
                "shard" : 0,
                "index" : ".kibana_security_session_1",
                "allocation_id" : {
                  "id" : "yqLDaoYqT8m-qi4xOC15bg"
                }
              }
            ]
          }
        }
      }
    }
  }
}

参数说明:

  • Request
    • Query parameters
      • dry_run:如果设置为 true,则该请求模拟执行操作指令,并返回结果状态
      • explain:如果设置为 true,则响应返回操作指令可以执行或不可以执行的原因。
      • metric:限制返回的 测度信息。默认为除元数据外的所有选项。可以有以下选项
        • _all:展示所有的 测度 信息
        • blocks:仅展示 blocks 部分
        • master_node:仅展示 master_node 部分
        • metadata:仅展示 metadata 部分。如果提供以逗号分隔的索引列表,则返回的输出将只包含列表中索引的元数据。
        • nodes:仅展示 nodes 部分。
        • routing_table:仅展示 routing_table 部分。
        • version:显示集群状态版本。
      • retry_failed:如果设置为 true,则重新尝试分配集群中分配失败的分片。
    • Request parameters
      • commands
        • move:将分片从一个节点移动到另一个节点。index 参数指定索引名称、shard 参数指定分片序号、from_node 是分片的源节点、to_node 是分片的目标节点。
        • cancel:取消分片分配(或恢复)。index 参数指定索引名称、shard 参数指定分片序号、node 是分片被指定分配到的节点。可以通过取消现有的副本分片,并允许通过标准恢复过程重新初始化它们,从而强制从主分片重新同步现有副本。默认仅可以取消副本的分片,如果需要取消主分片则需要增加 allow_primary 参数。
        • allocate_replica:将未分配的副本分片分配给节点。index 参数指定索引名称、shard 参数指定分片序号、node 是分片被指定分配到的节点。指定分配也会考虑 分配决策(重平衡啦、水位线啦等等)
        • allocate_stale_primary:将主分片分配给包含过期副本分片的节点。index 参数指定索引名称、shard 参数指定分片序号、node 是分片被指定分配到的节点、accept_data_loss: true 表示接受数据丢失 。使用该命令可能导致这个分片的数据丢失。如果包含正确数据分片的节点过一会加入集群后,这个包含正确数据的分片将会被删除或者被过期的数据分片所覆盖。因为该操作的风险极大因此 accept_data_loss: true 是必须被显示的表明。
        • allocate_empty_primary:分配一个空的主分片到节点上。将主分片分配给包含过期副本分片的节点。index 参数指定索引名称、shard 参数指定分片序号、node 是分片被指定分配到的节点、accept_data_loss: true 表示接受数据丢失 。该指令会导致该分片的所有数据完全丢失(如果该分片之前存在数据)。包含正确数据分片的节点过一会加入集群,该分片的数据也会被完全删除。因为该操作的风险极大因此 accept_data_loss: true 是必须被显示的表明。
        • 注: 分配主分片的命名应该谨慎的使用,通常来说主分片都是由 Elasticsearch 完全自动处理。不能自动分配主分片的原因包括:
          • 创建了一个新索引,但没有符合 分配决策 的节点。
          • 在集群的当前数据节点上找不到包含最新数据的副本分片。为防止数据丢失,系统不会自动将包含过期数据的副本分片提升为主分片。

说明: 该命令允许我们手动改变集群中某些分片的分配策略,可以将分片从一个节点移动到另一个节点、可以取消分配、也可以将未分配的分片分配给特定的节点。需要注意的是,如果 cluster.routing.rebalance.enable: true 的话,每次执行完任何 routing 的命令后,都会执行 rebalancing,也就是说例,如果请求的 routing 将一个分片从 node1 移动到 node2,那么这可能会导致一个分片从 node2 移动回 node1,使整个集群均衡。因此 Query parameter 参数 ?dry_runRequest body 参数 "dry_run": true 都可以计算指令在当前集群执行后,返回执行当前指令(及重新平衡)的集群状态,但不会实际执行更改的请求。

例1:move 移动 myindex 索引的 0 分片,从 test-jie-node-48n88-7kn8.374423377486-test-vision-xx-test-es.dcos.xixian.unicom.local 节点到 test-jie-node-du99d-g8bz.374423377486-test-vision-xx-test-es.dcos.xixian.unicom.local

POST /_cluster/reroute
{
  "commands": [
    {
      "move": {
        "index": "myindex", 
        "shard": 0,
        "from_node": "test-jie-node-48n88-7kn8.374423377486-test-vision-xx-test-es.dcos.xixian.unicom.local", 
        "to_node": "test-jie-node-du99d-g8bz.374423377486-test-vision-xx-test-es.dcos.xixian.unicom.local"
      }
    },
    {
      "cancel": {
        "index": "myindex", 
        "shard": 1,
        "node": "test-jie-node-6wzhl-owr3.374423377486-test-vision-xx-test-es.dcos.xixian.unicom.local"
      }
    }
  ]
}
-------------------------Respond-----------------------------
仅做粗略的展示
{
  "acknowledged" : true,
  "state" : {
    "cluster_uuid" : "UpaYjtZbQ1-40SXOxFJ1aw",
    "version" : 1021,
    "state_uuid" : "UbVk9J2iQRiv16FScTh3IQ",
    "master_node" : "pxz2eQt4TRmmgm1LH-Xy0A",
    "blocks" : { },
    "nodes" : { },
    "routing_table" : { },
    "routing_nodes" : { },
    "security_tokens" : { }
  }
}

移动后
在这里插入图片描述

例2:allocate_stale_primary 当主分片由于 version 较旧原因未能正常分配的时候。可以通过 allocate_stale_primary 属性来使包含过期数据的主分片正常分配,这个过程很有可能会丢失部分数据。这里是重新分配 myindex 索引的 0 分片 到 test-jie-node-6wzhl-owr3.374423377486-test-vision-xx-test-es.dcos.xixian.unicom.local 节点。注: 执行该命令的时候,需要通过 GET <index>/_shard_stores?pretty&format=json&filter_path=indices.<index>.shards.<shard> 查找包含过期数据的主分片所在的节点,查找到相关的节点后,然后再进行 allocate_stale_primary,也就是说必须是保存了包含过期数据的主分片所在的节点,而不是其他节点,否则会导致完全丢失数据。

POST /_cluster/reroute
{
    "commands" : [
        {
          "allocate_stale_primary" : {
              "index" : "myindex", 
              "shard" : 0,
              "node" : "test-jie-node-6wzhl-owr3.374423377486-test-vision-xx-test-es.dcos.xixian.unicom.local",
              "accept_data_loss": true
          }
        }
    ]
}
-------------------------Respond-----------------------------


例3:allocate_empty_primary 分配一个不包含任何数据的主分片到一个节点上。通常在运维过程中 ,经常会遇到有些索引由于没有设置副本,且又遇到文件损坏,导致主分片分配不了的情况。针对以上情况,如果客户能够接受丢失一个分片的数据,则可以通过 allocate_empty_primary 来分配一个包含空数据的主分片,让集群恢复 green。这里是分配 myindex 索引的 0 分片到 test-jie-node-48n88-7kn8.374423377486-test-vision-xx-test-es.dcos.xixian.unicom.local 节点上,且 myindex 索引的 0 分片上的数据全部丢失。

POST _cluster/reroute
{
  "commands": [
    {
      "allocate_empty_primary": {
        "index": "myindex",
        "shard": 0,
        "node": "test-jie-node-48n88-7kn8.374423377486-test-vision-xx-test-es.dcos.xixian.unicom.local",
        "accept_data_loss": true
      }
    }
  ]
}
-------------------------Respond-----------------------------

7. 查看和设置集群settings信息

# 查看集群设置
GET /_cluster/settings?include_defaults&flat_settings

# 更新、设置集群设置
PUT /_cluster/settings

-------------------------Respond-----------------------------
# 查看集群设置的响应
{
  "persistent" : { },
  "transient" : {
    "cluster" : {
      "routing" : {
        "allocation" : {
          "node_concurrent_recoveries" : "8"
        }
      }
    },
    "indices" : {
      "recovery" : {
        "max_bytes_per_sec" : "80mb"
      }
    }
  }
}

参数说明:

  • Request

    • Query parameters
      • flat_settings:如果设置为 true,则以扁平的形式返回结果,默认为 false
      • include_defaults:如果设置为 true,则返回所有集群的默认设置,默认为 false
      • master_timeout:等待获得主节点相应的时间。如果在超时之前没有收到响应,则请求失败并返回一个错误。这里的默认值为 30s(time units)。
      • timeout:等待查询结果响应的时间。如果在超时之前没有收到响应,则请求失败并返回一个错误。这里的默认值为 30s(time units)。
  • Respond

    • ``:

说明: 此 API 可以更新集群设置,对设置的更新可以是持久化的,也可以是暂时的。持久化的集群设置,在集群完全重启后仍然有效,暂时的集群设置,在集群完全重启后就失效了。无论是持久化的集群设置还是暂时的集群设置,都可以通过将值指定为 null 来重置设置。此外集群设置的优先顺序为:

  • transient cluster settings
  • persistent cluster settings
  • settings in the elasticsearch.yml configuration file.

官网中推荐使用此 API 来设置所有集群设置,而 elasticsearch.yml 仅用来设置本地配置,这样就可以确保在所有节点上的集群设置是完全相同的。此外,使用配置文件在不同的节点上定义不同的设置,很难注意到这些差异。

例1: 设置集群分片搬迁并发度和最大传输速度

PUT /_cluster/settings
{
    "persistent" : {
        "cluster.routing.allocation.node_concurrent_recoveries": "8",
        "cluster.routing.allocation.cluster_concurrent_rebalance": "8",
        "indices.recovery.max_bytes_per_sec": "80mb"
    },
    "transient" : {
        "cluster.routing.allocation.node_concurrent_recoveries": "8",
        "cluster.routing.allocation.cluster_concurrent_rebalance": "8",
        "indices.recovery.max_bytes_per_sec": "80mb"
    }
}
-------------------------Respond-----------------------------

例2: 设置集群磁盘使用率水位线

PUT /_cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.disk.watermark.high":"95%",
    "cluster.routing.allocation.disk.watermark.low":"93%"
  },
  "transient": {
    "cluster.routing.allocation.disk.watermark.high":"95%",
    "cluster.routing.allocation.disk.watermark.low":"93%"
  }
}
-------------------------Respond-----------------------------

例3: 将某个节点上的数据驱逐

PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.exclude._name": "test-jie-node-48n88-7kn8.374423377486-test-vision-xx-test-es.dcos.xixian.unicom.local"
  },
  "transient": {
    "cluster.routing.allocation.exclude._name": "test-jie-node-48n88-7kn8.374423377486-test-vision-xx-test-es.dcos.xixian.unicom.local"
  }
}
-------------------------Respond-----------------------------

例4: 设置集群最小选主节点数

PUT _cluster/settings
{
  "persistent": {
    "discovery.zen.minimum_master_nodes": 2
  },
  "transient": {
    "discovery.zen.minimum_master_nodes": 2
  }
}
-------------------------Respond-----------------------------

例5: 将集群设置为只读

PUT _cluster/settings
{
   "transient": {
       "cluster.blocks.read_only_allow_delete": true
   }
}
-------------------------Respond-----------------------------

例6: 开启 xpack 集群监控采集

PUT _cluster/settings
{
  "persistent": {
    "xpack.monitoring.collection.enabled": true,
    "xpack.monitoring.collection.interval": "10s" // 设置采集周期
  }
}
-------------------------Respond-----------------------------

例7: 关闭集群通配符模式

PUT _cluster/settings
{
"transient": {
  "action.destructive_requires_name": "false"
}
}
-------------------------Respond-----------------------------

例8: 设置集群中每个节点能够包含的最大分片数

PUT _cluster/settings
{
  "transient": {
    "cluster.max_shards_per_node": 10000
  }
}
-------------------------Respond-----------------------------

例9: 设置集群 mapping 更新超时时间

PUT _cluster/settings
{
  "transient": {
    "indices.mapping.dynamic_timeout": "20s"
  }
}
-------------------------Respond-----------------------------

例10: 开启集群自动创建索引

PUT _cluster/settings
{
  "transient": {
    "action.auto_create_index": true
  }
}

-------------------------Respond-----------------------------

8. 查看集群任务详情

GET /_tasks/<task_id>

GET /_tasks
-------------------------Respond-----------------------------
{
  "nodes" : {
    "oTUltX4IQMOUUVeiohTt8A" : {
      "name" : "H5dfFeA",
      "transport_address" : "127.0.0.1:9300",
      "host" : "127.0.0.1",
      "ip" : "127.0.0.1:9300",
      "tasks" : {
        "oTUltX4IQMOUUVeiohTt8A:124" : {
          "node" : "oTUltX4IQMOUUVeiohTt8A",
          "id" : 124,
          "type" : "direct",
          "action" : "cluster:monitor/tasks/lists[n]",
          "start_time_in_millis" : 1458585884904,
          "running_time_in_nanos" : 47402,
          "cancellable" : false,
          "parent_task_id" : "oTUltX4IQMOUUVeiohTt8A:123"
        },
        "oTUltX4IQMOUUVeiohTt8A:123" : {
          "node" : "oTUltX4IQMOUUVeiohTt8A",
          "id" : 123,
          "type" : "transport",
          "action" : "cluster:monitor/tasks/lists",
          "start_time_in_millis" : 1458585884904,
          "running_time_in_nanos" : 236042,
          "cancellable" : false
        }
      }
    }
  }
}

参数说明:

  • Request

    • Path parameters <task_id>:返回的任务ID(node_id:task_number
    • Query parameters
      • actions:一个由 , 分割的 actionwildcard expression(通配符表达式)组成的列表,用于限制响应返回的 action
      • detailed:如果设置为 true,则响应中包含分片回复的细节信息,默认为 false
      • group_by:用于对响应中的任务进行分组,其中可选的参数有:
        • nodes:节点 id
        • parents:父任务 id
        • none:不对任务做分组
      • node_id:一个由 , 分割的 node idnode name 组成的列表,用于限制响应返回的信息。
      • parent_task_id:用于指定父任务id。
      • master_timeout:等待获得主节点相应的时间。如果在超时之前没有收到响应,则请求失败并返回一个错误。这里的默认值为 30s(time units)。
      • timeout:等待查询结果响应的时间。如果在超时之前没有收到响应,则请求失败并返回一个错误。这里的默认值为 30s(time units)。
      • wait_for_completion:如果设置为 true,则响应被阻塞,知道操作完成,默认为 false
  • Respond

    • ``:

说明: 获取到集群各节点上当前正在执行的任务信息。

例1: 等待 id 为 oTUltX4IQMOUUVeiohTt8A:12345 的任务完成,或等待时间超过 10s。

GET _tasks/oTUltX4IQMOUUVeiohTt8A:12345?wait_for_completion=true&timeout=10s

-------------------------Respond-----------------------------

例2: 取消 id 为 oTUltX4IQMOUUVeiohTt8A:12345 的任务

POST _tasks/oTUltX4IQMOUUVeiohTt8A:12345/_cancel

-------------------------Respond-----------------------------

例3: 消在 node1node2 节点上运行的所有 reindex 任务

POST _tasks/_cancel?nodes=node1,node2&actions=*reindex

-------------------------Respond-----------------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/692392.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用数组的方式计算---任意给出一个年,月,日,判断出这是一年的第几天

任意给出一个年&#xff0c;月&#xff0c;日&#xff0c;判断出这是一年的第几天&#xff1b; 闰年算法&#xff1a;能被4整除且不能被100整除&#xff0c;或者能被400整除 如2015年 5 10 是这一年的第131天 使用数组的方式计算&#xff0c;将每个月的天数放在一个数…

蜂网互联 企业级路由器v4.31 密码泄露漏洞

漏洞描述 蜂网互联企业级路由器v4.31存在接口未授权访问&#xff0c;导致攻击者可以是通过此漏洞得到路由器账号密码接管路由器 漏洞影响 蜂网互联企业级路由器v4.31 网络测绘 app“蜂网互联-互联企业级路由器” 漏洞复现 payload http://ip:port/action/usermanager.ht…

c++ 杂食记

1. inline关键字 在C中&#xff0c;inline关键字用于指定函数应该被内联。 当一个函数被内联时&#xff0c;它的代码将直接插入到调用该函数的代码中&#xff0c;而不是作为单独的函数调用 这可以提高程序的性能&#xff0c;因为它减少了函数调用的开销&#xff0c;并提高了数…

计算机网络那些事之 MTU 篇

哈喽大家好&#xff0c;我是咸鱼 今天我们来聊聊计算机网络中的 MTU &#xff08;Maximum Transmission Unit&#xff09; 什么是 MTU ? MTU&#xff08;Maximum Transmission Unit&#xff09;是指数据链路层中的最大传输单元 通俗点来讲&#xff0c;MTU 是指数据链路层能…

基于workerman 即时通讯聊天(uniapp + pc)

laychat workerman 实现 webIM即时通讯系统 下载 laychat-master.zip https://github.com/hszyh/laychat 实现了功能: 1、通过snake后台实现对聊天成员的增删改查&#xff0c;动态推送给在线的用户 2、实现了群组的查找 3、实现了创建我的群组,删除我的群组,添加群组成员…

性能测试工具——LoadRunner内部介绍以及常见问题

目录 Tools Recording Options General Options 注释脚本 Review log Runtime-Settings General Network Browser Internet Protocol HTTPS证书 总结&#xff1a; Tools Recording Options 接下来我们挨个看一下里面的东东以及区别 General&#xff08;通常的&am…

【Python编程】将格式为ppm和pgm的图片批量转换为png或jpg格式的图片

前序 如果文件夹中有异常图片&#xff0c;则可以使用以下代码从而跳过这些异常图片而不影响转换代码的运行。例如本人在解压时中断而导致的图片异常问题&#xff0c;图片示例如下&#xff1a; from PIL import ImageFile ImageFile.LOAD_TRUNCATED_IMAGES True正文 导入用…

Golang学习日志 ━━ gin-vue-admin插件开发记录

gin-vue-admin是一套国人用golang开发的后台管理系统&#xff0c;本文记录插件开发内容。 官网&#xff1a;https://www.gin-vue-admin.com/ 学习视频&#xff1a;https://www.bilibili.com/video/BV1kv4y1g7nT/ 插件目录 后端位置&#xff1a;\server\plugin\ 前端位置&#…

信号与系统复习笔记——采样与通讯系统

信号与系统复习笔记——采样与通讯系统 采样定理 冲激串采样函数可表示为&#xff1a; p ( t ) ∑ n − ∞ ∞ δ ( t − n T ) p(t) \sum_{n-\infty}^{\infty} \delta(t - nT) p(t)n−∞∑∞​δ(t−nT) 周期 T T T 称为采样周期&#xff0c;而 ω s 1 T \omega_s …

7月29-31日·相约上海丨上海国际智能遮阳与建筑节能展览会即将举办

上海国际智能遮阳与建筑节能展览会&#xff08;ISSE&#xff09;即将盛大召开。这个七月&#xff0c;期待您的参与&#xff0c;一同共聚盛会&#xff01; 1、关于展会 国内建筑遮阳市场尚在快速发展期&#xff0c;随着社会经济的发展以及建筑节能环保概念的不断深入&#xff…

开发的功能不都是经过上线测试,为什么上线后还会那么多 Bug ?

你是否也经过这样的灵魂拷问&#xff1a;「开发的功能不都是经过上线测试的吗&#xff1f;为什么上线后还会那么多 Bug &#xff1f;」。 大家明明都很努力&#xff0c;为什么「输出」的结果没有更进一步&#xff1f;今天我们就水一水这个「狗血」话题&#xff0c;究竟是谁个锅…

一半以上的年轻人存款不足10万元,能带给我们什么思考?

目录 年轻人存款现状现在的年轻人真的没有存款意愿吗&#xff1f;为什么年轻人存款少&#xff1f;收入低&#xff0c;臣妾做不到啊生活成本高消费观念不同超前消费、过度负债存款意识弱 依据自身情况聊聊你的目前的存款在哪一个区间&#xff1f;你觉得存款难吗&#xff1f;谈谈…

Open62541 NodeSet loader 编译与使用

大多数的OPC UA 建模工具通常是将NodeSet 编译成为C 或者C# 的源代码&#xff0c;然后和Server 程序一起编译。比如uaModeler&#xff0c;Opc foundation 的UA ModelCompiler 以及Open62541 提供的nodeset_Compiler 都是如此&#xff0c;这种方式在载入配套规范的Nodeset 无疑是…

使用Jenkins构建发布一个简单的maven项目

上一章&#xff0c;完成了jenkins在ubuntu上的安装&#xff0c;这一章将使用单个Jenkins服务完成一个maven项目的打包和发布。 1、在Jenkins的管理页面中安装相关插件 用到的插件有&#xff1a;Maven Integration、Git、Publish Over SSH三个&#xff0c;在Dashboard -> M…

全国水系与流域(五级)矢量数据下载

1. 全国水系与流域&#xff08;五级&#xff09;矢量数据 全国共计3040条水系&#xff0c;4015个流域 全国水系与流域&#xff08;五级&#xff09;矢量数据 链接 解压密码&#xff1a;rserforum.com 说明&#xff1a;“流域等级划分包括1-5级&#xff0c;其中1-2级为一级支流…

从零开始理解Linux中断架构(12)--硬中断之中断控制器(GICV3)

前面我们搞清楚了elx_irq的外围部分,了解清楚了kernel_enter/kernel_exit大致的作用。本节我们进入到硬中断处理部分。硬中断处理程序的位置见下图: 硬中断处理主要的工作就是判断中断发起源,应答中断控制器,根据中断源查询出并调用该中断源的设备级处理函数。 前面…

pcl matlab 计算平面与空间三角形的交线

一、生成一个平面 过程&#xff1a; 单有法向量不能确定一个平面,至少还要有平面上的一个点的坐标才行 假如知道法向量n(A,B,C) 而平面过某点M(x0,y0,z0) 那么平面的方程为 A(x-x0)B(y-y0)C(z-z0)0 要在图中画出来&#xff0c;那么先要给x&#xff0c;y一个范围 举个离子&#…

Appuploader:常见错误及解决方法指南

目录 前言 一.登录apple官网&#xff0c;注册账号 二.下载Appuploader和登录 三.bundle ID 四.设备管理 五.证书管理 六.描述文件管理 七.打包 八.安装测试 &#xff08;PS&#xff1a;第一次安装成功会显示不受信任&#xff0c;进入设置-通 安全性”界面&#xff0c…

Interactive Natural Language Processing

本文是对《Interactive Natural Language Processing》的翻译。 交互式自然语言处理 摘要1 引言2 交互式对象2.1 人在环2.2 KB在环2.3 模型或工具在环2.4 环境在环 3 交互界面3.1 自然语言3.2 形式语言3.3 编辑3.4 机器语言3.5 共享内存 4 交互方法4.1 预训练语言模型4.2 提示…

Broken Gallery 靶场

主机发现 sudo nmap -sn 192.168.28.0/24 sudo nmap -sT --min-rate 10000 -p- 192.168.28.32 -oA nmapscan/ports sudo nmap -sT -sV -sC -O -p22,80 192.168.28.32 -oA nmapscan/detial sudo nmap --scriptvuln 192.168.28.32 -oA nmapsccan/vuln 访问80 图片下载下来 exift…