ES:在線遷移集群索引,數據不丟失


一、背景
生產環境由於某些原因需要跨機房遷移ES集群,或者同機房原有集群中所有節點全部更換,期間ES索引要求完整,客戶端請求中斷不超過五分鍾。
二、應用場景 1、同機房不同集群之間數據遷移; 2、跨機房不同集群之間數據遷移。
三、遷移方案
A機房ES集群 --> B機房ES集群
1、遷移任務:假設A機房ES集群(3master、3data共三台物理機)遷移到B機房ES集群(3master、3data共三台物理機);
2、遷移思路:通過集群擴容的方式加入B機房ES節點,通過縮容的方式去掉A機房節點,始終保持一個集群原則,分片在集群內部進行遷移,集群及索引配置不更改,對業務友好;
3、對業務影響: 遷移期間有兩次集群master重選舉環節,選舉期間ES集群對外不可用,每次選舉時長不超過2分鍾;
4、遷移步驟:
  1.在A機房ES集群擴容3master、3data節點,新節點使用首鳴的物理機,觀察新增的3master、3data全部加入到A機房ES集群,此時B機房3master、3data和A機房3master、3data共同組成1個6master、6data節點的跨機房集群;       discovery.zen.ping.unicast.hosts: ["bjsm_master1:tcp_port","bjsm_master2:tcp_port","bjsm_master3:tcp_port","bjdz_master1:tcp_port","bjdz_master2:tcp_port","bjdz_master3:tcp_port" ]    配置首鳴、大族共6個master節點     2.在集群內部遷移A機房data節點上的分片到B機房的data節點上,此時集群中所有數據分片都在B機房的data節點上;       執行RESTful API遷移分片: curl -H 'Content-Type:application/json' -XPUT 'http://bjsm_master1:http_port/_cluster/settings' -d'{"transient" : {"cluster.routing.allocation.exclude._ip" : "IP"}}'     3.更改ES客戶端配置文件中“data.elasticsearch.cluster-nodes”,去掉A機房的節點配置,改成B機房的master節點(tcp端口),然后客戶端實例灰度重啟並生效配置;     4.下線A機房的3個data節點,再下線A機房的兩個副master節點,最后下線A機房的主master節點,此時集群會進入master節點重新選舉,且新的主master節點一定會在B機房的3個master節點中產生,此時集群會有短暫的不可訪問(兩分鍾左右);     5.去掉B機房master、data節點配置文件中的大族節點配置,逐個重啟data節點,再重啟副master節點,最后重啟主master節點(集群會有最長兩分鍾的不可訪問時間)后全部生效,等待ES集群再次恢復;       discovery.zen.ping.unicast.hosts: ["bjsm_master1:tcp_port","bjsm_master2:tcp_port","bjsm_master3:tcp_port" ]   只留B機房的3個master節點     6.B機房的客戶端訪問均正常后,下線A機房的3個master、3個data節點,此時整個遷移任務完畢。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM