讓Elasticsearch叢集冷熱分離、讀寫分離【轉】
阿新 • • 發佈:2018-12-29
轉自:https://blog.csdn.net/jiao_fuyou/article/details/50511255
一、冷熱分離
二、讀寫分離
- 即使這樣處理後,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" } } ] }
- 詳細情況參考:
三、查詢選項
-
上面兩種方法將冷熱,讀寫資料都分佈到了不同的叢集上,下面看看如何在指定查詢引數,只查詢stale叢集節點上的資料。
POST /_search?preference=_only_nodes:zone:stale { "query": { "match": { "title": "elasticsearch" } } }
上面這個可以只查詢node.zone: stale節點資料。這個查詢選項要求ES版本在1.7.0以上。關於查詢選項詳細資料參考:
四、總結
- 已經不再indexing的索引,通過require.zone的方式遷移到stale叢集上,完成冷熱分離;
- 還在indexing的索引,通過reroute將replica shard強制allocate到stale叢集上;
- search的時候,通過?preference=_replica或者?preference=_only_nodes:xxx的方式指定讀取哪些。
-
但是需要注意一點的是:因為es的replica也是一個實際需要cpu和io的indexing過程,而且indexing本身也有要求要寫夠一定副本數來才算寫入完成。所以,你即使只請求replica,也是有可能影響到寫入的。
所以,你只能開啟一個副本——寫入副本數要求是從二個副本開始才有。