日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Elasticsearch 跨网络、跨集群同步选型指南

發布時間:2024/1/18 编程问答 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Elasticsearch 跨网络、跨集群同步选型指南 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、兩個同步實戰問題

  • 問題1:我想從目前的阿里云上6.7版本的es商業版,遷移到自己的7.10的自建環境,證書不一樣,無法遠程 無法ccr,有沒有實時同步的工具呀?還是只能用logstash ?

  • 問題2:es 2個索引數據同步有什么組件或者方案嗎?

2、問題解析

這是個經常被問到的問題。涉及到跨版本、跨網絡、跨集群的索引數據的遷移或同步。我們拆解一下:

2.1 跨版本

7.X 是當前的主流版本,早期的業務系統會停留在6.X、5.X 甚至 2.X、1.X 版本。

同步數據要注意:7.X 和 早期版本的不同?

7.X 版本已經經歷了7.0——7.12 12+個小版本的迭代了,且7.0版本發布時間:2019-04-10,已經過去了2年+時間。

同步要關注的一個核心點:

官方說明更具備說服力:“Before 7.0.0, the mapping definition included a type name. Elasticsearch 7.0.0 and later no longer accept a default mapping. ”

  • 6.X版本:還有 type 的概念,可以自己定義。

  • 7.X版本:type 就是_doc。

實戰舉例說明:在 7.X 指定 type 寫入數據:

PUT?test-002/mytype/1 {"title":"testing" }

會有如下的警告:

#!?[types?removal]?Specifying?types?in?document?index?requests?is?deprecated,?use?the?typeless?endpoints?instead?(/{index}/_doc/{id},?/{index}/_doc,?or?/{index}/_create/{id}).

https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html

2.2 跨網絡

兩個集群不在一個局域網內,一個掛在云端、一個在本地。

這是常見的業務場景之一,至少我也這么干過。

2.3 跨集群

源數據和目的數據分布在兩個不同的集群。

3、同步方案對比

如下幾個同步方案,我們邊實戰邊解讀。

3.0 實戰環境準備

為了演示方便,我們把環境簡化。復雜環境,原理一致。

  • 集群1:云端,單結點源集群:172.21.0.14:19022。

  • 集群2:云端,單結點目的集群:172.21.0.14:19205。

  • 兩個集群共享一臺云服務器,CPU:4核,內存:8G。

版本都一致,都是 7.12.0 版本。

測試數據:100W條(腳本自動生成)。

單條記錄如下:

"_source"?:?{"name"?:?"9UCROh3","age"?:?16,"last_updated"?:?1621579460000}

3.1 方案一:reindex 跨集群同步

3.1.1 reindex 前置條件:設置白名單

在目標集群上設置源集群的白名單,具體設置只能在:elasticsearch.yml 中。

reindex.remote.whitelist:?"172.21.0.14:19022"

注意,如下實戰不要在kibana dev tools測試,除非你已經修改了默認超時時間。

3.1.2 reindex 同步實戰

POST?_reindex {"source":?{"remote":?{"host":?"http://172.21.0.14:19022"},"index":?"test_data","size":10000,"slice":?{"id":?0,"max":?5}},"dest":?{"index":?"test_data_from_reindex"} }

兩個核心參數說明如下:

  • size:默認一次 scroll 值大小是 1000,這里設置大了 10 倍,是 10000。

  • slice:把大的請求切分成小的請求,并發執行。(ps:我這里用法不嚴謹)。

3.1.3 reindex 同步實戰結論

腳本測試,reindex 同步 100W 數據,耗時:34 s。

3.2 方案二:elasticdump 同步

https://github.com/elasticsearch-dump/elasticsearch-dump

3.2.1elasticdump 安裝注意事項

  • elasticdump 前置依賴是 node,node要8.0+之后的版本。

[root@VM-0-14-centos?test]#?node?-v v12.13.1 [root@VM-0-14-centos?test]#?npm?-v 6.12.1
  • 安裝成功標志:

[root@VM-0-14-centos?test]#?elasticdump?--help elasticdump:?Import?and?export?tools?for?elasticsearch version:?6.71.0Usage:?elasticdump?--input?SOURCE?--output?DESTINATION?[OPTIONS] ...?...

3.2.2 elasticdump 同步實戰

elasticdump?\--input=http://172.21.0.14:19022/test_data?\--output=http://172.21.0.14:19205/test_data_from_dump?\--type=analyzer elasticdump?\--input=http://172.21.0.14:19022/test_data?\--output=http://172.21.0.14:19205/test_data_from_dump?\--type=mapping elasticdump?\--input=http://172.21.0.14:19022/test_data?\--output=http://172.21.0.14:19205/test_data_from_dump?\--type=data?\--concurrency=5?\--limit=10000

基本上面的參數能做到:見名識意。

  • input :源集群索引。

  • output :目標集群索引。

  • analyzer :同步分詞器。

  • mapping :同步映射schema。

  • data :同步數據。

  • concurrency :并發請求數。

  • limit:一次請求同步的文檔數,默認是100。

3.2.3 elasticdump 同步實戰驗證結論

elasticdump 同步 100W數據,耗時:106 s。

3.3 方案四:ESM 工具同步

