分散アーキテクチャの基礎をElasticsearch
複雑な分散メカニズムの透明隠された性質をElasticsearch
Elasticsearchは、大量のデータに応答して分散する分散システムです。
Elasticsearchは、分散メカニズムの複雑さを隠し:
- フラグメンテーション:クラスタESの一部が行く我々が何気なくドキュメントに挿入する前になります、私たちはどのシャードを行ったために、データを分散する方法についてのデータを気にしないでください。
- クラスタ検出メカニズム(クラスタの検出):新しいプロセスESを起動した場合、プロセスは自動的に参加し、ノードおよびクラスタESとして発見されるES。
- 負荷分散シャードは、たとえば、均等ESが自動的に保証するために割り当てられた分割され、3つのノード、3つのノードまで割り当てる25シャードの合計が存在すると仮定し、読み出し要求各ノードの負荷分散
- shard副本
- 要求ルーティング
- クラスター展開
- シャードの再配布
水平方向の拡大と垂直拡大Elasticsearch
拡張プラン:
6つのサーバーには、それぞれ2つのオプションがあり、1Tのデータはすぐにあなたが8Tしたいデータの量を増加させ、この時間を保持します。
(1)垂直展開を2台のサーバーの購入再、各サーバーの容量は、サーバ6今、総容量は4 * 1T + 2 * 2T = 8Tで、代わりに古い2台のサーバーで、2Tです。
(2)展開のレベル:新規購入二つのサーバ、各サーバーの容量が1Tであるので、今のサーバーの総容量は1T = 8T * 8で、行くためにクラスタに直接追加
垂直方向の拡大は:コストが非常に高く、より強力なサーバーを購入し、世界で最も強力なサーバー容量が10Tであると仮定すると、ボトルネックがあるでしょうが、あなたは総数5000T時間に達したときに、どのように多くのあなたは、最も強力なを購入したいですサーバああ。
水平方向の拡張:業界は頻繁に強力なコンピューティングとストレージ容量を構成することができ、一緒にグループ化されたプログラム、より多くの一般的なサーバーの調達、より一般的なパフォーマンスが、多くの普通のサーバを使用しています。
データが増減または減少するリバランスノード
例えば、ノードは、シャードを有するそのうち3つ、4つのノードは、今あり、1つのGeノードは、二つの断片を有しているが、新たなノードがある場合、この時間は、ESが新たに追加されたに割り当てられシャードに自動的に追加されますノードアップ。
マスターノード
エスは、常にクラスタノードがマスターノードである必要があります。
- エスクラスタ管理メタデータ:例えば、インデックスの作成と削除、インデックス・メタデータを維持し、ノードを追加および削除、メンテナンスデータのクラスター
- デフォルトでは、自動的にマスターノードとしてノードを選択します
- マスターノードが要求のすべてを運ぶことはありません、それがボトルネックの一つのポイントではありません
ノード分散アーキテクチャの平等
- ピア・ノードは、各ノードはすべての要求を受信することができます。
- ルート要求:要求を受信した後、任意のノード、要求は自動的にリクエストを処理するために、関連するノードまでにルーティングすることができます。
- レスポンスコレクション:別のノードからデータを受信することに応答して、最も原始的なノードは、その後、クライアントにデータを返します。
プライマリー断片と再びメカニズムをコーミングレプリカシャード
- シャードの複数を含むインデックス(指標)
- 各シャードは、データ、Luceneのインスタンス、完全なインデックスと要求を処理する能力の一部を担持する、作業の最小単位です。
-
ノードの変化すると、破片は自動的にバランスをとるのノードをロードします。
- プライマリー断片と複製断片、各ドキュメントは、プライマリー断片の複数に存在することができない、唯一の特定のプライマリー断片とその対応するレプリカshradが存在しなければなりません。
- レプリカのシャードは、フォールトトレランス、負荷リード要求を負担する責任プライマリー断片のコピー、です。
- 索引の作成にプライマリー断片の数が固定されており、複製断片の数は、いつでも変更することができます。
- プライマリー断片のデフォルト数は5であり、レプリカshradデフォルトの数は1です。
- プライマリー断片とそのレプリカのシャードは、同じノードに配置することができない(またはノードダウンし、プライマリー断片とレプリカのシャードは失われていた、耐障害性の役割を達成できないだろう。)が、他のプライマリー断片とレプリカのシャードが配置されます同じノード上で。
以下のような単一ノードの環境指標の外観を作成しますか?
- シングルノード環境は、インデックスを作成:3つのプライマリー断片、3 Geのレプリカシャードがあります
PUT /test_index { "settings" : { "number_of_shards" : 3, "number_of_replicas" : 1 } }
- 集群状态是yellow
- 这个时候,只会将3个primary shard分配到仅有的一个node上去,另外3个replica shard是无法分配的
- 集群可以正常工作,但是一旦出现节点宕机,数据全部丢失,而且集群不可用,无法承担任何请求
两个node环境下replica shard是如何分配的?
此时的情况,1个node、3个primary shard、3个replica shard
如果此时新增一个node进来,构成了一个由2个node组成的es集群,如下:
并且:
- primary shard会自动把数据同步到对应的replica shard上去
- 客户端的读请求可以发送到primary shard上去,也可以发送到replica shard上去
Elasticsearch横向扩容
- primary shard 和 replica shard自动负载均衡
目前情况:2个node, 3个primary shard,3个replica shard
如果此时给es集群增加一个节点(node),es会自动对primary shard和replica shard进行负载均衡 - 每个Node有更少的shard, IO/CPU/Memory资源给每个shard分配更多,每个shard性能更好
- 扩容的极限,6个shard(3个primary shard,3个replica shard),最多扩容到6台机器,每个shard可以占用单台服务器的所有资源,性能最好
- 超出扩容极限,动态修改replica数量,9个shard(3primary,6 replica),扩容到9台机器,比3台机器时,拥有3倍的读吞吐量
- 3台机器下,9个shard(3 primary,6 replica),资源更少,但是容错性更好,最多容纳2台机器宕机,6个shard只能容纳0台机器宕机
- 这里的这些知识点,你综合起来看,就是说,一方面告诉你扩容的原理,怎么扩容,怎么提升系统整体吞吐量;另一方面要考虑到系统的容错性,怎么保证提高容错性,让尽可能多的服务器宕机,保证数据不丢失
Elasticsearch容错机制
- master选举、replica容错、数据恢复
目前es集群情况:3个node,9个shard(3个primary shard,6个replica shard)
如果此时master node宕机:
因为Node1节点宕机了,所以primary shard0、replica shard1、replica shard2三个3shard就丢失了。master node宕机的一瞬间,primary shard0这个shard就没有了,此时就不是active status,所以集群的状态为red.
- 容错第一步:master选举,自动选举另外一个node成为新的master,承担起master的责任来:
-
容错第二步:新master将丢失的primary shard的某个replica shard提升为primary shard,此时cluster status会变为Yellow,因为所有的primary shard都变成了active status,但是,少了一个replica shard,所以不是所有的replica shard都是active。
- 容错第三步:重启故障的node, new master节点将会把缺失的副本都copy一份到该node上去,而且该node会使用之前已有的shard数据,只是同步一下宕机之后发生的改变。
此时es cluster的状态为green,因为所有的primary shard和replica shard都是active状态。