elasticsearch 節點重啓問題
ElasticSearch集羣的高可用和自平衡方案會在節點掛掉(重啓)後自動在別的結點上覆制該結點的分片,這將導致了大量的IO和網絡開銷。
如果離開的節點重新加入集羣,elasticsearch爲了對數據分片(shard)進行再平衡,會爲重新加入的節點再次分配數據分片(Shard), 當一臺es因爲壓力過大而掛掉以後,其他的es服務會備份本應那臺es保存的數據,造成更大壓力,於是整個集羣會發生雪崩。
生產環境下建議關閉自動平衡。
數據分片與自平衡
關閉自動分片,即使新建index也無法分配數據分片
put http://localhost:9092/_cluster/settings
{
"transient" : {
"cluster.routing.allocation.enable" : "none"
}
}
重啓一個節點
啓動自動分片
put http://localhost:9092/_cluster/settings
{
"transient" : {
"cluster.routing.allocation.enable" : "all"
}
}
關閉磁盤百分比使用限制
PUT /_cluster/settings
{
"transient" : {
"cluster.routing.allocation.disk.threshold_enabled" : false
}
}
elasticsearch集羣Unassigned Shards 無法reroute的問題
#解決elasticsearch集羣Unassigned Shards 無法reroute的問題
#!/bin/bash
IFS=$'\n'
for line in $(curl -s 'http://10.21.2.215:9200/_cat/shards' | fgrep UNASSIGNED); do
INDEX=$(echo $line | (awk '{print $1}'))
SHARD=$(echo $line | (awk '{print $2}'))
echo $INDEX
echo $SHARD
curl -XPOST 'http://10.21.2.215:9200/_cluster/reroute' -d '{
"commands": [
{
"allocate": {
"index": "'$INDEX'",
"shard": '$SHARD',
"allow_primary": true
}
}
]
}'
done