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...