讓Elasticsearch集群冷熱分享、讀寫分離

RocYlz 10年前發布 | 43K 次閱讀 ElasticSearch 搜索引擎

來自: http://blog.csdn.net//jiao_fuyou/article/details/50511255


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

一、冷熱分離

二、讀寫分離

  • 即使這樣處理后,hot集群即使只有一兩數據,但是一般象log類數據,查詢的一般都是最近一兩天的數據,致使hot集群負載依然很大。es有沒有辦法實現像mysql主從的效果,然后查詢只在從機上查詢?有沒有辦法讓副本分布在某些特定節點上,然后查詢只查詢這些節點?
  • 按《elasticsearch高級配置之分片分布規則設置》中(強制分布規則)來設置,迫使不允許副本被分配到與主分片相同的區域,比如:讓副本數據分布到stale集群上。
  • 上面的規則有時并不能完全的控制復本一定在某個集群上,它只能盡量保證主分片和副本不在一個集群上,這個時候同樣也可以起個定時任務,手動的將副本reroute到集群節點上

    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.html

三、查詢選項

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

    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=preference

四、總結

  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,也是有可能影響到寫入的。

    所以,你只能開啟一個副本——寫入副本數要求是從二個副本開始才有。

  5. </ol> </div>

 本文由用戶 RocYlz 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!