ESM 是 medcl 開源的派生自:Elasticsearch Dumper 的工具,基于 go 語言開發。

地址:https://github.com/medcl/esm

3.3.1 ESM 工具安裝注意事項

依賴 go 版本:>= 1.7。

3.3.2 ESM 工具同步實戰

esm??-s?http://172.21.0.14:19022??-d?http://172.21.0.14:19205?-x?test_data??-y?test_data_from_esm?-w=5?-b=10?-c?10000
  • w:并發數。

  • b:bulk 大小,單位MB。

  • c:scroll 批量值大小。

3.3.3 ESM 工具同步實戰結論

100萬 數據 38 s 同步完,速度極快。

esm??-s?http://172.21.0.14:19022??-d?http://172.21.0.14:19205?-x?test_data??-y?test_data_from_esm?-w=5?-b=10?-c?10000 test_data [05-19?13:44:58]?[INF]?[main.go:474,main]?start?data?migration.. Scroll?1000000?/?1000000?[================================================================================================================]?100.00%?38s Bulk?999989?/?1000000?[===================================================================================================================]?100.00%?38s [05-19?13:45:36]?[INF]?[main.go:505,main]?data?migration?finished.

同步時:CPU 被打爆,說明并發參數生效了。

3.4 方案五:logstash 同步

3.4.1 logstash 同步注意事項

本文基于 logstash 7.12.0,相關插件:logstash_input_elasticsearch 和 logstash_output_elasticsearch 都已經集成安裝,無需再次安裝。

注意:配置的輸入、輸出即是插件的名字,要小寫。國外的很多博客都有錯誤,要實戰一把甄別。

3.4.2 logstash 同步實戰

input?{elasticsearch?{hosts?=>?["172.21.0.14:19022"]index?=>?"test_data"size?=>?10000scroll?=>?"5m"codec?=>?"json"docinfo?=>?true} } filter?{ } output?{elasticsearch?{hosts?=>?["172.21.0.14:19205"]index?=>?"test_data_from_logstash"} }

3.4.3 logstash同步測試

100W 數據 74 s 同步完。

3.5 方案三:快照&恢復同步

3.5.1 快照&恢復配置注意事項

提前在 elasticsearch.yml 配置文件配置快照存儲路徑。

path.repo:?["/home/elasticsearch/elasticsearch-7.12.0/backup"]

詳細配置參考:干貨 | Elasitcsearch7.X集群、索引備份與恢復實戰。

3.5.2 快照&恢復實戰

#?一個節點創建快照 PUT?/_snapshot/my_backup {"type":?"fs","settings":?{"location":?"/home/elasticsearch/elasticsearch-7.12.0/backup"} }PUT?/_snapshot/my_backup/snapshot_testdata_index?wait_for_completion=true {"indices":?"test_data_from_dump","ignore_unavailable":?true,"include_global_state":?false,"metadata":?{"taken_by":?"mingyi","taken_because":?"backup?before?upgrading"} }#?另外一個恢復快照 curl?-XPOST?"http://172.21.0.14:19022/_snapshot/my_backup/snapshot_testdata_index/_restore"

3.5.2 快照&恢復實戰結論

  • 執行快照時間:2 s。

  • 恢復快照時間:1s 之內。

4、小結

本文針對 Elasticsearch 跨網絡、跨集群之間的數據同步(模擬),給出了5 種方案,并分別在實戰環境進行了驗證。

初步驗證結論如下:

當然,結論并非絕對,僅供參考。

各同步工具本質上都是:scroll + bulk + 多線程綜合實現。

本質不同是:開發語言不同、并發處理實現不同等。

  • reindex 基于 Java 語言開發

  • esm 基于 go 語言開發

  • logstash 基于 ruby + java 開發

  • ?elastidump 基于 js 語言開發

快照涉及異地拷貝文件,速度制約因素是網絡帶寬,所以沒有統計在內。

如何選型?相信看了本文的介紹,應該做到胸中有數了。

  • reindex 方案涉及配置白名單,快照和恢復快照涉及配置快照庫和文件的傳輸。

  • esm、logstash、elastidump 同步不需要特殊配置。

耗時長短和集群規模、集群各個節點硬件配置、數據類型、寫入優化方案等都有關系。

你實戰開發中是如何同步數據的?歡迎留言討論。


推薦:

  • 如何系統的學習 Elasticsearch ?

  • 全網首發!《 Elasticsearch 最少必要知識教程 V1.0 》低調發布

  • 從實戰中來,到實戰中去——Elasticsearch 技能更快提升方法論

  • 重磅 | 死磕 Elasticsearch 方法論認知清單(2020年國慶更新版)

  • logstash_output_kafka:Mysql同步Kafka深入詳解

  • 實戰 | canal 實現Mysql到Elasticsearch實時增量同步


    中國最大的 Elastic 非官方公眾號

    更短時間更快習得更多干貨

    點擊查看“閱讀原文”,和全球近 1100 位+?Elastic 愛好者(含中國?50%+?Elastic 認證工程師)一起每日精進 ELK 技能!

總結

以上是生活随笔為你收集整理的Elasticsearch 跨网络、跨集群同步选型指南的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。