【Elasticsearch】スナップショットの共有ストレージはNFSサービスを使う備忘録
Elasticsearchネタというか備忘録は続きます。
以下の書籍通りにスナップショット(バックアップ)を試みましたが、要らないコトをして無駄な時間を費やしました。反省。
Elasticsearch実践ガイド impress top gearシリーズ
- 作者: 惣道哲也
- 出版社/メーカー: インプレス
- 発売日: 2018/06/15
- メディア: Kindle版
- この商品を含むブログ (1件) を見る
失敗したコト
書籍の中では、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としてマウント済み
- 権限変更
RESTful APIが読み書きする為に必要sudo chown -R elasticsearch:elasticsearch /mnt/repo
- NFS server install
sudo apt install nfs-kernel-server
exports設定
# (公開したいディレクトリ) (どのマシンに公開するか) (公開モード)sudo nano /etc/exports
/mnt/repo *(rw,async,no_root_squash)
sudo exportfs -av
exporting *:/mnt/es_repo
NFSクライアント側ノード
- NFS client install
sudo apt install nfs-common
- mount用folder
【需要】マウント先の名前は揃えるsudo mkdir /mnt/repo
- 権限変更
sudo chown -R elasticsearch:elasticsearch /mnt/repo
- 自動マウント
sudo nano /etc/fstab {NFSサーバーIP}:/mnt/es_repo /mnt/repo nfs rw 0 0
共通設定
- elasticsearch.ymlにRepositoryのPath追記
path.repo: ["/mnt/repo"]
急がば回れとはよく言ったものですね・・・。