Elasticsearchクラスタの共有リポジトリ設定
Snapshot機能で、使用する共有リポジトリの設定方法を示す。
概要
クラスタに、共有リポジトリを設定するためには、どのノードからもアクセスできるようにファイルシステムを共有する必要がある。 今回は、NFSで、共有ファイルサーバを構築し、共有リポジトリを設定することにした。
ファイルシステムを共有しないと、下記のように怒られる。
- RemoteTransportException...
- This might indicate that the store [(snip)] 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
- RepositoryVerificationException[[snip] a file written by master to the store [snip] cannot be accessed on the node
環境
- Ubuntu 16.04
- Elasticsearch 5.0.0 GA
- ノード1(192.168.0.2)
- ノード2(192.168.0.3)
ノード1とノード2は、クラスタを組ませている。
手順
はじめに
リポジトリの置き場所をノード1、ノード2にそれぞれ生成する。
# mkdir -p /var/elasticsearch/snapshot # chown nobody:nogroup /var/elasticsearch/snapshot
NFS周りの設定
今回は、ノード1上で、NFSサーバを起動させて、リポジトリデータを置くことにする。 そして、ノード2上では、NFSクライアントを起動させる。
ノード1から作業する。 NFSサーバをインストールする。
# apt-get update && apt-get install nfs-kernel-server
/etc/exportsに追記する。
/var/elasticsearch/snapshot 192.168.0.3(rw,sync,no_subtree_check)
NFSサーバを再起動する。
# systemctl restart nfs-kernel-server
次に、ノード2で、NFSクライアントの設定をする。 NFSクライアントをインストールする。
# apt-get update && apt-get install nfs-common
# mount 192.168.0.2:/var/elasticsearch/snapshot /var/elasticsearch/snapshot # df -h Filesystem Size Used Avail Use% Mounted on (snip) 192.168.0.2:/var/elasticsearch/snapshot 63G 15G 46G 25% /var/elasticsearch/snapshot
リポジトリ生成
ノード1、ノード2それぞれのelasticsearch.ymlに、下記を追記する。
path.repo: ["/var/elasticsearch/snapshot"]
Elasticsearchを再起動する。
# systemctl restart elasticsearch
ノード1で、リポジトリを生成する。 /var/elasticsearch/snapshotがnobody:nogroupのままだと、snapshot1の権限がelasticsearch:elasticsearchにならないので、手動で変更しています。
# mkdir /var/elasticsearch/snapshot/snapshot1 # chown elasticsearch:elasticsearch /var/elasticsearch/snapshot/snapshot1 # curl -XPUT 'http://192.168.0.2:9200/_snapshot/snapshot1?pretty' -d '{ "type": "fs", "settings": { "location" : "/var/elasticsearch/snapshot/snapshot1", "compress": true }}' # curl -XGET http://192.168.0.2:9200/_snapshot/snapshot1?pretty { "snapshot1" : { "type" : "fs", "settings" : { "compress" : "true", "location" : "/var/elasticsearch/snapshot/snapshot1" } } }