es7新增新節點和下線節點

2022-09-11 16:24:26 字數 2879 閱讀 3374

es集群是由一群相同 cluster.name 節點組成。當有新的節點加入或者有節點離開集群,集群會重新均衡資料在可用節點。

當你的集群只有單例項的時候,所有的主分片都是分布在一台節點上,副本分片無法分配,所以你的集群狀態是yellow。這樣狀態的集群功能齊全但是會有丟資料的風險。

新增節點到集群,可以增加集群的容量和可靠性。預設每個節點是同時具備data node和master-eligible node角色。你也可以自己定製每個node的角色。

當你新增更多節點到乙個集群,集群會自動分配副本分片。當所有的主副分片狀態都為active,集群狀態會變為yellow。

當新增或刪除節點時,es集群會通過更新集群的voting configuration來保持乙個最佳的容錯狀態。voting configuration是指es集群的master-eligible node集合,這是在es7中才有的概念,當集群做出一些決策時比如選舉master節點時會收集 voting configuration的響應。

官方推薦乙個集群有固定數量的master-eligible node,這樣的話擴容或縮容集群只需要增加或刪除master-ineligible node就好了。

新增 master-eligible nodes

當需要新增節點到集群時,只需要配置這個新節點去發現目標集群並啟動。es集群會自動新增節點到voting configuration。

在集群選舉或者加入乙個現有集群時,節點會傳送乙個join請求給master來正式加入集群。你可以配置 cluster.join.timeout 這個引數,這個引數的意思是節點傳送join請求後會等待多久,預設是30s。

下線 master-eligible nodes

下線 master-eligible node時,需要注意千萬不要一次下線太多。比如乙個集群有7個master-eligible node,你希望能減少到3個。如果一次性下掉4臺 master-eligible node,只剩下3臺master-eligible node,數量小於voting configuration的一半,這樣會導致集群癱瘓。

換句話說,如果你一次性下掉了一半及以上數量的 master-eligible node,集群就會不可用。如果發生這種情況只需要把下掉的節點啟動就好。

你要是有至少3個master-eligible nodes,你最好一次下線乙個節點,這樣能給集群足夠的時間調整voting configuration。

如果那只有兩個 master-eligible nodes ,你就不能隨便下線一台 master-eligible node,因為這達到了一半的 voting configuration。es7中有個概念是 voting configuration exclusion list,節點如果被移到這裡面是可以繼續正常工作的,但是集群會忽略這個節點的投票響應。更重要的是,集群不會主動將這個節點從 voting configuration exclusion list 移回 voting configuration。一旦你成功的將節點移入 voting configuration exclusion list,你就可以安全地將這個節點下線。將節點移入 voting configuration exclusion list 的api如下:

post /_cluster/voting_config_exclusions?node_names=node_name

# 新增超時時間,預設30s

post /_cluster/voting_config_exclusions?node_names=node_name&timeout=1m

如果你的請求失敗了,可以放心重試。如果你要移除的節點是master node,那集群會在挑選目前還存活的voting configuration 裡的 master-eligible node 重新發起選舉。

這個api同樣可以一次性移除多個 master-eligible node,比如上面舉的7個節點的例子,就可以一次性移除4台到 voting configuration exclusion list,等待集群確認成功移除後,就可以安全下線這4臺集群。

注意:這個api主要是用來同時下線大於等於一半 master-eligible nodes時使用。如果你只是下線 master-ineligible nodes或者小於一半 master-eligible nodes時,無需使用這個api。

目前的被排除列表時儲存在集群狀態裡,並可以通過下面api檢視:

get /_cluster/state?filter_path=metadata.cluster_coordination.voting_config_exclusions
這個list大小預設是10,可以通過 cluster.max_voting_config_exclusions 這個配置修改。因為這個list是持久的並且被限制大小,所以必須及時清理。通常只有維護集群的時候,才需要有這個移除列表。所以在正常情況下,集群是不應該有voting configuration exclusion list 存在。

乙個節點只有被永久下線,才會被移到排除列表裡。刪除集群裡的排除列表可以使用下面的api:

# 等待這裡的節點被下線後,才會從這個列表裡移除delete /_cluster/voting_config_exclusions

# 直接將節點從列表裡釋放,返回到 voting configuration

delete /_cluster/voting_config_exclusions?wait_for_removal=false

ES6系列十 ES7新特性

陣列 arr.includes 陣列是否包含某個東西 陣列的 arr.keys arr,entries for in 遍歷陣列 下標 key for of 遍歷陣列 值 value,不能用於json let arr a b c console.log arr.includes 1 for let i...

squid節點新增新網域名稱測試

squid節點新增新網域名稱 測試是否快取成功 1 bin bash 2 2014 8 134 clear 清屏 方便輸出結果 56 url 需要測試的url 78 array node 0 節點ip做成乙個關聯陣列 ip以 代替 保護隱私 9 array node 1 10 array node ...

建立並新增新節點,刪除,替換和轉殖

建立標籤節點 document.createlement tagname 建立文字節點 document.createtextnode msg innertext 節點文字內容 如果有 也作為純文字顯示 innerhtml屬性可以解析內部帶有html 的玩呢吧 divnode.innerhtml h...