一、背景
生產環境由於某些原因需要跨機房遷移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節點,此時整個遷移任務完畢。