Elasticsearch: Snapshot and Restore

  • Friday 22/05/2020

Elasticsearch là một công cụ tìm kiếm dựa trên nền tảng Apache Lucene. Nó cung cấp một bộ máy tìm kiếm dạng phân tán, có đầy đủ công cụ với một giao diện web HTTP có hỗ trợ dữ liệu JSON

Khi sử dụng Elasticsearch một trong những công việc chúng ta phải làm thường xuyên là Snapshot and Restore data. Cách cài đặt Elatichsearch các bạn có thể xem tại đây Setup ElasticSearch

1. Snapshot

Elasticsearch cung cấp cho chúng ta module snapshot để tạo nhanh các bản snapshot lưu trữ các indices hoặc một phần hoặc toàn bộ các cluster tại một thời điểm nào đó. Snapshot tỏ ra mạnh mẽ và hữu dụng nhưng có một vài khuyết điểm mà chúng ta phải lưu ý như sau:

  • A snapshot of an index created in 6.x can be restored to 7.x.
  • Snapshot tạo từ phiên bản 5.x có thể phục hồi trong phiên bản 6.x.
  • Snapshot tạo từ phiên bản 2.x có thể phục hồi trong phiên bản 5.x.
  • Snapshot tạo từ phiên bản 1.x có thể phục hồi trong phiên bản 2.x.

Các snapshot không tương thích với các phiên bản thì không thể phục hồi được, hãy lưu ý điều này khi update các version mới cho elaticsearch. 

Bạn không thể sao lưu dữ liêu Elasticsearch chỉ bằng thao tác đơn giản là copy folder. Elasticsearch có thể bị thanh đổi nội dung, cấu trúc dữ liệu khi đang chạy. Việc khôi phục dữ liệu từ folder sao chép có thể bị lỗi 

Vì vậy cách nhanh và duy nhất để sao lưu là snapshot

Đầu tiên chúng ta phải tiến hành tạo repositories để lưu trữ các snapshot, Elaticsearch cung cấp một số repositories khả dụng như sau:

  • AWS (You can store the backups on S3)
  • HPFS for Hadoop
  • Azure Cloud

Bài viết này sẽ sử dụng repo local cho snapshot Elasticsearch

. Kiểm tra xem chúng ta đã tạo ra các repositories nào chưa:

$ curl -XGET 'localhost:9200/_snapshot/_all?pretty=true'

Tạo thư mục lưu trữ các repositories:

$ mkdir /usr/share/elasticsearch/data_backup

Cấp quyền cho elatichsearch lưu trữ vào thư muc:

$ chown -R elasticsearch:elasticsearch /usr/share/elasticsearch/data_backup

Config elasticsearch.yml tại /etc/elasticsearch/elasticsearch.yml tạo đường dẫn tới thư mục trên bằng cách khai báo path.repo:

path.repo: ["/usr/share/elasticsearch/data_backup"]

Khởi dộng lại Elatichsearch:

$ sudo service elasticsearch restart

Mapping và khởi tạo snapshot với repositories trên:

$ curl -XPUT -H "Content-type: application/json" -d '{   
"type": "fs",
   "settings": {
       "compress" : true,
       "location": "/usr/share/elasticsearch/data_backup"
}
}' 'http://localhost:9200/_snapshot/test_backup'

Sử dụng snapshot trên lưu trữ toàn bộ cluster và các indices:

$ curl -XPUT 'localhost:9200/_snapshot/test_backup/snapshot_1?wait_for_completion=true'

 

2. Restore data

Việc restore data trong Elasticsearch thì khá là dễ dàng nhờ có module restore. Đầu tiên chúng ta phải đóng toàn bộ các index đang mở:

$ curl -XPOST 'localhost:9200/_all/_close'

Sử dụng snapshot phục hồi dữ liệu nhanh chóng:

$ curl -XPOST 'localhost:9200/_snapshot/test_backup/snapshot_1/_restore'

Mở lại toàn bộ index cũ:

$ curl -XPOST 'localhost:9200/_all/_open'
 
Tài liệu tham khảo:  https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshot-restore.html 
https://qbox.io/blog/elasticsearch-data-snapshots-restore-tutorial