了解esunassigned

一、初識esunassigned

esunassigned是一個開源的Elasticsearch插件,旨在解決Elasticsearch無法自動分配未分配shard的問題。

Elasticsearch是一個基於Lucene庫的分散式全文搜索引擎,提供了高效、強大的搜索功能。它將數據拆分成多個分片(shard)並存儲在不同的節點上,提高了搜索效率,同時也提高了搜索的容錯性。

然而,在集群運行中,有些分片可能會因為各種原因未被分配到節點上,這時就需要手動處理,而esunassigned就是解決這個問題的利器。

二、esunassigned的優勢

esunassigned具有以下優點:

  • 自動分配未分配分片。
  • 能夠定期監控未分配分片情況。
  • 支持可配置的重試機制和超時機制。
  • 支持Elasticsearch版本5.0及以上。

要使用esunassigned,只需要簡單地把它放到Elasticsearch的plugins目錄下,並在elasticsearch.yml配置文件中添加以下配置項即可:

esunassigned:
  interval: 1m
  timeout: 5m
  retry:
    attempts: 3
    delay: 1m

三、esunassigned的使用

使用esunassigned非常簡單,只需在Elasticsearch集群中啟用該插件即可。當插件啟動後,它會定期掃描未分配的分片並自動將它們分配到可用的節點上。

以上述配置文件為例:

  • interval:表示監控時間間隔,本例中設為1分鐘。
  • timeout:表示分配超時時間,本例中設為5分鐘。
  • retry:是重試機制的相關配置。
    • attempts:表示嘗試次數,本例中設為3次。
    • delay:表示重試的時間間隔,本例中設為1分鐘。

根據實際情況,可以根據需要進行調整。

四、esunassigned源碼剖析

esunassigned的源碼主要分為三個部分:

  • Monitor:監控未分配的分片。
  • Allocator:分配未分配的分片到可用節點。
  • Utils:工具類。

需要注意的是,分配分片涉及到集群路由、數據遷移等複雜的操作,因此需要考慮各種異常情況。esunassigned做了很多容錯處理,保證了其健壯性。

下面是分配分片到節點的核心代碼:

ClusterAllocationExplanation explanation = allocator.explainAllocation(shard, unassignedInfo, clusterState, checkExisting, includeYesDecisions, explainCancellableTasks);
if (logger.isDebugEnabled()) {
    logger.debug("[{}] [{}] - allocation explanation [{}]", new Object[]{shard.topLevelReason(), shard, explanation});
}

if (explanation != null && explanation.isYes()) {
    try {
        shardStateChange(state, "from [unassigned] to [initializing]");
        allocationService.reroute(Collections.singleton(shard), "allocate_unassigned");
    } catch (Throwable t) {
        logger.warn("[{}] [{}] - allocation failed, reason [{}]", new Object[]{shard.topLevelReason(), shard, explanation.getExplanation()});
        shardStateChange(state, "from [unassigned] to [unassigned]", getShardValue(shardState, shard.getIndex(), shard.getId()));
        return false;
    }
    return true;
}

實現了自動分配未分配分片功能後,就可以耐心等待esunassigned定期分配未分配分片了。

五、esunassigned存在的問題和解決方案

使用esunassigned可能會遇到以下問題:

  • 分配分片失敗。
  • 分配分片後,仍有部分分片未被分配。
  • 分配分片時出現異常。

面對這些問題,我們可以採取以下措施:

  • 查看日誌,了解失敗原因。
  • 手動分配未分配的分片。
  • 升級或降級esunassigned,或切換其他插件。

當然,使用esunassigned最好還是進行一些基本的ES操作,如定期維護、備份數據等,從而避免分片未分配或其他問題的出現。

原創文章,作者:VGGL,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/146392.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
VGGL的頭像VGGL
上一篇 2024-10-29 19:00
下一篇 2024-10-29 19:00

發表回復

登錄後才能評論