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コア数 |
