4. Elasticsearch のセットアップ for Linux¶
ここでは Linux環境へのElasticsearchのセットアップ方法を説明します。
コラム
Elasticsearch の動作にはJava VM が必要です。必要となるJava VM のバージョンについては、下記のURLより確認してください。(2019年3月時点においては、java 8が推奨されているようです。)
https://www.elastic.co/guide/en/elasticsearch/guide/current/_java_virtual_machine.html
注意
4.1. ファイルの展開¶
「Elasticsearch の取得」でダウンロードした、<elasticsearch-x.x.x.tar.gz>ファイルを任意のパスに展開します。
コラム
本書では、例として次のディレクトリを指定します。
「/usr/local/elasticsearch」
コラム
/usr/local/elasticsearch-x.x.xとして展開されたものを/usr/local/elasticsearchにシンボリックリンクしておくと、バージョンアップの際などにアクセスが容易です。# ln -s /usr/local/elasticsearch-x.x.x /usr/local/elasticsearchElasticsearchを展開したディレクトリを以後、%ELASTICSEARCH_HOME% と略します。
4.2. 各種設定¶
- Elasticsearchを起動する前に、必要に応じて以下の設定を行ってください。
4.2.1. Elasticsearch の設定¶
- Elasticsearchの設定が記載されている、<%ELASTICSEARCH_HOME%/config/elasticsearch.yml>ファイルをエディタで開き、編集を行います。
クラスタ名の指定
「cluster.name」 プロパティに任意のクラスタの名称を指定します。cluster.name: 'im-bpm-cluster'注意
Elasticsearchサーバが複数存在する場合、クラスタ名で同一クラスタのElasticsearchであるか判断され、クラスタが組まれてしまう場合があるため、初期値を変更することを推奨します。ノード名の指定
「node.name」 プロパティに任意のノードの名称を指定します。node.name: node-1以下のように記述することで、サーバのホスト名をノードの名称として指定することもできます。node.name: ${HOSTNAME}データの保存場所の指定
「path.data」 プロパティにデータファイルを格納するディレクトリのパスを指定します。未指定の場合、<%ELASTICSEARCH_HOME%/data>にデータファイルが格納されます。パスを複数指定することもできます。path.data: /var/data/elasticsearchpath: data: - /mnt/elasticsearch_1 - /mnt/elasticsearch_2 - /mnt/elasticsearch_3コラム
複数のデータディレクトリを指定した場合でも、単一のシャードに紐づくデータファイルはすべて同一のパスに格納されます。
注意
データディレクトリを未指定のまま運用すると、Elasticsearchバージョンアップなどに伴う更新の際にデータディレクトリが削除されてしまう危険性があるため、データディレクトリは適切に指定して運用されることを推奨します。ログの格納場所の指定
「path.logs」 プロパティにログファイルを格納するディレクトリのパスを指定します。未指定の場合、<%ELASTICSEARCH_HOME%/log>にログファイルが格納されます。path.logs: /var/log/elasticsearchホスト名、ポートの指定
「network.host」および、「http.port」プロパティにホスト名、ポート名を指定します。指定しない場合、network.hostはループバックアドレス(IPv4では127.0.0.1、IPv6では[::1])に、http.portは9200にそれぞれ紐づけられます。network.host: 192.168.xxx.xxx(任意のIPアドレス) http.port: 9200注意
ホスト名、ポート番号を変更した場合、「IM-BPM/Elasticsearch コネクタ」モジュールに適切な値を設定する必要があります。詳しくは、「 IM-BPM 設定ファイルリファレンス 」-「 IM-BPM Elasticsearch コネクタ設定 」を参照してください。コラム
開発モードと運用モード
network.hostの設定を行っていない場合、Elasticsearchは開発モードとなり、各種の設定に誤りがあった場合でも、ワーニングがログに記載されるのみで起動が行われますが、network.hostの設定を行っている場合、Elasticsearchは開発モードから運用モードに移行されたと判断し、設定に誤り等があった場合、ワーニングではなく例外として処理し、起動できません。network.hostの設定を行う場合は、他の設定に関しても適切な値の指定を行ってください。
4.2.2. ファイルディスクリプタ数の変更¶
OSの設定により、運用中にIOException, FileNotFoundException 等が発生し、Elasticsearchが正常に動作しなくなる場合があります。原因は、Elasticsearchのプロセスが利用(オープン)できるファイル数の上限がOSにより制限されている上限を超える為に発生します。Elasticsearchの起動前に、Elasticsearch実行ユーザに許可されるファイルディスクリプタ数を65,536以上に設定してください。/etc/system/limits.conf または/etc/security/limits.confで設定されるOSのファイルディスクリプタ数を環境に合わせた以下の値を追加することにより、回避できますので、適切な値に変更してください。* soft nofile 65536 * hard nofile 65536 root soft nofile 65536 root hard nofile 65536※ ユーザ、および、値はサンプルです、環境に合わせて適切な値を設定してください。
コラム
ファイルディスクリプタの現在の設定値は、ulimit -nで確認できます。ファイルディスクリプタの設定値はulimit -n 65536で変更できます。※ 設定はrootユーザで行ってください。
4.2.3. プロセス数(スレッド数)の設定¶
Elasticsearchは、異なる複数の操作を処理するために、スレッドプールを使用します。そのため、Elasticsearchを実行するユーザは、十分な数のプロセス(スレッド)の作成を行える必要があります。そのため、Elasticsearch実行ユーザが作成できるプロセス数は最低でも4,096以上に設定してください。ファイルディスクリプタの設定の際と同様に、/etc/system/limits.conf または/etc/security/limits.confで設定されるユーザのプロセス数を環境に合わせた、以下の値を追加することにより、回避できますので、適切な値に変更してください。* soft nofile 4096 * hard nofile 4096 root soft nproc 4096 root hard nproc 4096※ ユーザ、および、値はサンプルです、環境に合わせて適切な値を設定してください。
コラム
プロセス数の現在の設定値は、ulimit -uで確認できます。プロセス数の設定値はulimit -u 4096で変更できます。※ 設定はrootユーザで行ってください。
4.2.4. 仮想メモリの設定¶
Elasticsearchは標準でインデックスの格納にmmapfs(メモリマップトファイルシステム)のディレクトリを使用します。OS標準でメモリマップの設定が低めに設定されていた場合、OutOfMemoryExceptionを引き起こす可能性があります。適宜、メモリマップの最大値の設定を行ってください。コラム
メモリマップの現在の設定値は、cat /proc/sys/vm/max_map_countで確認できます。メモリマップの設定値は、sysctl -w vm.max_map_count=262144で変更できます。※ 設定はrootユーザで行ってください。
4.2.5. メモリの設定¶
インストール環境に応じたメモリ値を指定します。ElasticsearchのJavaヒープサイズの設定が記載されている、<%ELASTICSEARCH_HOME%/config/jvm.options>ファイルをエディタで開き、編集を行います。-Xms1g -Xmx1g注意
Javaヒープサイズの最小値と最大値は必ず同じサイズを指定してください。また、インストール環境のメモリサイズの半分を上限とし、JVMが許容する範囲で指定してください。
4.2.6. 環境変数の設定¶
環境変数に JDKをインストールしたホームディレクトリを追加します。Elasticsearchを実行するユーザの環境変数に、次のように設定します。
変数 JAVA_HOME 値 JDK をインストールしたホームディレクトリ コラム
事前にJDKがインストールされている必要があります。