Merhaba,
bu makalemizde elasticsearch cluster’ları arasında veri taşımak, mevcut index’lerin kolayca dump’ını çıkartmak için kullandığımız elasticdump tool’undan bahsedeceğim. Bildiğiniz gibi elasticsearch’te native olarak bir dump tool’u bulunmuyor. Sadece index’lerin snapshot’ını alabiliyoruz. Onun için de öncesinde bir hazırlık yapmamız, bazı durumlarda cluster’ı full restart etmemiz gerekebiliyor.
Elasticsearch ve opensearch database’lerine bağlanıp bu teknolojiler arasında basit bir şekilde veri aktarımı yapmamızı sağlayan bir tool var: elasticdump. Elasticdump open source bir tool ve github üzerinden erişebilirsiniz.
Elasticdump’ı kurmak için 2 farklı yöntem mevcut; paket olarak kurulum veya docker üzerinde ayağa kaldırılması.
Öncesinde elasticdump çalışacak sunucumuzda npm kurulu olmalı. Ben prod ortamlarda npm kurmayı tercih etmedim çünkü sadece bir defa kullanacağım bir tool için 300-400 adet paket kurmak istemedim. Bunun yerine 2 elasticsearch cluster’ı arasında veri taşımak için her iki ortama da erişebilen staging bir sunucu üzerinden elasticdump’ı konumlandırdım.
root@staging01:~# apm install npm
root@staging01:~# npm install elasticdump -g
root@staging01:~# elasticdump --version
6.103.0
(node:1399952) NOTE: We are formalizing our plans to enter AWS SDK for JavaScript (v2) into maintenance mode in 2023.
Please migrate your code to use AWS SDK for JavaScript (v3).
For more information, check the migration guide at https://a.co/7PzMCcy
docker pull elasticdump/elasticsearch-dump
veri aktarımı için elasticdump’a input ve output parametreleri veriyoruz. Bu sayede source elastic cluster’dan aldığı index’leri doğrudan target’a import edebiliyor. İstenirse hem input hem de output’a; Elasticsearch, Opensearch, File System, AWS S3 vb. verilebilir.
elasticdump \
--input="source-ip:9200/index1" \
--output="target-ip:9200" \
--type=data \
elasticdump \
--input="source-ip:9200/index1" \
--output=/data/elasticdumps/index1.json \
--type=data \
elasticdump \
--input="source-ip:9200/index1" \
--output=$ \
| gzip > /data/my_index.json.gz
elasticdump \
--s3AccessKeyId "${access_key_id}" \
--s3SecretAccessKey "${access_key_secret}" \
--input=http://production.es.com:9200/my_index \
--output "s3://${bucket_name}/${file_name}.json"
elasticdump \
--s3AccessKeyId "${access_key_id}" \
--s3SecretAccessKey "${access_key_secret}" \
--input "s3://${bucket_name}/${file_name}.json" \
--output=http://production.es.com:9200/my_index
Kaynak;
https://github.com/elasticsearch-dump/elasticsearch-dump