Elasticsearch: The Definitive Guideでは、本番環境の構築についていろいろ詳しく書かれています。忙しい方のために、簡単に纏めました。
#基本的な考え方
まずメモリ容量について考えるでしょう。数百GBのサーバとAWSのt2.microのような1GBのサーバの両極があります。弱いサーバだと台数を増やさなければいけないが、クラスタ管理の手間、ノード間通信の負荷が増えます。あまりにも強いサーバだとCPUとメモリのバランスが取りにくいです。下記の図で示したように、真ん中の数十GBのサーバで組んだ数十台~数百台規模の構成がスイートスポットとなります。
#サーバスペック
Elasticsearchはメモリバウンドなので、メモリが重要です。そうはいっても64GB以上はいりません。CPUは普通のマルチコアでよいので、Hzが重要ではありません。LuceneはI/Oバウンドなので、ディスクが早いほうがよいです。RAID0は有効ですが、RAID10がいりません。
項目 | ベリーグッド | グッド | バッド |
---|---|---|---|
メモリ | 64GB | 32GB、16GB | 8GB以下 |
CPU | 2-8コア | なし | なし |
ディスク | SDD、15k HDD | なし | NAS |
ネットワーク | 1Gb、10Gb | なし | DC間 |
#設定の変更
以下いろいろ設定の変更を纏めましたが、詳しくはElasticsearch: The Definitive Guideをご参照ください。
##設定ファイルの変更点
項目 | 推奨 | ディフォルト |
---|---|---|
クラスタ名 | 独自名前 | elasticsearch |
ノード名 | 独自名前 | マーベルキャラ名 |
データパース | 複数フォルダ(ソフトウエアRaid0) | インストールフォルダ |
ログパース | インストールフォルダ以外 | インストールフォルダ |
プラグインパース | インストールフォルダ以外 | インストールフォルダ |
最少マスターノード数 | マスターノード数/2+1 | 1 |
リカバリ制限 | ノード数によって調整 | recover_after_nodes=1, expected_nodes=2, recover_after_time=5m |
ディスカバリー通信方式 | Unicast | Multicast |
##環境設定の変更点
項目 | グッド | バッド |
---|---|---|
Java | Java 7(Oracle、OpenJDK) | Java 6 |
ヒープサイズ | メモリの半分 AND 32GB以下 | 1GB |
スワップ | 禁止 | 有効 |
ファイル記述子数上限 | 64,000 | 1024 |
メモリマップ数上限 | 262144 | 65530 |
##触ってはいけない設定
項目 | デフォルト |
---|---|
GC | CMS |
スレッドプール | CPUコア数 |