日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

使用集群限流插件(aliyun-qos)

aliyun-qos插件是阿里云Elasticsearch團隊自研的插件,能夠提高集群的穩(wěn)定性。該插件能夠?qū)崿F(xiàn)集群級別的讀寫限流,在關(guān)鍵時刻對指定索引降級,將流量控制在合適范圍內(nèi)。例如當上游業(yè)務無法進行流量控制時,尤其對于讀請求業(yè)務,可根據(jù)aliyun-qos插件設(shè)置的規(guī)則,按照業(yè)務的優(yōu)先級進行適當?shù)慕导墸瑏肀WoElasticsearch服務的穩(wěn)定性。

前提條件

已升級插件版本至最新版本。

您可以登錄目標Elasticsearch實例的Kibana控制臺,通過GET /_cat/plugins?v命令查看該插件的版本。查看插件版本

7.10版本Elasticsearch實例的插件最新版本為7.10.0_ali1.6.0.2,其他版本為<實例版本>-rc4。如果插件版本不是最新版本,您可通過以下方式處理:

  • 7.10版本Elasticsearch實例:在控制臺將內(nèi)核升級到1.6.0版本,具體操作請參見升級版本

  • 非7.10版本Elasticsearch實例:提交工單聯(lián)系阿里云Elasticsearch技術(shù)工程師升級插件版本。升級后,需要您手動重啟Elasticsearch實例生效。

說明
  • 使用aliyun-qos插件時,如果版本低于rc4,會出現(xiàn)unsupported_operation_exception的報錯。

  • 當前僅支持升級6.7.0及以上版本的Elasticsearch實例中的aliyun-qos插件,低于6.7.0版本的Elasticsearch實例需要先將實例版本升級到6.7.0及以上,再升級插件版本。

注意事項

  • aliyun-qos插件為預裝插件,限流功能默認關(guān)閉,不支持卸載。該插件是為了保護集群,提高穩(wěn)定性,并不會精準計量讀寫流量。aliyun-qos插件

    說明

    使用aliyun-qos插件前,您可以在插件配置頁面查看是否已安裝該插件。如果未安裝,可參見安裝或卸載系統(tǒng)默認插件進行安裝。插件安裝成功后不可卸載。

  • 在將aliyun-qos插件升級至最新版本時,您需要注意:

    • 由于新舊版本實現(xiàn)機制不同,升級過程中可能出現(xiàn)短暫限流失效,待master節(jié)點上的限流插件升級完成后會自動恢復。

    • 在新舊數(shù)據(jù)轉(zhuǎn)換過程中,可能存在部分限流器轉(zhuǎn)換失敗的情況。如果轉(zhuǎn)換失敗,您需要執(zhí)行如下命令重新轉(zhuǎn)換。如果執(zhí)行命令后報錯,可多次重試,直至hasError為false。

      POST /_qos/limiter/ops/upgrade
      說明

      如果執(zhí)行以上命令長時間不返回,則說明實例中沒有舊版限流器,可忽略。

評估閾值

為了不影響讀寫請求的執(zhí)行效率,aliyun-qos插件會在集群級別進行限流,但并不會對集群中所有節(jié)點的讀寫流量進行嚴格精準的計量,可能會導致實際的流量有所偏差。因此在使用aliyun-qos插件前,可先參考如下規(guī)則評估限流閾值:

  • 查詢請求

    查詢請求的限流閾值 = 客戶端查詢請求到達Elasticsearch的端到端QPS(Query Per Second)

    說明

    端到端QPS僅指查詢請求到達協(xié)調(diào)節(jié)點的每秒請求數(shù)。

  • 寫入請求

    寫入請求的限流閾值的計算規(guī)則與查詢請求類似,但還需要根據(jù)副本數(shù)進行調(diào)整。

    例如集群中有2個數(shù)據(jù)節(jié)點、1個索引,該索引有1個shard、1個副本,每次寫入10 MB大小的數(shù)據(jù)。因為存在副本,所以每個數(shù)據(jù)節(jié)點上都會被寫入10 MB大小的數(shù)據(jù)。另外X-Pack自身的Monitor、Audit、Watcher等任務同樣會占用寫入流量,設(shè)置閾值時需要預留出該部分的大小。

