サーバ/インフラエンジニア養成読本

特集3 Elasticsearch 入門

第1章 データストア入門

  • MongoDB
  • Hadoop
  • Graphite
  • influxDB

第2章 Elasticsearch の基礎

  • OSS
  • ドキュメント思考
  • スキーマフリー
  • 分散システム
  • マルチテナント
  • RESTful API
  • (near) リアルタイム
  • クラスタ
    • Elasticsearch プロセス群
  • ノード
    • Elasticsearch 1 プロセス
  • ドキュメント
    • 1レコード
  • フィールド
    • カラム
  • インデックス
    • ドキュメントの集合
  • タイプ
    • インデックスに登録するドキュメントを論理的に分類するもの
  • シャード(セグメント)
    • インデックスを小さな単位に分割したもの
  • プライマリシャード/レプリカシャード
    • レプリカシャードはプライマリシャードのコピー
  • マッピング
    • インデックスに保存されるデータの構造を定義するためのもの
    • 型指定
  • 転置インデックス
    • Apache Lucene
    • 入力されたデータを特定ロジックで単語に分割し単語をキーに入力されたデータIDをバリューとして保存
    • アナライズ処理
  • ログデータを保存する単位
    • Fluentd や logstash は日付けが変わったタイミングでElasticsearchにインデックスを作成する機能

第3章 Elasticsearch のはじめ方

  • インストールについてなどは前項にて
  • ヒープサイズは実メモリの半分を上限として設定
  • ファイルディスクリプタは32000以上、推奨64000以上
  • 設定ファイルは /etc/elasticsearch/elasticsearch.yml に(rpm インストール時)
  • クラスタ名は同一ネットワーク上に同じものがあると参加してしまう可能性があるので明示的に指定
  • ノード名はデフォルトでランダム付与で再起動時に変更されると都合が悪いので明示的に指定
  • 複数IPを持つサーバの場合は network.host で IPを指定
  • クラスタ設定
    • マルチキャスト:同一ネットワーク内、同一クラスタ名で参加
    • ユニキャスト:明示的にノードを指定
    • ノード数が N の時、minimum_master_nodes は N/2 + 1
      • スプリットブレイン防止
  • 大量データの取り込み
    • Bulk API
    • stream2es
  • query string query
    • Kibana の検索窓で使用されているクエリDSL
  • ファセット
    • 検索にヒットしたデータに対して簡単な集計ができる機能
  • インデックス削除の誤操作禁止
    • action.destructive_requires_nameの設定をtrueにする
  • デフォルトでは入力されたデータをある特定の条件で単語に区切ってからインデックス登録している
    • 期待しない結果になる場合も
  • マッピング定義
    • not_analyzed
  • Multi Field
    • not_analyzed を指定したことによって全文検索ができなくなった
      • 入力データに対して複数フィールドをインデックス上に生成するための機能
  • Index Template
    • インデックス名が特定のパターンにマッチした場合に登録しておいた設定が適用される

第4章 運用TIPS

  • Elasticsearch を起動しているマシンの実メモリの半分以上を Elasticsearch のヒープサイズに指定しない
    • インデックスをファイルとして保存し、検索のたびにファイルへのアクセスが発生する
    • OSのファイルキャッシュを活用できるようにOSにも十分なメモリを確保しておく
  • スレッド数を大きくする
    • インデックスされるデータ量が多い場合にキューのサイズが溢れてしまいデータが欠落する可能性がある
  • フラッシュインターバルを大きくする
    • デフォルトで 30分、またはファイルサイズが 200mb に到達した場合 transactional logとして出力
      • 大量データの登録更新時にファイル I/O による性能劣化
  • 定期的にインデックスを削除する
    • 大量のインデックスを作成した場合、大量のファイルが作成される
  • スケールアウト
    • ノードの追加
    • レプリカシャードの追加による検索リクエスト増加への対応

第5章 インデックス管理ツールと厳選プラグイン

  • Curator
    • インデックスを無限に保持して検索することは性能的観点から問題
    • インデックスの削除
    • インデックスのクローズ
    • Bloom filter cache の無効化
    • インデックスのオプティ
  • プロキシ設定
    • -DproxyHost=ホスト名 -DproxyPort=ポート番号
  • marvel
    • 開発用は無償、プロダクション環境では有料

第6章 大量データのハンドリング elasticsearch-hadoop