騰訊雲 Elasticsearch 運維篇(十三)數據遷移
- 2020 年 2 月 23 日
- 筆記
前言
前面我們通過通過騰訊雲控制台快速構建了一個ES集群,並能通過雲控制台管理介面或者CVM操作管理ES集群。我們知道ES是一個存儲搜索分析引擎,那麼如何讓自己的現有的ES集群的數據跨平台的遷移到騰訊雲上來呢??我們推薦ES官方的snapshot方法。下面為大概的過程(因為本人帳號屬於集體帳號,處於安全考慮後面的部分過程粗略講一下)
一、snapshot(跨集群數據、數據量大)
snapshot api 是 ES 用於對數據進行備份和恢復的一組 api 介面,可以通過 snapshot api 進行跨集群的數據遷移,原理就是從源 ES 集群創建數據快照,然後在目標 ES 集群中進行恢復。
現有ES集群IP: 172.18.X.X 要求: 能上外網


目標ES集群VIP:10.1.0.7 同網段CVMIP為:10.1.0.14

需求: 將原ES集群的索引資訊通過快照的形式遷移到目標ES。解決步驟如下:
1,首先:在自有的源ES集群上,創建快照所要存儲的倉庫-repository。倉庫類型fs ,首先要在ES配置文件elasticsearch.yml設置倉庫路徑,注意:此路徑標識的目錄在本地一定要存在!!

2,其次,重啟ES集群 確定節點都正常啟動。
3,接下來,我們調用snapshot api 創建 repository 使用如下命令:

返回結果:顯示錯誤。如下」:

報錯提示的意思是訪問被拒絕。。。操作多次,仍是相同的錯誤。那麼是不是倉庫所在路徑的文件夾沒許可權呢??
所以,我改了一下文件夾許可權 chown -R elas:elas /usr/local/hezhen/test 如下所示:

然後再次啟動ES集群,讓配置生效。再次執行上面的命令,發現成功了。如下圖:

原因很簡單:ES 5.x版本後,默認是需要通過普通用戶來啟用服務的。因為我們剛新建的文件夾的許可權是root。elas去啟動服務的時候無法將命令寫進屬於root的文件夾。自然就報錯。
3,在自有的集群中創建索引快照,如下:創建一條索引的快照


創建完後,文件夾裡邊有數據了,驗證一下「

如果要備份所有索引,可以使用如下命令:
PUT _snapshot/aa_buckup/snapshot_1?wait_for_completion=true
查看快照資訊 GET _snapshot/aa_buckup/snapshot_1?pretty

4,目標ES集群中創建repository
方法:在騰訊雲上創建 COS 對象 bucket,把倉庫建在 COS 的某個 bucket 下。步驟
首先:你需要登錄到騰訊雲控制台的COS(對象存儲服務)項去新建一個bucket桶,並命名為自己習慣的名字
其次:在Kibana命令行下去新建一個倉庫,將其映射到騰訊雲

如果報下面的錯,說明你要去雲控制台去設置安全秘鑰與訪問碼

那麼這樣在目標集群上就把ES倉庫建立在自己的Bulk上了。
最後,將源 ES 集群創建好的 snapshot 上傳至目標 ES 集群創建好的倉庫中。(打包--下載--解壓----上傳)
5,在目標集群從快照恢復索引 使用此命令即可
GET _snapshot/aa_buckup/snapshot_1/_restore?wait_for_completion=true
6,查看快照恢復狀態
GET _snapshot/_status
二、總結
1,ES數據作集群遷移的時候根據不同的使用場景有不同的方法。比如還有elasticsearch-dump 、Logstash.他們的區別是:elasticsearch-dump 和 logstash 遷移方式更適合於源 ES 集群和目標 ES 集群處於同一網路的情況下進行遷移。需要跨雲廠商的遷移,可以選擇使用 snapshot 的方式進行遷移,例如從阿里雲 ES 集群遷移至騰訊雲 ES 集群。
2,elasticsearchdump 工具和 MySQL 資料庫用於做數據備份的工具 mysqldump 類似,都是邏輯備份,需要將數據一條一條導出後再執行導入,所以適合數據量小的場景下進行遷移。
3,snapshot 的方式適合數據量大的場景下進行遷移。
因此,我們這裡重點介紹了一下snapshot的使用。因為它不受網路限制,屬於離線跨群的數據遷移工具。後面有時間我們再繼續深入講解它更多的案例應用。

