Elasticsearch核心技術與實戰學習筆記 36 | 配置跨集羣搜索

一 序

本文屬於極客時間Elasticsearch核心技術與實戰學習筆記系列。

二 水平擴展的痛點

單集羣 - 當水平擴展時,節點數不能無限增加

  • 當集羣的 meta 信息(節點,索引,集羣狀態)過多,會導致更新壓力變大,單個 Active Master 會成爲性能瓶頸,導致整個集羣無法正常工作

早期版本,通過 Tribe Node 可以實現多集羣訪問的需求,但是還存在一定的問題

  • Tribe Node 會以 Client Node 的方式加入集羣。集羣中 Master 節點的任務變更需要 Tribe Node 的迴應才能繼續
  • Tribe Node 不保存 Cluster State 信息,一旦重啓,初始化很慢
  • 當多個集羣存在索引重名的情況下,只能設置一種 Perfer 規則

2.1 跨集羣搜索 - Cross Cluster Search

早期 Tribe Node 的方案存在一定的問題,現已被 Deprecated
ES5.3 引入跨集羣搜索的功能(Cross Cluster Search),推薦使用

  • 允許任何節點扮演 federated 節點,以輕量的方式,將搜索請求進行代理
  • 不需要以 Client Node 的形式加入其它集羣

2.2 集羣的配置

2.3 demo

//啓動3個集羣

bin/elasticsearch -E node.name=cluster0node -E cluster.name=cluster0 -E path.data=cluster0_data -E discovery.type=single-node -E http.port=9200 -E transport.port=9300
bin/elasticsearch -E node.name=cluster1node -E cluster.name=cluster1 -E path.data=cluster1_data -E discovery.type=single-node -E http.port=9201 -E transport.port=9301
bin/elasticsearch -E node.name=cluster2node -E cluster.name=cluster2 -E path.data=cluster2_data -E discovery.type=single-node -E http.port=9202 -E transport.port=9302


//在每個集羣上設置動態的設置
PUT _cluster/settings
{
  "persistent": {
    "cluster": {
      "remote": {
        "cluster0": {
          "seeds": [
            "127.0.0.1:9300"
          ],
          "transport.ping_schedule": "30s"
        },
        "cluster1": {
          "seeds": [
            "127.0.0.1:9301"
          ],
          "transport.compress": true,
          "skip_unavailable": true
        },
        "cluster2": {
          "seeds": [
            "127.0.0.1:9302"
          ]
        }
      }
    }
  }
}

我沒有測試。

#cURL
curl -XPUT "http://localhost:9200/_cluster/settings" -H 'Content-Type: application/json' -d'
{"persistent":{"cluster":{"remote":{"cluster0":{"seeds":["127.0.0.1:9300"],"transport.ping_schedule":"30s"},"cluster1":{"seeds":["127.0.0.1:9301"],"transport.compress":true,"skip_unavailable":true},"cluster2":{"seeds":["127.0.0.1:9302"]}}}}}'

curl -XPUT "http://localhost:9201/_cluster/settings" -H 'Content-Type: application/json' -d'
{"persistent":{"cluster":{"remote":{"cluster0":{"seeds":["127.0.0.1:9300"],"transport.ping_schedule":"30s"},"cluster1":{"seeds":["127.0.0.1:9301"],"transport.compress":true,"skip_unavailable":true},"cluster2":{"seeds":["127.0.0.1:9302"]}}}}}'

curl -XPUT "http://localhost:9202/_cluster/settings" -H 'Content-Type: application/json' -d'
{"persistent":{"cluster":{"remote":{"cluster0":{"seeds":["127.0.0.1:9300"],"transport.ping_schedule":"30s"},"cluster1":{"seeds":["127.0.0.1:9301"],"transport.compress":true,"skip_unavailable":true},"cluster2":{"seeds":["127.0.0.1:9302"]}}}}}'


#創建測試數據
curl -XPOST "http://localhost:9200/users/_doc" -H 'Content-Type: application/json' -d'
{"name":"user1","age":10}'

curl -XPOST "http://localhost:9201/users/_doc" -H 'Content-Type: application/json' -d'
{"name":"user2","age":20}'

curl -XPOST "http://localhost:9202/users/_doc" -H 'Content-Type: application/json' -d'
{"name":"user3","age":30}'


#查詢
GET /users,cluster1:users,cluster2:users/_search
{
  "query": {
    "range": {
      "age": {
        "gte": 20,
        "lte": 40
      }
    }
  }
}

當然在Kibana中,打開“Management管理”,然後單擊“Index Patterns索引模式”。 

這個比較實用,比如通常的日誌蒐集,Logstash通常以logstash-YYYY.MMM.DD格式創建一系列索引,這個可以適配多天的。索引模式包含通配符(*)以匹配多個索引。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章