ウェブサイト検索

Elasticsearchクラスタのバックアップの取り方


Elasticsearchクラスタのバックアップの取り方

このページで

  1. 前提条件
  2. 私たちがすること
  3. Elasticsearchクラスタ構成を確認する

    1. ノード1の設定
    2. Node2の設定
    3. Node3の設定
  4. バックアップを取るためにリポジトリを登録する
  5. Elasticsearchクラスタのバックアップと復元

    1. バックアップを取る
    2. バックアップを復元する

Elasticsearchにおけるバックアップの仕組みはスナップショットと呼ばれています。スナップショットとは、稼働中のElasticsearchクラスタから取得されるバックアップです。クラスタを停止させる必要がないため、アプリケーションのメンテナンスウィンドウを回避できます。個々のインデックスまたはクラスタ全体のスナップショットを取得し、共有ファイルシステム上のリポジトリに保存することができます。

Elasticsearchのスナップショットは増分的に取得されます。これは、インデックスのスナップショットを作成するとき、Elasticsearchが同じインデックスの以前のスナップショットの一部としてすでに保存されているデータのコピーを避けることを意味します。そのため、クラスターのスナップショットを定期的に取得することは効率的です。

クラスターの実行状態でバックアップを取るのと同様に、実行中のクラスターにスナップショットを復元することもできます。インデックスを復元する際には、復元されたインデックスの名前や設定の一部を変更することもできます。

バックアップを作成するためには、スナップショットおよび復元操作を実行する前にスナップショットリポジトリを登録する必要があります。クラスタの共有ファイルシステムリポジトリを登録するためには、すべてのマスターノードとデータノードに同じ共有ファイルシステムを同じ場所にマウントする必要があります。この場所は、すべてのマスターノードとデータノードの構成ファイルに登録されなければなりません。

この記事では、NFS共有リポジトリを確認し、スナップショットを作成して復元する手順を見ていきます。

前提条件

    私たちが何をするか

    1. バックアップを取るためにリポジトリを登録します。

    NFSサーバー/クライアントの設定を確認してください。

    この記事では、NFSのセットアップについては触れません。これはこの記事の範囲外だからです。しかし、Elasticsearchのバックアップを取るためには、以下のセットアップが必要です。

    es-node-1(10.11.10.61)  : NFS Client
    es-node-2(10.11.10.62) : NFS Client
    es-node-3(10.11.10.63) : NFS Client
    NFS Server(10.11.10.64) : NFS Server

    ここでは、

    NFSサーバーはElasticsearchノードとその「/home/ubuntu/shared/」ディレクトリを共有しました。

    すべてのElasticsearchには、NFSの共有ディレクトリ「/home/ubuntu/shared/」にマウントされたローカルディレクトリ「/home/ubuntu/mounted」があります。Elasticsearchを開始するユーザーと同じユーザーがすべてのディレクトリの所有権を持つことを確認する必要があります。

    この設定が整ったら、私たちはさらに進むことができます。

    Elasticsearchクラスタ構成を確認する

    Elasticsearchをクラスターモードで動作させるために、次の設定を行ってください。

    ここでは、Elasticsearchクラスタを設定している場合、次の構成について知っておく必要があります。

    Elasticsearchクラスタのバックアップを取るために必要な唯一の設定は、既存のElasticsearchクラスタ設定に加えて、path.repo: ["/home/ubuntu/mounted"]です。

    vim config/elasticsearch.yml
    path.repo: ["/home/ubuntu/mounted"] 

    各ノードで同じことを維持してください。

    ノード1の設定

    #give your cluster a name.
    cluster.name: my-cluster
    #give your nodes a name (change node number from node to node).
    node.name: "es-node-1"
    #define node 1 as master-eligible:
    node.master: true
    #define nodes 2 and 3 as data nodes:
    node.data: true
    #enter the private IP and port of your node:
    network.host: 10.11.10.61
    http.port: 9200
    #detail the private IPs of your nodes:
    discovery.zen.ping.unicast.hosts: ["10.11.10.61", "10.11.10.62", "10.11.10.63"]
    cluster.initial_master_nodes:
    - 10.11.10.61
    path.repo: ["/home/ubuntu/mounted"]

    Node2の設定

    #give your cluster a name.
    cluster.name: my-cluster
    #give your nodes a name (change node number from node to node).
    node.name: "es-node-2"
    #define node 2 as master-eligible:
    node.master: false
    #define nodes 2 and 3 as data nodes:
    node.data: true 
    #enter the private IP and port of your node:
    network.host: 10.11.10.62
    http.port: 9200 
    #detail the private IPs of your nodes:
    discovery.zen.ping.unicast.hosts: ["10.11.10.61", "10.11.10.62", "10.11.10.63"
    path.repo: ["/home/ubuntu/mounted"]

    Node3の設定

    #give your cluster a name.
    cluster.name: my-cluster
    #give your nodes a name (change node number from node to node).
    node.name: "es-node-3"
    #define node 3 as master-eligible:
    node.master: false
    #define nodes 2 and 3 as data nodes:
    node.data: true
    #enter the private IP and port of your node:
    network.host: 10.11.10.63
    http.port: 9200
    #detail the private IPs of your nodes:
    discovery.zen.ping.unicast.hosts: ["10.11.10.61","10.11.10.62","10.11.10.63""]
    path.repo: ["/home/ubuntu/mounted"]

    すべての構成が整ったら、最初に初期マスターを起動して、すべてのElasticsearchノードをスタートさせます。

    バックアップを取るためにリポジトリを登録する

    次のコマンドを使用して既存のリポジトリを確認してください。

    curl -XGET 'http://IP_Of_Elasticsearch_Node_Or_Master:9200/_snapshot/_all?pretty=true'

    応答が空の場合、それはまだリポジトリが設定されていないことを示しています。

    リポジトリを設定するには、次のコマンドを実行します。

    curl -XPUT 'http://IP_Of_Elasticsearch_Node_Or_Master:9200/_snapshot/my_backup' -d {
    "type": "fs",
    "settings": {
    "location": "/home/ubuntu/mounted",
    "compress": true
    }
    }'

    ここで、上記のコマンドの「my_backup」はリポジトリの名前です。

    次のコマンドを使用して登録されたリポジトリを確認できます。

    curl -XGET 'http://IP_Of_Elasticsearch_Node_Or_Master:9200/_snapshot/_all?pretty=true'

    Elasticsearchクラスタのバックアップと復元

    バックアップを取る

    リポジトリを作成したら、バックアップを取る準備が整います。

    以下のコマンドを使用して、「snapshot_name」という名前のバックアップを取ります。

    curl -XPUT "https://IP_Of_Elasticsearch_Node_Or_Master:9200/_snapshot/my_backup/snapshot_name?wait_for_completion=true"

    バックアップを復元する

    取ったスナップショットは、次のコマンドを使用して復元できます。

    以下のコマンドを使用して、「snapshot_name」と呼ばれるバックアップを復元します。

    curl -XPOST "http://IP_Of_Elasticsearch_Node_Or_Master:9200/_snapshot/my_backup/snapshot_name/_restore?wait_for_completion=true"

    結論

    この記事では、リポジトリを登録し、バックアップを取り、復元する手順を見ました。

    関連記事: