+2

ElasticSearch backup với snapshot

Để giúp bảo vệ việc mất dữ liệu, Elasticsearch cung cấp các tính năng khác nhau cho phép chúng ta thực hiện backup dữ liệu ngay cả trong trường hợp dữ liệu bị lỗi. Trong bài hướng dẫn này

ElasticSearch snapshot là gì

ElasticSearch snapshot là một bản sao dự phòng của một cluster Elasticsearch đang chạy. Snapshot này có thể là toàn bộ cluster hoặc các index và luồng dữ liệu cụ thể trong một cluster cụ thể. Trước khi đi sâu vào việc tạo snapshot, chúng ta sẽ cần tạo một Repository với mục đích lưu trữ snapshot vì nhiều dịch vụ của Elasticsearch sử dụng API snapshot để thực hiện các tác vụ này. Một số tác vụ đó bao gồm:

  • Put snapshot repository
  • Verify snapshot repository
  • Get snapshot repository
  • Delete snapshot repository
  • Clean up snapshot repository
  • Create snapshot
  • Clone snapshot
  • Get snapshot
  • Get snapshot status
  • Restore snapshot
  • Delete snapshot

Để tạo một snapshot repository, chúng ta sử dụng endpoint API là _snapshot + tên mà chúng ta muốn đặt. Ví dụ dưới đây mình sẽ tạo 1 snapshot repository có tên là backup_repo

PUT /_snapshot/backup_repo
{
  "type": "fs",
  "settings": {
    "location": "/home/root/backups",
    "compress": true
  }
}

Và để xem là snapshot repository đã tạo thành công hay chưa chúng ta có thể làm như thế này:

GET /_snapshot/backup_repo

Hoặc để xem tất cả các snapshot repository đang có chúng ta có thể sử dụng endpoind là _snapshot :

GET /_snapshot

Tạo Elasticsearch Snapshot

Để tạo một snapshot cho một snapshot repository cụ thể được xử lý bởi API snapshot chúng ta sẽ phải chỉ định tên của snapshot repository backup_repo và tên của snapshot snapshot_1.

PUT /_snapshot/backup_repo/snapshot_1

Nếu tạo thành công Elasticsearch sẽ trả về 1 response thế này

{
  "accept": true
}

Với cách trên vì nó không chỉ định luồng dữ liệu mà chúng ta muốn sao lưu, nên nó sẽ sao lưu tất cả dữ liệu và trạng thái cluster. Để chỉ định luồng dữ liệu và chỉ số nào cần sao lưu, chúng ta sẽ thêm vào như sau: Giả sử chúng ta thực hiện sao lưu chỉ mục .kibana

PUT /_snapshot/backup_repo/snapshot_2?wait_for_completion=true
{
  "indices": ".kibana",
  "ignore_unavailable": true,
  "include_global_state": false,
  "metadata": {
    "taken_by": "elasticadmin",
    “taken_because”: “Backup 1”
  }
}

Tham số include_global_state lưu trạng thái hiện tại của cluster nếu thiết lập là true. Một số thông tin cluster được lưu bao gồm(chúng ta có thể chỉ định nhiều hơn 5 thông tin dưới đây):

  • Persistent cluster settings
  • Index templates
  • Legacy index templates
  • Ingest pipelines
  • ILM lifecycle policies

Cách xem snapshot.

Để xem chi tiết về snapshot_2 được tạo ở trên chúng ta làm như sau:

GET /_snapshot/backup_repo/snapshot_2

Thông tin chi tiết về snapshot_2 sẽ được trả về như sau:

{
  "snapshots" : [
    {
      "snapshot" : "snapshot_2",
      "uuid" : "tQUHyofIRnGMMtw0AGBACQ",
      "version_id" : 7100299,
      "version" : "7.10.2",
      "indices" : [
        ".kibana_1"
      ],
      "data_streams" : [ ],
      "include_global_state" : false,
      "metadata" : {
        "taken_by" : "elasticadmin",
        “taken_because”: “Backup 1”
      },
      "state" : "SUCCESS",
      "start_time" : "2021-01-19T13:36:59.615Z",
      "start_time_in_millis" : 1611063419615,
      "end_time" : "2021-01-19T13:37:00.433Z",
      "end_time_in_millis" : 1611063420433,
      "duration_in_millis" : 818,
      "failures" : [ ],
      "shards" : {
        "total" : 1,
        "failed" : 0,
        "successful" : 1
      }
    }
  ]
}

Trường hợp chúng ta muốn xem tất cả các snapshot trong 1 repository cụ thể chúng ta sẽ thêm dấu * như thế này:

GET /_snapshot/backup_repo/*

Kết quả chúng ta nhận được sẽ kiểu như thế này:

{
  "snapshots" : [
    {
      "snapshot" : "snapshot_1",
      "uuid" : "7CFigHzvRtyZW07c60d2iw",
      "version_id" : 7100299,
      "version" : "7.10.2",
      "indices" : [
        "my_index",
        "single_index_with_body",
        "my_index_2",
        "single_index",
        ".kibana_1",
        “test”
      ],
      "data_streams" : [ ],
      "include_global_state" : true,
      "state" : "SUCCESS",
      "start_time" : "2021-01-19T13:28:48.172Z",
      "start_time_in_millis" : 1611062928172,
      "end_time" : "2021-01-19T13:28:50.831Z",
      "end_time_in_millis" : 1611062930831,
      "duration_in_millis" : 2659,
      "failures" : [ ],
      "shards" : {
        "total" : 7,
        "failed" : 0,
        "successful" : 7
      }
    },
    {
      "snapshot" : "snapshot_2",
      "uuid" : "tQUHyofIRnGMMtw0AGBACQ",
      "version_id" : 7100299,
      "version" : "7.10.2",
      "indices" : [
        ".kibana_1"
      ],
      "data_streams" : [ ],
      "include_global_state" : false,
      "metadata" : {
        "taken_by" : "elasticadmin",
        “taken_because”: “Backup 1”
      },
      "state" : "SUCCESS",
      "start_time" : "2021-01-19T13:36:59.615Z",
      "start_time_in_millis" : 1611063419615,
      "end_time" : "2021-01-19T13:37:00.433Z",
      "end_time_in_millis" : 1611063420433,
      "duration_in_millis" : 818,
      "failures" : [ ],
      "shards" : {
        "total" : 1,
        "failed" : 0,
        "successful" : 1
      }
    }
  ]
}

Cách xoá snapshot

Xóa snapshot rất đơn giản chúng ta chỉ cần sử dụng phương thức DELETE là được:

DELETE /_snapshot/backup_repo/snapshot_1

Và response chúng ta nhận được sẽ như sau:

{
  “acknowledged”: true
}

Kết luận

Trong hướng dẫn này, mình đã nói về cách tạo snapshot elasticsearch bằng API snapshot. Những gì chúng ta đã làm là tạo một snapshot repository, xem các snapshot repository, tạo, xem và xóa snapshot. Mặc dù có những tùy chỉnh bạn có thể thực hiện với API, nhưng kiến thức trong hướng dẫn này sẽ đủ để bạn bắt đầu.

Than khảo

https://linuxhint.com/restore-elasticsearch-clusters-snapshots/


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.