动态

详情 返回 返回

Easysearch 冷熱架構實戰 - 动态 详情

在之前的文章中,我們介紹瞭如何使用索引生命週期策略來管理索引。如果要求索引根據其生命週期階段自動在不同的節點之間遷移,還需要用到冷熱架構。我們來看看具體如何實現。

冷熱架構

冷熱架構其實就是在 Easyearch 集羣中定義不同屬性的節點,這些節點共同組成冷熱架構。比如給所有熱節點一個 hot 屬性,給所有冷節點一個 cold 屬性。在 Easyearch 中分配節點屬性是通過配置文件(easysearch.yml)來實現的,比如我要定義一個熱節點和一個冷節點,我可以在對應節點的配置文件中添加如下行:

# 熱節點添加下面的行
node.attr.temp: hot

# 冷節點添加下面的行
node.attr.temp: cold

有了這些屬性,我們就可以指定索引分片在分配時,是落在 hot 節點還是 cold 節點。

查看節點屬性

測試環境是個 2 節點的 Easysearch 集羣。

比如我創建新索引 test-index,希望它被分配到 hot 節點上。

PUT test-index
{
  "settings": {
    "number_of_replicas": 0,
    "index.routing.allocation.require.temp": "hot"
  }
}

可以看到 test-index 索引的分片分配到 hot 節點 node-1 上。我們修改索引分配節點的屬性,讓其移動到 cold 節點 node-2 上。

PUT test-index/_settings
{
  "settings": {
    "index.routing.allocation.require.temp": "cold"
  }
}

生命週期與冷熱架構

在上面的例子中,我們通過索引分配節點屬性對索引“坐落”的節點進行了控制。在索引生命週期策略中也支持對該屬性進行修改,實現索引根據生命週期階段自動在不同的節點之間移動的目的。

比如我們定義一個簡單的索引策略:

  • 索引創建後進入 hot 階段,此階段的索引被分配到 hot 節點
  • 創建索引 3 分鐘後,索引進入 cold 階段,此階段索引分片移動到 cold 節點

創建策略

PUT _ilm/policy/ilm_test
{
  "policy": {
    "phases": {
      "hot": {
        "min_age": "0m",
      },
      "cold": {
        "min_age": "3m",
        "actions": {
          "allocate" : {
            "require" : {
              "temp": "cold"
            }
          }
        }
      }
    }
  }
}

生命週期策略後台是定期觸發的任務,為了更快的觀測到效果,可以修改任務觸發週期為每分鐘 1 次。

PUT _cluster/settings
{
  "transient": {
    "index_lifecycle_management.job_interval":"1"
    }
}

創建索引模板

創建完索引生命週期策略,還需要索引模板把索引和生命週期策略關聯起來。我們創建一個模板把所有 ilm_test 開頭的索引與 ilm_test 生命週期策略關聯,為了便於觀察,指定索引沒有副本分片。

PUT _template/ilm_test
{
    "order" : 100000,
    "index_patterns" : [
      "ilm_test*"
    ],
    "settings" : {
      "index" : {
        "lifecycle" : {
          "name" : "ilm_test"
        },
        "number_of_replicas" : "0",
        "routing.allocation.require.temp": "hot"
      }
    }
  }

創建索引

創建一個 ilm_test 開頭的索引,應用上一步創建的索引模板。

POST ilm_test_1/_doc
{
  "test":"test"
}

查看索引分片分配情況。

目前索引存儲在 node-1 節點,按計劃 3 分鐘後將會移動到 node-2 上。

至此我們已通過索引生命週期策略實現了索引分片的移動,其實支持的操作還有很多,比如: rollover、close、snapshot 等,詳情請參閲官方文檔。

關於 Easysearch

INFINI Easysearch 是一個分佈式的搜索型數據庫,實現非結構化數據檢索、全文檢索、向量檢索、地理位置信息查詢、組合索引查詢、多語種支持、聚合分析等。Easysearch 可以完美替代 Elasticsearch,同時添加和完善多項企業級功能。Easysearch 助您擁有簡潔、高效、易用的搜索體驗。

官網文檔:https://docs.infinilabs.com/easysearch

user avatar Rocokingdom2024 头像 NobodyCares 头像 lfree 头像
点赞 3 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.