讓Elasticsearch集羣冷熱分離、讀寫分離【轉】

轉自:https://blog.csdn.net/jiao_fuyou/article/details/50511255html

根據Elasticsearch中文社區《ES冷熱分離(讀寫分離) hot, stale 場景》一篇整理的。node

1、冷熱分離

2、讀寫分離

  • 即便這樣處理後,hot集羣即便只有一兩數據,可是通常象log類數據,查詢的通常都是最近一兩天的數據,導致hot集羣負載依然很大。es有沒有辦法實現像mysql主從的效果,而後查詢只在從機上查詢?有沒有辦法讓副本分佈在某些特定節點上,而後查詢只查詢這些節點?
  • 按《elasticsearch高級配置之分片分佈規則設置》中(強制分佈規則)來設置,迫使不容許副本被分配到與主分片相同的區域,好比:讓副本數據分佈到stale集羣上。
  • 上面的規則有時並不能徹底的控制複本必定在某個集羣上,它只能儘可能保證主分片和副本不在一個集羣上,這個時候一樣也能夠起個定時任務,手動的將副本reroute到集羣節點上elasticsearch

    POST /_cluster/reroute
    {
        "commands" : [ { "move" : { "index" : "test", "shard" : 0, "from_node" : "node1", "to_node" : "node2" } }, { "allocate" : { "index" : "test", "shard" : 1, "node" : "node3" } } ] }
  • 詳細狀況參考: 
  • https://www.elastic.co/guide/en/elasticsearch/reference/2.1/modules-cluster.html 
    https://www.elastic.co/guide/en/elasticsearch/reference/2.1/cluster-reroute.htmlide

3、查詢選項

  • 上面兩種方法將冷熱,讀寫數據都分佈到了不一樣的集羣上,下面看看如何在指定查詢參數,只查詢stale集羣節點上的數據。ui

    POST /_search?preference=_only_nodes:zone:stale
    {
        "query": { "match": { "title": "elasticsearch" } } }
  • 上面這個能夠只查詢node.zone: stale節點數據。這個查詢選項要求ES版本在1.7.0以上。關於查詢選項詳細資料參考: 
  • https://www.elastic.co/guide/en/elasticsearch/reference/1.7/search-request-preference.html?q=preferencespa

4、總結

    1. 已經再也不indexing的索引,經過require.zone的方式遷移到stale集羣上,完成冷熱分離;
    2. 還在indexing的索引,經過reroute將replica shard強制allocate到stale集羣上;
    3. search的時候,經過?preference=_replica或者?preference=_only_nodes:xxx的方式指定讀取哪些。
    4. 可是須要注意一點的是:由於es的replica也是一個實際須要cpu和io的indexing過程,並且indexing自己也有要求要寫夠必定副本數來纔算寫入完成。因此,你即便只請求replica,也是有可能影響到寫入的。.net

      因此,你只能開啓一個副本——寫入副本數要求是從二個副本開始纔有。

相關文章
相關標籤/搜索