es分片遷移 ES分片重新路由解決分片不平衡問題

2021-10-20 11:35:22 字數 2552 閱讀 8368

1、發現問題

根據kinbana的monitor發現es集群的索引分片分布不均勻,硬碟使用也不平衡。

很奇怪分片少的硬碟空間還用得多,而分片多的硬碟反而用得少,還沒搞清楚原因,es會自己平衡集群分片,由於某個節點分片少,會不停的往這個節點建分片,導致硬碟空間差距越來越大,這個問題影響到了儲存,必須要解決。

2、查詢解決方案

根據官方文件可以重新路由,移動分片以達到分片平衡,但由於手動執行命令太慢太累了,於是決定寫個指令碼,

3、最終解決方案:指令碼批量移動

shell指令碼:查詢節點重複分片並重新路由(移動分片)

# 根據引數傳入的索引pattern獲取分片資訊

curl -s -xget "$/_cat/shards/$?v&h=index,node,ip,shard,prirep,state,store,unassigned.reasons" > $src_file

# 調awk指令碼提取單節點有重複分片的索引

awk -f extract.awk $src_file |sort > $re_file

index=""

from_node=""

to_node=""

for line in $(cat $re_file)

do#line=$

ifs=', ' read -r -a line <<< "$line"

if [[ $ -eq 3 ]]; then

#printf "$, $, $ \n"

index=$

from_node=$

total=$

count=`expr $total - 1`

to_nodes=($(get_to_nodes "$" $count))

shards=($(grep -e "$\s+$" $src_file|awk '$5 =="p" end'))

for idx in "$"

doshard=$

to_node=$

-d '\",\"shard\":$,\"from_node\":\"$\",\"to_node\":\"$\"}}]}'"

#echo "$\s+$, $total-$, $to_node: $cmd"

rs=`eval $cmd`

echo "move $index shard $shard from $from_node to $to_node: $rs"

#exit 0

done

fi#exit 0

done

awk指令碼:提取重複分片資訊

#!/bin/awk -f

$5 == "p" end

4、執行

# 重新路由平衡2023年2月的分片

bash -e ./reroute.sh *-2019.02.*

5、處理結果

還沒執行完。。。。後面補處理結果

es 分片數量

適當的提公升分片數量可以提公升建立索引的速度 一般情況下 乙個索引庫建立5 20個分片是最合適的 注意 如果分片過少或者過多,都會降低檢索的速度 分片數過多會導致 1 會導致開啟比較多的檔案 2 分片是儲存在不同機器上的,分片數越多,機器之間的互動也就越多 分片數太少導致 單個分片索引過大,降低整體...

修改ES分片規則

es查詢的時候預設是隨機從一些分片中查詢資料,可以通過配置讓es從某些分片中查詢資料 1 local 指查詢操作會優先在本地節點有的分片中查詢,沒有的話再在其它節點查詢。2 primary 指查詢只在主分片中查詢 3 primary first 指查詢會先在主分片中查詢,如果主分片找不到 掛了 就會...

es中主分片和副本分片

我們知道es中儲存資料的時候是有主分片和副本分片的,那麼副本分片的作用有哪些呢?1.作為備份,防止主分片崩潰 2.分擔查詢請求,請求會在主分片和副本分片之間均勻分布 第一點 主副本之前角色的切換如何發生的?當主分片不可用時,es就會重新進行選舉,把最新的副本分片提高到主分片的地位,這裡es的mast...