開啟限流功能

aliyun-qos插件的限流功能默認關(guān)閉,使用時需要先開啟該功能。不同版本的aliyun-qos插件,開啟限流功能的代碼不同,具體如下。

說明

本文中的命令均可在Kibana控制臺上執(zhí)行,詳情請參見登錄Kibana控制臺

7.10最新版本

其他版本

PUT _cluster/settings
{
  "persistent": {
    "apack.qos.limiter.enabled": true
  }
}
PUT _cluster/settings
{
   "persistent" : {
      "apack.qos.ratelimit.enabled":"true"
   }
}

關(guān)閉限流功能

您可以通過將限流參數(shù)設(shè)置為false或null,關(guān)閉限流功能。aliyun-qos插件的版本不同,關(guān)閉限流功能的代碼不同,具體如下。

關(guān)閉限流方式

7.10最新版本

其他版本

將限流參數(shù)設(shè)置為false

PUT _cluster/settings
{
  "persistent": {
    "apack.qos.limiter.enabled": false
  }
}
PUT _cluster/settings
{
   "persistent" : {
      "apack.qos.ratelimit.enabled":"false"
   }
}

將限流參數(shù)設(shè)置為null

PUT _cluster/settings
{
  "persistent": {
    "apack.qos.limiter.enabled": null
  }
}
PUT _cluster/settings
{
   "persistent" : {
      "apack.qos.ratelimit.enabled":null
   }
}

配置限流器(7.10最新版本)

說明
  • 以下配置限流器的內(nèi)容僅適用于7.10版本實例的aliyun-qos插件。

  • 限流器主要由兩部分組成,limiters定義和tags定義。通過tags定義資源限制,通過limiters定義具體的限流類型和限流閾值。

  • 限流器分為普通限流器和默認限流器。通過將tags設(shè)置為**可以實現(xiàn)默認限流器。例如默認每個shard的流量,默認每個應用的QPS等。

  • 當請求超過限流值之后,Elasticsearch會拒絕之后發(fā)送的請求。

  • 限流器配置的具體示例,請參見配置限流器示例

PUT /_qos/limiter/<limiterName>
{
  "limiters": {
     ${action}.${limiter_type}:${threshold}
  },
  "tags": {
    ${tagName}:${tagValue}
  },
  "priority":0,               
  "params":{  
      "watchMode":true
  }
}

參數(shù)

說明

可選值

action

限流的action,用于限制不同類型的請求。

  • write:doc寫入請求,包含index和create。

  • update:doc更新請求。

  • delete:doc刪除請求

  • search:查詢請求。

  • search_shards:查詢索引的shard總數(shù)請求。

limiter_type

限流類型。支持三大類:

  • 速率

  • 并發(fā)度

  • 單請求限制

  • rate:速率,只支持整數(shù)。

  • qps:查詢速率,只支持整數(shù)。

  • tps:寫入速率,只支持整數(shù)。

  • throughput:吞吐量,只支持action為write、update和delete。支持的單位包含GB、MB、KB等,最大支持2 GB。

  • thread_count:請求并發(fā)度,一個請求為一個并發(fā)。

  • concurrent_count:請求并發(fā)度,按照請求中的具體操作計算并發(fā)數(shù)。例如設(shè)置search_shards.concurrent_count:20,表示允許最大20個shard并發(fā)查詢。

  • max_per_request:單請求中包含的某類操作個數(shù)的上限。例如設(shè)置update.max_per_request:10,表示一個寫入請求最多有10個update。

  • max_size_per_request:單請求個數(shù)上限。只支持action為write、update和delete。

threshold

限流閾值。

int范圍內(nèi)的整數(shù),>=-1。

說明

部分類型支持帶單位的字符串,具體請參見limiter_type說明。

tagName

tag名稱。

  • node:當前節(jié)點名。

  • is_master:當前節(jié)點是否為master,對應的tag值為true或false。

  • index:索引名。如果有多個索引名,則為數(shù)組。如果傳入的是別名,此處也是解析的實際索引名。僅IndicesRequest的子類請求才有此tag。

  • shard:shard名,即index[id],例如test[0]。僅ReplicationRequest的子類請求才有此tag。

  • index_in_url:URL中的index字符串,如果傳入的是別名,則此處就是別名。僅IndicesRequest的子類請求才有此tag。

tagValue

tag的值。

字符串,可為數(shù)組。如果為數(shù)組,則對應tag匹配數(shù)組中任意一個value即可。支持精確匹配、模糊匹配和任意值,例如:

  • 精確匹配:"abc"

  • 模糊匹配:"ab*"

  • 任意值:"**"

    說明

    如果為任意值,則為默認限流器。即對這個tag的任意值都會生成一個精確的限流器,例如設(shè)置為index:"**",search.tps:1,表示默認情況下,限制每個索引的search速率為1,而不是總search速率為1。

priority

優(yōu)先級。

int整數(shù),默認為0。

說明

優(yōu)先級越大,排序越靠前。當有多個默認限流器同時命中時,只有優(yōu)先級最大的默認限流器會生效。

params

高級參數(shù)。

watchMode:是否啟用觀察模式,支持true和false(默認)。如果為true,Elasticsearch只會在metric中記錄拒絕數(shù),但不會實際限流。您可以通過API查看指標監(jiān)控信息,用于提前驗證限流效果,避免由于配置錯誤造成錯誤的限流。API的詳細信息,請參見常見問題

配置限流器示例

設(shè)置查詢QPS限流

通過設(shè)置查詢索引每秒請求次數(shù),限制協(xié)調(diào)節(jié)點每秒接收的查詢請求數(shù)。當每秒接收的查詢請求數(shù)超過限流值之后,Elasticsearch會拒絕接收請求。

index和index_patterns的值支持完整索引名稱和索引通配符。aliyun-qos插件的版本不同,設(shè)置查詢QPS限流的代碼不同,具體如下。

操作

7.10最新版本

其他版本

設(shè)置單個索引的查詢QPS限流

PUT /_qos/limiter/<limiterName>
{
  "limiters": {
    "search.qps": "1000"
  },
  "tags": {
    "index": "twitter"
  }
}
PUT _qos/_ratelimit/<limiterName>
{
   "search.index_patterns" : "twitter",
   "search.max_queries_per_sec" : 1000
}

設(shè)置指定名稱前綴的索引的查詢QPS限流

PUT /_qos/limiter/<limiterName>
{
  "limiters": {
    "search.qps": "1000"
  },
  "tags": {
    "index": "nginx-log-*"
  }
}
PUT _qos/_ratelimit/<limiterName>
{
   "search.index_patterns" : "nginx-log-*",
   "search.max_queries_per_sec" : 1000
}

設(shè)置任意索引的查詢QPS限流

PUT /_qos/limiter/<limiterName>
{
  "limiters": {
    "search.qps": "1000"
  },
  "tags": {
    "index": "**"
  }
}
說明

index:**表示任意索引。例如集群中有3個索引A、B、C,則這3個索引的限流值都為1000。

不支持。

設(shè)置所有索引的查詢總QPS限流

PUT /_qos/limiter/<limiterName>
{
  "limiters": {
    "search.qps": "1000"
  },
  "tags": {
    "index": "*"
  }
}
說明

index:*表示任意索引。例如集群中有3個索引A、B、C,則這3個索引的總限流值為1000。效果等同于不設(shè)置這個tags。

PUT _qos/_ratelimit/<limiterName>
{
   "search.index_patterns" : "*",
   "search.max_queries_per_sec" : 1000
}
說明

您可以定義多條不同的規(guī)則,只要請求命中任意一條規(guī)則,就會觸發(fā)限流。

