Skip to content

Instantly share code, notes, and snippets.

@Asuforce
Created March 8, 2023 14:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Asuforce/c44d883511380945a38dd8fe97e05469 to your computer and use it in GitHub Desktop.
Save Asuforce/c44d883511380945a38dd8fe97e05469 to your computer and use it in GitHub Desktop.

Elasticsearch Basic Concepts

Near Realtime

  • es は near realtime 検索プラットフォーム
  • 文章を検索するまでのインデックスを作成する時間がわずか

Cluster

  • cluster は1つもしくは複数からなるノード
  • cluster 全体でデータを保持し、フェデレートインデックス付与と検索機能を提供する
  • cluster の default name は “elasticsearch”
  • 異なるクラスタ環境で同じクラスタ名を使うべきではない
    • 意図しないクラスタにノードが追加される可能性があるため
    • prefix を付けるなどして対応する

Node

  • ノードはクラスタの一部のサーバ
  • データの保持や、インデックスの作成、検索機能を提供する
  • クラスタのようにランダムな uuid で識別される
  • default で “elasticsearch” cluster に参加するようになっている

Index

  • 類似した特性をもつ文書の集合
  • カスタマーデータを保持している場合の例
    • 他のプロダクトカタログのもう1つインデックス
    • 注文データの更に別のインデックス
  • インデックスは名前によって識別される
    • 名前はすべて小文字
  • 名前は文書に対しての操作を実行する時に参照される
    • 操作の例
      • 索引付与
      • 検索
      • 更新
      • 削除

Document

  • document は索引付けできる情報の基本単位
  • 単一顧客の document を持っている場合
    • 他の単一製品のもう1つの document
    • 単一注文の更に別の document
  • この document は json で表現される

Shards

  • インデックスには単一ノードのハードウェア制限を超える可能性のあるデータが格納される可能性がある
  • ディスクフルになった単一ノードだけの場合、検索が非常に遅くなる
  • この問題を解決するために ES は index を shards と呼ばれる複数のピースに分割する機能がある
  • インデックスを作成するときに、シャードの数を単純に指定できる。
  • それぞれのシャード自体が完全に機能的で独立した “index”
    • それはクラスタ内の任意のノードでホストできる
  • シャードが重要な2つの主要な理由
    • コンテンツの量を水平に分割、拡大ができる
    • シャードにまたがった操作を分散及び並列化できるため、パフォーマンスが向上する

Replica

  • 障害がいつでも発生する可能性があるネットワークやクラウド環境
    • シャードやノードがなんらかの理由でオフラインになったり消えたりした場合
    • フェイルオーバーメカニズムが有用で、強く推奨される
    • このようなバイのために ES はインデックスのシャードのコピーをする
    • これはレプリカシャードであり、レプリカと短く呼ぶ
  • レプリケーションが重要な2つの主要な理由
    • シャードやノードに障害が発生した場合に備えて HA を提供する
      • レプリカシャードはオリジナルや主要なシャードと同じノードに決して割り当てられないようにするのが重要
    • 検索容量やスループットをスケールアウトできる
  • 各インデックスは複数のシャードに分割できる
  • インデックスは 1回以上複製することができる
  • 複製すると、各インデックスにプライマリーシャードとレプリカシャードが保持される
  • インデックスを作成した後でも動的にレプリカの数を変更できる
    • しかし簡単な作業ではないため、事前に計画するのが最適
  • default では primary/replica が1つずつ
    • 2ノードのクラスタの場合、1つのノードにプライマリ、もう1つレプリカが保持されることを意味している
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment