modest violet

modest violet

開発者としてのあれこれや、日々の雑記など

your future hasn't written yet. no one's has.
by Emmett Lathrop "Doc" Brown

【Elasticsearch】スナップショットの共有ストレージはNFSサービスを使う備忘録

Elasticsearchネタというか備忘録は続きます。

以下の書籍通りにスナップショット(バックアップ)を試みましたが、要らないコトをして無駄な時間を費やしました。反省。

失敗したコト

書籍の中では、NFSサービスを使用して共有ストレージに保存しましょうと紹介されていました。
使用しているVirtual BOXの仮想環境がオフライン(非インターネット接続)であった為、aptが面倒という理由でNFSサービスを使わない方向で行こう!と暴走。
結果、ドツボにはまる。

具体的に何をしたのかというと、V-BOXの共有ストレージ機能を使用して各ノードサーバーにマウント。
各サーバーからはキチンと読み書き出来たので大丈夫と思いきや、REST APIからスナップショットの指示を出すとrepository_verification_exceptionエラーが出た。

その際のエラーはこんな感じ。

{
    "error": {
        "root_cause": [
            {
                "type": "repository_verification_exception",
                "reason": "[mv_backup] [[Sup7NQqXQVaT1maJ49ajpg, 'RemoteTransportException[[node72][192.168.1.72:9300][internal:admin/repository/verify]]; nested: RepositoryVerificationException[[mv_backup] a file written by master to the store [/home/sgpl/elasticsearch_backup] cannot be accessed on the node [{node72}{Sup7NQqXQVaT1maJ49ajpg}{AOI8z2v7QzeohCBSFoZHRA}{192.168.1.72}{192.168.1.72:9300}{ml.enabled=true}]. This might indicate that the store [/home/sgpl/elasticsearch_backup] is not shared between this node and the master node or that permissions on the store don't allow reading files written by the master node];'], [mHR3zxDqQCqDvGNBxUF2tw, 'RemoteTransportException[[node73][192.168.1.73:9300][internal:admin/repository/verify]]; nested: RepositoryVerificationException[[mv_backup] a file written by master to the store [/home/sgpl/elasticsearch_backup] cannot be accessed on the node [{node73}{mHR3zxDqQCqDvGNBxUF2tw}{BwILk21wR4GlJaWDy-DHFg}{192.168.1.73}{192.168.1.73:9300}{ml.enabled=true}]. This might indicate that the store [/home/sgpl/elasticsearch_backup] is not shared between this node and the master node or that permissions on the store don't allow reading files written by the master node];'], [XEgaW0CvQt-02VEczOmHoA, 'RemoteTransportException[[node71][192.168.1.71:9300][internal:admin/repository/verify]]; nested: RepositoryVerificationException[[mv_backup] a file written by master to the store [/home/sgpl/elasticsearch_backup] cannot be accessed on the node [{node71}{XEgaW0CvQt-02VEczOmHoA}{WMgwMgp_QLae61ux_xPqtA}{192.168.1.71}{192.168.1.71:9300}{ml.enabled=true}]. This might indicate that the store [/home/sgpl/elasticsearch_backup] is not shared between this node and the master node or that permissions on the store don't allow reading files written by the master node];']]"
            }
        ],
        "type": "repository_verification_exception",
        "reason": "[mv_backup] [[Sup7NQqXQVaT1maJ49ajpg, 'RemoteTransportException[[node72][192.168.1.72:9300][internal:admin/repository/verify]]; nested: RepositoryVerificationException[[mv_backup] a file written by master to the store [/home/sgpl/elasticsearch_backup] cannot be accessed on the node [{node72}{Sup7NQqXQVaT1maJ49ajpg}{AOI8z2v7QzeohCBSFoZHRA}{192.168.1.72}{192.168.1.72:9300}{ml.enabled=true}]. This might indicate that the store [/home/sgpl/elasticsearch_backup] is not shared between this node and the master node or that permissions on the store don't allow reading files written by the master node];'], [mHR3zxDqQCqDvGNBxUF2tw, 'RemoteTransportException[[node73][192.168.1.73:9300][internal:admin/repository/verify]]; nested: RepositoryVerificationException[[mv_backup] a file written by master to the store [/home/sgpl/elasticsearch_backup] cannot be accessed on the node [{node73}{mHR3zxDqQCqDvGNBxUF2tw}{BwILk21wR4GlJaWDy-DHFg}{192.168.1.73}{192.168.1.73:9300}{ml.enabled=true}]. This might indicate that the store [/home/sgpl/elasticsearch_backup] is not shared between this node and the master node or that permissions on the store don't allow reading files written by the master node];'], [XEgaW0CvQt-02VEczOmHoA, 'RemoteTransportException[[node71][192.168.1.71:9300][internal:admin/repository/verify]]; nested: RepositoryVerificationException[[mv_backup] a file written by master to the store [/home/sgpl/elasticsearch_backup] cannot be accessed on the node [{node71}{XEgaW0CvQt-02VEczOmHoA}{WMgwMgp_QLae61ux_xPqtA}{192.168.1.71}{192.168.1.71:9300}{ml.enabled=true}]. This might indicate that the store [/home/sgpl/elasticsearch_backup] is not shared between this node and the master node or that permissions on the store don't allow reading files written by the master node];']]"
    },
    "status": 500
}

何がいけなかったのか

書籍通りにやらなかったというのが一番な訳ですが、どうも各サーバー上からはアクセスできても、実際のマスターノードが他のノードにアクセスする際、ローカルのパスだと駄目という海外の記述もあり。。。
素直にNFSサービスを入れることに。

Ubuntuでのスナップショット構築

NFSサーバー側ノード

※マウント先のドライブを/dev/sdb1で設定済みとし、/mnt/repoとしてマウント済み

  1. 権限変更
    RESTful APIが読み書きする為に必要

    sudo chown -R elasticsearch:elasticsearch /mnt/repo

  2. NFS server install

    sudo apt install nfs-kernel-server

  3. exports設定

    sudo nano /etc/exports

    # (公開したいディレクトリ) (どのマシンに公開するか) (公開モード)

    /mnt/repo *(rw,async,no_root_squash)

  4. sudo exportfs -av

    exporting *:/mnt/es_repo

NFSクライアント側ノード

  1. NFS client install

    sudo apt install nfs-common

  2. mount用folder
    【需要】マウント先の名前は揃える

    sudo mkdir /mnt/repo

  3. 権限変更

    sudo chown -R elasticsearch:elasticsearch /mnt/repo

  4. 自動マウント

    sudo nano /etc/fstab {NFSサーバーIP}:/mnt/es_repo /mnt/repo nfs rw 0 0

共通設定

  1. elasticsearch.ymlにRepositoryのPath追記

    path.repo: ["/mnt/repo"]

急がば回れとはよく言ったものですね・・・。