亞寵展、全球寵物產業風向標——亞洲寵物展覽會深度解析
1694
2022-05-29
用戶在上華為云的時候經常需要將ES數據搬遷到云上的CSS服務,搬遷的源可以是自建的ES集群或者是其他云廠商的ES集群。目前的遷移方式一般是離線遷移,需要業務短暫停服。
遷移方法
遷移方法一般有以下幾種
Logstash
snapshot/restore
reindex
其他工具如elasticsearch-dump, esm等
下面介紹Logstash和snapshot/restore的遷移方式。
Logstash
適合數據量不大 的場景。
使用指導
Logstash是ELK工具棧中的L,Logstash是開源的數據處理管道, 能夠從多個來源采集數據,轉換數據,然后將數據發送到需要的目的端。在用作ES數據遷移時,源端和目的端都是ES集群,源端使用ES的scroll API分頁讀取全量數據,目的端使用Bulk API批量寫入數據。
下載Logstash
可以從華為云鏡像站下載Logstash: https://mirrors.huaweicloud.com/logstash/
與ES版本兼容性可以查看這張表: https://www.elastic.co/cn/support/matrix#matrix_compatibility,如源端和目標端的ES版本都是7.6.2,可以選擇使用Logstash ?6.8.x-7.9.x都是兼容的,盡量選擇可兼容的高版本。
選擇一臺節點作為遷移節點,用來部署Logstash實例,該節點需要與源端和目標端的ES的網絡都是通的,可以采用VPN或者專線連接。將下載的Logstash上傳到該節點。
配置Logstash,以下配置為一個示例
input{
elasticsearch{
// 源端es地址
hosts=> ?["http://192.168.1.214:9200", "http://192.168.1.215:9200"]
// 需要遷移的索引列表,以逗號分隔,也可以使用通配符,如 index-*
index=> "index1,index2"
// 以下保持默認即可
docinfo=>true
// Logstash version >= 6.7 支持,低于該版本刪除該配置
slices => 10
size => 5000
}
}
filter {
mutate {
// 去除無關字段
remove_field => ["@timestamp", "@version"]
}
}
output{
elasticsearch{
// 目的端es地址
hosts => ["http://192.168.1.248:9200", "http://192.168.1.249:9200"]
// 目的端索引名稱,以下配置為和源端保持一致
index => "%{[@metadata][_index]}"
// 目的端索引type,以下配置為和源端保持一致
document_type => "%{[@metadata][_type]}"
// 目標端數據的_id,如果不需要保留原_id,可以刪除以下這行,刪除后性能會更好
document_id => "%{[@metadata][_id]}"
}
}
在遷移的時候可以同時使用多臺機器多個Logstash實例同時遷移來提高遷移速度。
優缺點
Logstash使用簡單,配置清晰,能夠很好的支持ES的數據遷移。
缺點在于在遷移過程中,如果出現異常會從頭重新開始,異常可能如網絡閃斷、ES負載高導致scroll API無響應等。
Logstash遷移只會遷移數據,索引的Mapping需要在遷移前在目的端ES集群提前創建。
如果索引數據中有時間戳字段,并且可以通過時間戳過濾出來入庫的新數據,則可以使用Logstash指定query來實現增量遷移。
snapshot/restore
適用于數據量大的場景。
使用指導
snapshot/restore是用來備份和恢復ES數據的,可以通過snapshot/restore來進行跨集群的數據遷移,在源端集群做備份,在目標端集群做恢復。
備份恢復的版本兼容性如下表所示:
如上表能看出,在源端為1.x版本做備份,可以恢復到目標端為2.x的集群中,其他類推。
在源端集群中創建repository
創建備份以前需要先創建repository,repository包含以下幾種類型:
以下是在上海3創建obs備份恢復的repository的命令:
PUT _snapshot/my_backup
{
"type" : "obs",
"settings" : {
"bucket" : "es-snapshots",
"base_path" : "es-data/",
"chunk_size" : "2g",
"endpoint" : "obs.cn-east-3.myhuaweicloud.com",
"region" : "cn-east-3",
"compress" : "true",
"access_key": "Acess Key",
"secret_key": "Secret Key",
"max_restore_bytes_per_sec": "100mb",
"max_snapshot_bytes_per_sec": "100mb"
}
}
obs:華為云對象存儲,需要安裝插件,并且打通源端集群與云上OBS的網絡
fs:共享文件系統,將備份文件存放在共享文件系統中,也可以使用云上SFS服務掛載到ES本地盤
s3:AWS S3對象存儲
hdfs:HDFS文件系統中
在源端集群中創建備份
在源端集群執行命令開始創建備份:
PUT _snapshot/my_backup/snapshot_1
{
"indices": "data-*",
"ignore_unavailable": true,
"include_global_state": false
}
其中indices為需要備份的索引名,支持通配符。
將源端集群中的備份文件復制到目標集群倉庫中
在第二步完成以后,將源端集群執行的備份文件復制到目標集群能訪問的倉庫中,如果是使用的華為云的obs作為備份倉庫,則不需要復制,在云上可以直接訪問到。
在目標端集群中創建repository
目標端集群中創建repository和在源端集群中創建倉庫一樣,如使用華為云obs,則與源端創建命令完全一樣。
從備份中恢復索引
從備份文件中恢復索引,可以配置需要恢復哪些索引,已經對索引名字進行重命名。
POST /_snapshot/my_backup/snapshot_1/_restore
{
"indices": "data-*",
"ignore_unavailable": true,
"include_global_state": false,
"rename_pattern": "(.+)",
"rename_replacement": "$1"
}
查看備份恢復狀態
GET?_snapshot/my_backup/snapshot_1/_status
優缺點
備份恢復的方式比較適合數據量較大的場景,采用直接備份和恢復索引文件的方式。但是這種方式需要在源端安裝插件并且重啟集群,可能會有一定的業務影響,可以考慮采用滾動的方式重啟。
備份恢復在多次執行備份的時候是增量的模式,歷史備份中已經存在的文件不會重復備份。
備份恢復是完全離線的方式,新增的數據不建議再采用備份恢復來遷移,新增數據一般不會很大,建議使用Logstash方式。
Summary
使用Logstash做集群遷移時,要求運行Logstash的機器可以同時訪問兩端的集群,網絡不通的情況下無法使用Logstash遷移。而snapshot/restore無此限制。
Logstash將數據逐條讀取出來,再逐條寫入,所以數據量太大不適合使用。
EI企業智能 云搜索服務 CSS AI平臺
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。