當您在客戶端或Kibana控制臺上執(zhí)行數(shù)據(jù)查詢操作時,如果查詢QPS超過您設(shè)置的限流值,系統(tǒng)會顯示如下報錯信息。請根據(jù)報錯信息適當減少查詢QPS限流。aliyun-qos插件的版本不同,顯示的報錯信息不同,具體如下:

  • 7.10最新版本

    {
      "error": {
        "root_cause": [
          {
            "type": "status_exception",
            "reason": "search blocked, limited by [<limiterName>][search.qps](<limiterId>) threshold:[x]"
          }
        ],
        "type": "status_exception",
        "reason": "search blocked, limited by [<limiterName>][search.qps](<limiterId>) threshold:[x]"
      },
      "status": 429
    }
  • 其他版本

    {
      "error": {
        "root_cause": [
          {
            "type": "rate_limited_exception",
            "reason": "request indices:data/read/search rejected, limited by [l1:t*:1.0]"
          }
        ],
        "type": "rate_limited_exception",
        "reason": "request indices:data/read/search rejected, limited by [l1:t*:1.0]"
      },
      "status": 429
    }

設(shè)置寫入TPS限流

通過設(shè)置寫入索引每秒請求次數(shù),限制協(xié)調(diào)節(jié)點每秒接收的寫入請求數(shù)。當每秒接收的寫入請求數(shù)超過限流值之后,Elasticsearch會拒絕接收請求。

index和index_patterns的值支持完整索引名稱和索引通配符。aliyun-qos插件的版本不同,設(shè)置寫入TPS限流的代碼不同,具體如下。

7.10最新版本

其他版本

PUT /_qos/limiter/<limiterName>
{
  "limiters": {
    "write.tps": "100000"
  },
  "tags": {
    "index": "nginx-log-*"
  }
}

不支持

設(shè)置Bulk每秒寫入大小限流

通過設(shè)置Bulk每秒寫入的總字節(jié)數(shù),限制協(xié)調(diào)節(jié)點每秒接收的寫入字節(jié)數(shù)。當每秒接收的寫入字節(jié)數(shù)超過限流值之后,Elasticsearch會拒絕接收請求。

index和index_patterns的值支持完整索引名稱和索引通配符。aliyun-qos插件的版本不同,設(shè)置Bulk每秒寫入大小限流的代碼不同,具體如下。

7.10最新版本

其他版本

PUT /_qos/limiter/<limiterName>
{
  "limiters": {
    "write.throughput": "100MB"
  },
  "tags": {
    "index": "nginx-log-*"
  }
}
PUT _qos/_ratelimit/<limiterName>
{
   "bulk.index_patterns": "nginx-log-*",
   "bulk.max_throughput_in_bytes" : 104857600
}
說明

您可以定義多條不同的規(guī)則,只要請求命中任意一條規(guī)則,就會觸發(fā)限流。

設(shè)置Bulk單次請求大小限流

通過設(shè)置Bulk單次請求的最大值,限制協(xié)調(diào)節(jié)點接收單次請求的寫入字節(jié)數(shù)。當單次請求的寫入字節(jié)數(shù)超過限流值之后,Elasticsearch會拒絕接收請求。

index和index_patterns的值支持完整索引名稱和索引通配符。aliyun-qos插件的版本不同,設(shè)置Bulk單次請求大小限流的代碼不同,具體如下。

7.10最新版本

其他版本

PUT /_qos/limiter/<limiterName>
{
  "limiters": {
    "write.max_size_per_request": "1000"
  },
  "tags": {
    "index": "nginx-log-*"
  }
}
PUT _qos/_ratelimit/<limiterName>
{
   "bulk.index_patterns": "nginx-log-*",
   "bulk.max_request_size_in_bytes" : 1000
}
說明

您可以定義多條不同的規(guī)則,只要請求命中任意一條規(guī)則,就會觸發(fā)限流。

當您在客戶端或Kibana控制臺上執(zhí)行數(shù)據(jù)寫入操作時,如果單次請求的寫入字節(jié)數(shù)超過設(shè)置的限流值,系統(tǒng)會顯示如下報錯信息。請根據(jù)報錯信息適當減少單次請求的寫入字節(jié)數(shù)。aliyun-qos插件的版本不同,顯示的報錯信息不同,具體如下:

  • 7.10最新版本

    {
      "error" : {
        "root_cause" : [
          {
            "type" : "status_exception",
            "reason" : "write_size blocked, limited by [<limiterName>][write.max_size_per_request](<limiterId>) threshold:[x] try acquire [x]"
          }
        ],
        "type" : "status_exception",
        "reason" : "write_size blocked, limited by [<limiterName>][write.max_size_per_request](<limiterId>) threshold:[x] try acquire [x]"
      },
      "status" : 400
    }
  • 其他版本

    {
      "error": {
        "root_cause": [
          {
            "type": "rate_limited_exception",
            "reason": "request indices:data/write/bulk rejected, limited by [b2:ByteSizePreSeconds:992.0]"
          }
        ],
        "type": "rate_limited_exception",
        "reason": "request indices:data/write/bulk rejected, limited by [b2:ByteSizePreSeconds:992.0]"
      },
      "status": 413
    }

設(shè)置查詢shard并發(fā)個數(shù)限流

通過設(shè)置并發(fā)查詢shard數(shù),來降低集群壓力。index和index_patterns的值支持完整索引名稱和索引通配符。aliyun-qos插件的版本不同,設(shè)置查詢shard并發(fā)個數(shù)限流的代碼不同,具體如下。

7.10最新版本

其他版本

PUT /_qos/limiter/<limiterName>
{
  "limiters": {
    "search_shards.concurrent_count": "10"
  },
  "tags": {
    "index": "nginx-log-*"
  }
}

不支持

說明

您可以定義多條不同的規(guī)則,只要請求命中任意一條規(guī)則,就會觸發(fā)限流。

設(shè)置多個限流器配置

支持同時設(shè)置限流器的多個配置。index和index_patterns的值支持完整索引名稱和索引通配符。aliyun-qos插件的版本不同,設(shè)置多個限流器配置的代碼不同,具體如下。

7.10最新版本

其他版本

PUT /_qos/limiter/<limiterName>
{
  "limiters": {
    "search.qps": "1000",
    "write.tps": "100000",
    "write.throughput": "1000000",
    "write.max_size_per_request": "1000",
    "search_shards.concurrent_count": "10"
  },
  "tags": {
    "index": "nginx-log-*"
  }
}

不支持

說明

您可以定義多條不同的規(guī)則,只要請求命中任意一條規(guī)則,就會觸發(fā)限流。

獲取限流配置

aliyun-qos插件的版本不同,獲取限流配置的代碼不同,具體如下。

操作

7.10最新版本

其他版本

獲取所有限流配置

GET _qos/limiter
GET _qos/_ratelimit

獲取單個指定的限流配置

GET _qos/limiter/<limiterName>
GET _qos/_ratelimit/<limiterName>

獲取多個指定的限流配置

說明

多個限流器之間用英文逗號(,)分隔,不支持通配符。

GET _qos/limiter/<limiterName1,limiterName2>
GET _qos/_ratelimit/<limiterName1,limiterName2>

刪除限流配置

aliyun-qos插件的版本不同,刪除限流配置的代碼不同,具體如下。

操作

7.10最新版本

其他版本

刪除單個指定的限流配置

DELETE _qos/limiter/<limiterName>
DELETE _qos/_ratelimit/<limiterName>

刪除多個指定的限流配置

說明

多個限流器之間用英文逗號(,)分隔,不支持通配符。

DELETE _qos/limiter/<limiterName1,limiterName2>
DELETE _qos/_ratelimit/<limiterName1,limiterName2>

常見問題

Q:如何獲取限流相關(guān)的指標監(jiān)控信息?

A:可以通過以下API獲取:

  • 獲取當前指標數(shù)據(jù)

    • 獲取當前所有指標數(shù)據(jù)

      GET /_qos/limiter/nodes/stats
    • 獲取當前指定{node}指標數(shù)據(jù)

      GET /_qos/limiter/nodes/{nodeId}/stats
    • 獲取當前指定{node}和{limiter}指標數(shù)據(jù)

      GET /_qos/limiter/nodes/{nodeId}/stats/{limiterIds}
  • 獲取歷史指標數(shù)據(jù)

    • 獲取歷史所有指標數(shù)據(jù)

      GET /_qos/limiter/metric
    • 獲取歷史指定{limiter}指標數(shù)據(jù)

      GET /_qos/limiter/metric/{limiterId}