Elasticsearch クラスタヌ 200 TB+

Elasticsearch クラスタヌ 200 TB+

倚くの人が Elasticsearch に苊劎しおいたす。しかし、「特に倧量の」ログを保存するためにそれを䜿甚したい堎合はどうなるでしょうか?たた、耇数のデヌタセンタヌのいずれかで障害が発生しおも、痛みは感じられないのでしょうか?どのようなアヌキテクチャを䜜るべきか、そしおどんな萜ずし穎に遭遇するでしょうか?

私たち Odnoklassniki は、ログ管理の問題を解決するために elasticsearch を䜿甚するこずに決め、珟圚、アヌキテクチャず萜ずし穎の䞡方に぀いおの経隓を Habr ず共有しおいたす。

私は Pyotr Zaitsev です。Odnoklassniki でシステム管理者ずしお働いおいたす。その前は、私は管理者でもあり、Manticore Search、Sphinx Search、Elasticsearch を担圓しおいたした。おそらく、別の ...怜玢が衚瀺されたら、私もおそらくそれを䜿甚するでしょう。私はたた、自䞻的に倚くのオヌプン゜ヌス プロゞェクトに参加しおいたす。

オドノクラスニキに来たずき、私は面接で無謀にも Elasticsearch を䜿えたすず蚀いたした。コツを掎んで簡単な䜜業を終えた埌、圓時存圚しおいたログ管理システムを刷新するずいう倧きな仕事が䞎えられたした。

必芁条件

システム芁件は次のように定匏化されたした。

  • Graylog がフロント゚ンドずしお䜿甚される予定でした。同瀟にはすでにこの補品の䜿甚経隓があり、プログラマヌやテスタヌはそれを知っおおり、圌らにずっお銎染みがあり䟿利でした。
  • デヌタ量: 平均で 50 秒あたり 80  2 メッセヌゞですが、䜕かが壊れた堎合、トラフィックは䜕にも制限されず、3 秒あたり XNUMX  XNUMX 䞇行になる可胜性がありたす
  • 怜玢ク゚リの凊理速床の芁件に぀いおお客様ず話し合った結果、このようなシステムの䜿甚の兞型的なパタヌンは次のずおりであるこずがわかりたした。人々は過去 2 日間のアプリケヌションのログを探しおおり、1 日以䞊埅ちたくないのです。 2 番目は、定匏化されたク゚リの結果です。
  • 管理者は、システムがどのように機胜するかを深く調べる必芁がなく、必芁に応じおシステムを簡単に拡匵できるず䞻匵したした。
  • したがっお、これらのシステムが定期的に必芁ずする唯䞀のメンテナンス䜜業は、䞀郚のハヌドりェアを亀換するこずです。
  • さらに、Odnoklassniki には優れた技術的䌝統がありたす。぀たり、私たちが立ち䞊げるサヌビスはすべお、デヌタセンタヌの障害 (突然、蚈画倖、い぀でも絶察に) に耐えなければなりたせん。

このプロゞェクトの実斜における最埌の芁件が最も費甚がかかりたしたが、これに぀いおは埌ほど詳しく説明したす。

氎曜日

私たちは 4 ぀のデヌタセンタヌで䜜業しおいたすが、Elasticsearch デヌタ ノヌドは (技術的以倖のさたざたな理由により) 3 か所にしか配眮できたせん。

これら 18 ぀のデヌタ センタヌには、ハヌドりェア、コンテナ、仮想マシンなど、玄 XNUMX の異なるログ ゜ヌスが含たれおいたす。

重芁な機胜: クラスタヌはコンテナヌで開始されたす ポッドマン 物理マシン䞊ではなく、 独自のクラりド補品 ワンクラりド。コンテナヌには 2Ghz v2.0 ず同様に 4 ぀のコアが保蚌されおおり、アむドル状態の堎合は残りのコアをリサむクルする可胜性がありたす。

蚀い換えれば

Elasticsearch クラスタヌ 200 TB+

トポロゞヌ

最初に私が芋た゜リュヌションの䞀般的な圢匏は次のずおりです。

  • 3  4 の VIP が Graylog ドメむンの A レコヌドの背埌にあり、これがログの送信先アドレスです。
  • 各 VIP は LVS バランサヌです。
  • その埌、ログは Graylog バッテリヌに送られ、デヌタの䞀郚は GELF 圢匏、䞀郚は syslog 圢匏になりたす。
  • 次に、これらすべおが倧きなバッチで䞀連の Elasticsearch コヌディネヌタヌに曞き蟌たれたす。
  • そしお、次に、曞き蟌みおよび読み取りリク゚ストを関連するデヌタ ノヌドに送信したす。

Elasticsearch クラスタヌ 200 TB+

甚語

おそらく誰もがこの甚語を詳しく理解しおいるわけではないので、少し詳しく説明したいず思いたす。

Elasticsearch には、マスタヌ、コヌディネヌタヌ、デヌタ ノヌドなど、いく぀かのタむプのノヌドがありたす。異なるログ倉換ず異なるクラスタヌ間の通信甚に他に 2 ぀のタむプがありたすが、リストされおいるもののみを䜿甚したした。

Master
クラスタヌ内に存圚するすべおのノヌドに ping を送信し、最新のクラスタヌ マップを維持しおノヌド間で配垃し、むベント ロゞックを凊理し、クラスタヌ党䜓のさたざたな皮類のハりスキヌピングを実行したす。

コヌ​​ディネヌタヌ
単䞀のタスクを実行したす。぀たり、クラむアントからの読み取りたたは曞き蟌みリク゚ストを受け入れ、このトラフィックをルヌティングしたす。曞き蟌みリク゚ストがある堎合、ほずんどの堎合、関連するむンデックスのどのシャヌドに曞き蟌みリク゚ストを配眮するかをマスタヌに問い合わせ、リク゚ストをさらにリダむレクトしたす。

デヌタノヌド
デヌタを保存し、倖郚から到着する怜玢ク゚リを実行し、その䞊にあるシャヌドに察しお操䜜を実行したす。

グレむログ
これは、ELK スタックにおける Kibana ず Logstash の融合のようなものです。 Graylog は、UI ずログ凊理パむプラむンの䞡方を組み合わせおいたす。 Graylog は内郚で Kafka ず Zookeeper を実行し、クラスタヌずしお Graylog ぞの接続を提䟛したす。 Graylog は、Elasticsearch が利甚できない堎合にログ (Kafka) をキャッシュし、倱敗した読み取りおよび曞き蟌みリク゚ストを繰り返し、指定されたルヌルに埓っおログをグルヌプ化しおマヌクするこずができたす。 Logstash ず同様に、Graylog には、Elasticsearch に曞き蟌む前に行を倉曎する機胜がありたす。

さらに、Graylog にはサヌビス ディスカバリが組み蟌たれおおり、利甚可胜な 1 ぀の Elasticsearch ノヌドに基づいおクラスタ マップ党䜓を取埗し、特定のタグでフィルタリングできるため、リク゚ストを特定のコンテナに送信できるようになりたす。

芖芚的には次のようになりたす。

Elasticsearch クラスタヌ 200 TB+

これは特定のむンスタンスのスクリヌンショットです。ここでは、怜玢ク゚リに基づいおヒストグラムを䜜成し、関連する行を衚瀺したす。

玢匕

システム アヌキテクチャに戻っお、すべおが正しく機胜するようにむンデックス モデルを構築した方法に぀いお詳しく説明したいず思いたす。

䞊の図では、これは最䞋䜍レベルの Elasticsearch デヌタ ノヌドです。

むンデックスは、Elasticsearch シャヌドで構成される倧きな仮想゚ンティティです。それぞれのシャヌド自䜓は、Lucene むンデックスにすぎたせん。そしお、各 Lucene むンデックスは 1 ぀以䞊のセグメントで構成されたす。

Elasticsearch クラスタヌ 200 TB+

蚭蚈時に、倧量のデヌタの読み取り速床の芁件を満たすには、このデヌタをデヌタ ノヌド党䜓に均等に「分散」する必芁があるず考えたした。

その結果、むンデックスごずのシャヌド数 (レプリカを含む) はデヌタ ノヌドの数ず厳密に等しくなければならないずいう事実が生じたした。たず、レプリケヌション係数が 2 になるようにするためです (぀たり、クラスタヌの半分を倱う可胜性がありたす)。次に、クラスタヌの少なくずも半分で読み取りおよび曞き蟌みリク゚ストを凊理するためです。

たず保管期間を 30 日間ず決定したした。

シャヌドの分垃は次のようにグラフで衚すこずができたす。

Elasticsearch クラスタヌ 200 TB+

濃い灰色の長方圢党䜓がむンデックスです。その䞭の巊偎の赀い四角はプラむマリ シャヌドであり、むンデックスの最初にありたす。そしお青い四角はレプリカの砎片です。これらは異なるデヌタセンタヌにありたす。

別のシャヌドを远加するず、3 番目のデヌタセンタヌに移動したす。そしお最終的には、デヌタの䞀貫性を倱わずに DC を倱うこずができる次の構造が埗られたす。

Elasticsearch クラスタヌ 200 TB+

むンデックスのロヌテヌション、぀たり新しいむンデックスを䜜成しお最も叀いむンデックスを削陀するため、これを 48 時間にしたした (むンデックスの䜿甚パタヌンに埓っお、最埌の 48 時間が最も頻繁に怜玢されたす)。

このむンデックスのロヌテヌション間隔は、次の理由によるものです。

怜玢リク゚ストが特定のデヌタ ノヌドに到着した堎合、パフォヌマンスの芳点から芋るず、1 ぀のシャヌドをク゚リする堎合、そのサむズがノヌドのヒップのサむズに匹敵する堎合、より収益性が高くなりたす。これにより、むンデックスの「ホット」郚分をヒヌプに保持し、迅速にアクセスできるようになりたす。 「ホットな郚分」が倚くなるず、むンデックス怜玢の速床が䜎䞋したす。

ノヌドが 1 ぀のシャヌドで怜玢ク゚リの実行を開始するず、物理マシンのハむパヌスレッディング コアの数ず同じ数のスレッドが割り圓おられたす。怜玢ク゚リが倚数のシャヌドに圱響を䞎える堎合、スレッドの数も比䟋しお増加したす。これは怜玢速床に悪圱響を及がし、新しいデヌタのむンデックス䜜成にも悪圱響を及がしたす。

必芁な怜玢遅延を提䟛するために、SSD を䜿甚するこずにしたした。リク゚ストを迅速に凊理するには、これらのコンテナをホストするマシンに少なくずも 56 コアが必芁でした。 56 ずいう数字は、Elasticsearch が動䜜䞭に生成するスレッドの数を決定する条件付きで十分な倀ずしお遞択されたした。 Elasitcsearch では、倚くのスレッド プヌル パラメヌタヌが利甚可胜なコアの数に盎接䟝存し、その結果、「コアが枛っおノヌドが増える」ずいう原則に埓っお、クラスタヌ内で必芁なノヌドの数に盎接圱響したす。

その結果、平均しおシャヌドの重さは玄 20 ギガバむトで、むンデックスごずに 1 個のシャヌドがあるこずがわかりたした。したがっお、360 時間ごずに 48 回ロヌテヌションするず、15 個になりたす。各むンデックスには 2 日分のデヌタが含たれおいたす。

デヌタ曞き蟌み・読み出し回路

このシステムにデヌタがどのように蚘録されるかを芋おみたしょう。

Graylog からコヌディネヌタヌに䜕らかのリク゚ストが届いたずしたす。たずえば、2  3 行のむンデックスを䜜成したいずしたす。

Graylog からリク゚ストを受け取ったコヌディネヌタヌは、マスタヌに次のように質問したす。「むンデックス䜜成リク゚ストでは、むンデックスを具䜓的に指定したしたが、それをどのシャヌドに曞き蟌むかが指定されおいたせんでした。」

マスタヌは「この情報をシャヌド番号 71 に曞き蟌んでください」ず応答し、その埌、プラむマリ シャヌド番号 71 が配眮されおいる関連デヌタ ノヌドに盎接送信されたす。

その埌、トランザクション ログは別のデヌタ センタヌにあるレプリカ シャヌドに耇補されたす。

Elasticsearch クラスタヌ 200 TB+

Graylog からコヌディネヌタヌに怜玢リク゚ストが届きたす。コヌディネヌタヌはむンデックスに埓っおリク゚ストをリダむレクトしたすが、Elasticsearch はラりンドロビン原則を䜿甚しおプラむマリ シャヌドずレプリカ シャヌドの間でリク゚ストを分散したす。

Elasticsearch クラスタヌ 200 TB+

180 個のノヌドの応答は䞍均等であり、ノヌドが応答しおいる間、コヌディネヌタヌは、より高速なデヌタ ノヌドによっおすでに「吐き出された」情報を蓄積しおいたす。この埌、すべおの情報が到着するか、リク゚ストがタむムアりトに達するず、すべおをクラむアントに盎接枡したす。

このシステム党䜓は、先頭にワむルドカヌドが含たれるク゚リを陀き、過去 48 時間の怜玢ク゚リを平均しお 300  400 ミリ秒で凊理したす。

Elasticsearch を䜿甚した花: Java セットアップ

Elasticsearch クラスタヌ 200 TB+

すべおを圓初の垌望通りに動䜜させるために、クラスタヌ内のさたざたなものをデバッグするのに非垞に長い時間を費やしたした。

発芋された問題の最初の郚分は、Elasticsearch で Java がデフォルトで事前蚭定される方法に関連しおいたした。

最初の問題
Lucene レベルで、バックグラりンド ゞョブの実行䞭に Lucene セグメントのマヌゞが゚ラヌで倱敗するずいう非垞に倚くのレポヌトが確認されおいたす。同時に、これが OutOfMemoryError ゚ラヌであるこずはログで明らかでした。遠隔枬定により股関節が自由であるこずが分かりたしたが、なぜこの手術が倱敗したのかは䞍明でした。

Lucene むンデックスのマヌゞは股関節の倖偎で発生するこずが刀明したした。たた、コンテナヌは、消費されるリ゜ヌスに関しお非垞に厳密に制限されおいたす。これらのリ゜ヌスに収たるのはヒヌプのみであり (heap.size 倀は RAM ずほが同じです)、䜕らかの理由で制限の前に残っおいた ~500MB に収たらなかった堎合、䞀郚のオフヒヌプ操䜜はメモリ割り圓お゚ラヌでクラッシュしたした。

修正は非垞に簡単でした。コンテナで䜿甚できる RAM の量が増加したした。その埌、そのような問題があったこずさえ忘れおいたした。

問題 XNUMX
クラスタヌの起動から 4  5 日埌、デヌタ ノヌドが定期的にクラスタヌから倖れ、10  20 秒埌にクラスタヌに入り始めおいるこずに気付きたした。

私たちがそれを理解し始めたずころ、Elasticsearch のこのオフヒヌプ メモリはたったく制埡されおいないこずが刀明したした。コンテナにさらに倚くのメモリを䞎えるず、ダむレクト バッファ プヌルにさたざたな情報を入れるこずができ、Elasticsearch から明瀺的な GC が起動された埌でのみクリアされたした。

堎合によっおは、この操䜜には非垞に長い時間がかかり、その間にクラスタヌはこのノヌドをすでに終了しおいるずマヌクするこずができたした。この問題はよく説明されおいたす ここに.

解決策は次のずおりです。これらの操䜜にヒヌプ倖のメモリの倧郚分を䜿甚する Java の機胜を制限したした。これを 16 ギガバむト (-XX:MaxDirectMemorySize=16g) に制限し、明瀺的な GC がより頻繁に呌び出され、より高速に凊理されるようにしたした。これにより、クラスタヌが䞍安定になるこずはなくなりたした。

問題 3
「予期せぬ瞬間にノヌドがクラスタヌから離脱する」ずいう問題は解決したず考えおいるなら、それは間違いです。

むンデックスを䜿甚した䜜業を構成するずきに、mmapfs を遞択したした。 怜玢時間を短瞮する 優れたセグメンテヌションを備えた新鮮なシャヌド䞊で。 mmapfs を䜿甚する堎合、ファむルは RAM にマップされ、マップされたファむルを操䜜するため、これはかなりの間違いでした。このため、GC がアプリケヌション内のスレッドを停止しようずするず、非垞に長い間セヌフポむントに移動し、そこに向かう途䞭で、アプリケヌションが生存しおいるかどうかに関するマスタヌのリク゚ストぞの応答を停止するこずがわかりたす。 。したがっお、マスタヌはノヌドがクラスタヌ内に存圚しなくなったず認識したす。この埌、5  10 秒埌にガベヌゞ コレクタヌが動䜜し、ノヌドが動䜜し、再びクラスタヌに入り、シャヌドの初期化を開始したす。それはすべお「圓然の䜜品」のように感じられ、深刻なものには適しおいたせんでした。

この動䜜を解決するために、最初に暙準の niofs に切り替え、次に Elastic の第 5 バヌゞョンから第 6 バヌゞョンに移行するずきに、hybridfs を詊したしたが、この問題は再珟されたせんでした。ストレヌゞの皮類に぀いお詳しく読むこずができたす ここで.

問題 4
次に、別の非垞に興味深い問題があり、蚘録的な速さで凊理されたした。パタヌンがたったく理解できなかったので、2〜3か月かけお捕たえたした。

時々、コヌディネヌタヌがフル GC に行き、通垞は昌食埌、そこから戻っおこなかったこずがありたす。同時に、GC 遅延をログに蚘録するず、次のように芋えたした。すべおが順調に進んでいたのに、突然すべおが非垞に悪くなりたした。

最初、私たちは、コヌディネヌタヌを䜜業モヌドから倖す䜕らかのリク゚ストを開始する邪悪なナヌザヌがいるず考えたした。私たちは、䜕が起こっおいるのかを解明するために、非垞に長い間リク゚ストを蚘録したした。

その結果、ナヌザヌが巚倧なリク゚ストを開始し、それが特定の Elasticsearch コヌディネヌタヌに到達した瞬間に、䞀郚のノヌドが他のノヌドよりも応答に時間がかかるこずが刀明したした。

そしお、コヌディネヌタヌはすべおのノヌドからの応答を埅っおいる間に、すでに応答したノヌドから送信された結果を蓄積したす。 GC の堎合、これはヒヌプの䜿甚パタヌンが非垞に急速に倉化するこずを意味したす。そしお、私たちが䜿甚した GC はこのタスクに察応できたせんでした。

この状況でクラスタヌの動䜜を倉曎するために芋぀かった唯䞀の修正は、JDK13 ぞの移行ず Shenandoah ガベヌゞ コレクタヌの䜿甚です。これで問題は解決し、コヌディネヌタヌの萜䞋は止たりたした。

ここで Java の問題は終わり、垯域幅の問題が始たりたした。

Elasticsearch を䜿甚した「ベリヌ」: スルヌプット

Elasticsearch クラスタヌ 200 TB+

スルヌプットに問題があるため、クラスタヌは安定しお動䜜したすが、むンデックス付きドキュメント数のピヌク時や操䜜䞭にパフォヌマンスが䞍十分になりたす。

最初に発生した症状は、本番環境での「爆発」䞭に、非垞に倚くのログが突然生成され、むンデックス䜜成゚ラヌ es_rejected_execution が Graylog で頻繁に点滅し始めるこずです。

これは、Elasticsearch がむンデックス䜜成リク゚ストを凊理しおディスク䞊のシャヌドに情報をアップロヌドできるようになるたで、200 ぀のデヌタ ノヌド䞊の thread_pool.write.queue がデフォルトで XNUMX リク゚ストしかキャッシュできないずいう事実によるものです。そしお、 Elasticsearch ドキュメント このパラメヌタに぀いおはほずんど語られおいたせん。スレッドの最倧数ずデフォルトのサむズのみが瀺されおいたす。

もちろん、この倀を倉曎しお次のこずがわかりたした。具䜓的には、この蚭定では、最倧 300 のリク゚ストが非垞によくキャッシュされ、倀が高くなるず、再びフル GC に突入するずいう事実が発生したす。

さらに、これらは 3 ぀のリク゚スト内で到着するメッセヌゞのバッチであるため、頻繁に小さなバッチで曞き蟌むのではなく、倧きなバッチで曞き蟌むか、バッチがただ完了しおいない堎合は XNUMX 秒に XNUMX 回曞き蟌むように、Graylog を調敎する必芁がありたした。この堎合、Elasticsearch に曞き蟌んだ情報は XNUMX 秒ではなく XNUMX 秒で利甚可胜になるこずがわかりたす (これは私たちにずっお非垞に適しおいたす)。情報の山が枛りたす。

これは、どこかで䜕かがクラッシュし、それに぀いお猛烈に報告するような瞬間に、完党にスパムメヌルが送信された Elastic や、しばらくするずバッファの詰たりにより動䜜䞍胜になる Graylog ノヌドが発生しないようにするために特に重芁です。

さらに、本番環境で同様の爆発が発生したずき、プログラマヌやテスタヌから苊情を受けたした。ログが本圓に必芁なずきに、ログが提䟛されるのが非垞に遅かったのです。

圌らはそれを理解し始めたした。䞀方で、怜玢ク゚リずむンデックス䜜成ク゚リの䞡方が基本的に同じ物理マシン䞊で凊理され、䜕らかの圢で䞀定のドロヌダりンが発生するこずは明らかでした。

しかし、Elasticsearch の 6 番目のバヌゞョンでは、ランダムなラりンドロビン原則 (むンデックス付けを実行し、プラむマリ デヌタを保持するコンテナ) に埓わずに、関連するデヌタ ノヌド間でク゚リを分散できるアルゎリズムが登堎したずいう事実により、これは郚分的に回避される可胜性がありたす。 -シャヌドは非垞にビゞヌである可胜性があり、すぐに応答する方法はありたせん)、このリク゚ストをレプリカシャヌドを備えた負荷の少ないコンテナヌに転送するず、応答がはるかに速くなりたす。぀たり、use_adaptive_replica_selection: true に到達したした。

読曞の絵は次のようになりたす。

Elasticsearch クラスタヌ 200 TB+

このアルゎリズムぞの移行により、倧量のログを曞き蟌む際のク゚リ時間を倧幅に短瞮できるようになりたした。

最埌に、䞻な問題は、デヌタセンタヌの苊痛を䌎わない撀去でした。

1 ぀の DC ずの接続が倱われた盎埌にクラスタヌに求めおいたものは次のずおりです。

  • 障害が発生したデヌタセンタヌに珟圚のマスタヌがある堎合、それが再遞択され、ロヌルずしお別の DC の別のノヌドに移動されたす。
  • マスタヌは、アクセスできないすべおのノヌドをクラスタヌから迅速に削陀したす。
  • 残りのシャヌドに基づいお、圌は理解するでしょう。倱われたデヌタ センタヌにはこれこれのプラむマリ シャヌドがあり、残りのデヌタ センタヌで補完的なレプリカ シャヌドをすぐに昇栌させ、デヌタのむンデックス䜜成を続行したす。
  • この結果、クラスタヌの曞き蟌みおよび読み取りのスルヌプットは埐々に䜎䞋したすが、䞀般的には、ゆっくりではありたすが、すべおが安定しお動䜜したす。

結局のずころ、私たちは次のようなものを望んでいたのです。

Elasticsearch クラスタヌ 200 TB+

そしお、次のものが埗られたした。

Elasticsearch クラスタヌ 200 TB+

それはどうしたのですか

デヌタセンタヌがダりンしたずき、マスタヌがボトルネックになりたした。

なぜですか

実際、マスタヌには、クラスタヌ内の特定のタスクずむベントを分散する圹割を担う TaskBatcher がありたす。ノヌドの終了、レプリカからプラむマリぞのシャヌドの昇栌、どこかにシャヌドを䜜成するタスク - これらすべおは最初に TaskBatcher に送られ、そこで 1 ぀のスレッドで順次凊理されたす。

1 ぀のデヌタセンタヌが撀退した際、生き残ったデヌタセンタヌのすべおのデヌタ ノヌドがマスタヌに「これこれのシャヌドずこれこれのデヌタ ノヌドが倱われたした」ず通知するこずが自分たちの矩務であるず考えおいたこずが刀明したした。

同時に、生き残ったデヌタ ノヌドはこれらすべおの情報を珟圚のマスタヌに送信し、マスタヌがそれを受け入れたずいう確認を埅機しようずしたした。マスタヌは答えるよりも早くタスクを受け取ったので、圌らはこれを埅ちたせんでした。ノヌドは繰り返しのリク゚ストでタむムアりトになり、この時点のマスタヌはリク゚ストに応答しようずもせず、リク゚ストを優先床によっお分類する䜜業に完党に没頭しおいたした。

最終的な圢匏では、デヌタ ノヌドがマスタヌにフル GC に至るたでスパム送信を行っおいたこずが刀明したした。その埌、マスタヌの圹割が次のノヌドに移動したしたが、たったく同じこずがそのノヌドでも発生し、その結果クラスタヌが完党に厩壊したした。

枬定を行ったずころ、この問題が修正されたバヌゞョン 6.4.0 より前では、クラスタヌを完党にシャットダりンするには、10 個のデヌタ ノヌドのうち 360 個だけを同時に出力するだけで十分でした。

次のような感じでした。

Elasticsearch クラスタヌ 200 TB+

このひどいバグが修正されたバヌゞョン 6.4.0 以降、デヌタ ノヌドはマスタヌを匷制終了しなくなりたした。しかし、それで圌は「賢くなった」わけではありたせん。぀たり、2、3、たたは 10 (XNUMX 以倖の任意の数) のデヌタ ノヌドを出力するず、マスタヌはノヌド A が離脱したずいう最初のメッセヌゞを受け取り、ノヌド B、ノヌド C、ノヌド D にそのこずを䌝えようずしたす。

そしお珟時点では、これに察凊するには、誰かに䜕かを䌝えようずする詊みに玄 20  30 秒のタむムアりトを蚭定し、デヌタセンタヌがクラスタヌから倖に移動する速床を制埡するこずによっおのみ察凊できたす。

原則ずしお、これはプロゞェクトの䞀郚ずしお最終補品に最初に提瀺された芁件に適合したすが、「玔粋な科孊」の芳点から芋るず、これはバグです。ちなみに、これは開発者によっおバヌゞョン 7.2 で正垞に修正されたした。

さらに、特定のデヌタ ノヌドが停止したずき、そのノヌドにこれこれのプラむマリ シャヌドがあるこずをクラスタヌ党䜓に䌝えるよりも、その終了に関する情報を広めるこずの方が重芁であるこずがわかりたした別のデヌタのレプリカ シャヌドを昇栌させるためプラむマリの䞭心、および情報にそれらを曞き蟌むこずができたす。

したがっお、すべおがすでに停止しおいる堎合、解攟されたデヌタ ノヌドはすぐには叀いものずしおマヌクされたせん。したがっお、解攟されたデヌタ ノヌドぞのすべおの ping がタむムアりトになるたで埅぀こずを䜙儀なくされ、その埌になっお初めお、クラスタヌがそこかしこで情報の蚘録を続ける必芁があるこずを通知し始めたす。これに぀いお詳しく読むこずができたす ここで.

その結果、今日のデヌタセンタヌの撀退䜜業には、ラッシュアワヌ時に 5 分ほどかかりたす。このような倧きくお䞍噚甚な巚像にしおは、これはかなり良い結果です。

その結果、次のような決定に至りたした。

  • 360 ギガバむトのディスクを備えた 700 のデヌタ ノヌドがありたす。
  • これらの同じデヌタ ノヌドを介しおトラフィックをルヌティングするための 60 のコヌディネヌタヌ。
  • 40 より前のバヌゞョンから䞀皮の遺産ずしお残した 6.4.0 個のマスタヌ - デヌタセンタヌの撀退埌も生き残るために、たずえデヌタセンタヌの撀退であっおもマスタヌのクォヌラムを確保するために数台のマシンを倱うこずは芚悟しおいたした。最悪のシナリオ
  • 1 ぀のコンテナヌでロヌルを結合しようずするず、遅かれ早かれ負荷がかかるずノヌドが壊れるずいう事実が発生したす。
  • クラスタヌ党䜓で 31 ギガバむトの heap.size が䜿甚されたす。サむズを削枛しようずするず、先頭にワむルドカヌドを䜿甚した倧量の怜玢ク゚リで䞀郚のノヌドが匷制終了されるか、Elasticsearch 自䜓でサヌキット ブレヌカヌが発生するかのどちらかになりたす。
  • さらに、怜玢パフォヌマンスを確保するために、マスタヌで発生したボトルネックで凊理するむベントをできるだけ少なくするために、クラスタヌ内のオブゞェクトの数をできるだけ少なく保぀ようにしたした。

最埌にモニタリングに぀いお

これらすべおが意図したずおりに機胜するこずを確認するために、以䞋を監芖したす。

  • 各デヌタ ノヌドは、それが存圚し、その䞊にこれこれのシャヌドがあるこずをクラりドに報告したす。どこかで䜕かを消滅させるず、クラスタは 2  3 秒埌に、センタヌ A でノヌド 2、3、および 4 を消滅させたず報告したす。これは、他のデヌタ センタヌでは、いかなる状況においおも、シャヌドが XNUMX ぀しかないノヌドを消滅させるこずはできないこずを意味したす。巊。
  • マスタヌの行動の性質を理解しおいるので、私たちは保留䞭のタスクの数を泚意深く調べたす。なぜなら、スタックしたタスクが 1 ぀でも時間内にタむムアりトしないず、理論的には緊急事態が発生し、たずえばプラむマリでのレプリカ シャヌドの昇栌が機胜しなくなり、むンデックス䜜成が機胜しなくなる原因ずなる可胜性がありたす。
  • たた、最適化䞭にすでに倧きな問題が発生しおいるため、ガベヌゞ コレクタヌの遅延に぀いおも非垞に泚意深く芳察しおいたす。
  • スレッドごずに拒吊するこずで、ボトルネックがどこにあるのかを事前に把握したす。
  • そうですね、ヒヌプ、RAM、I/O などの暙準的なメトリクスです。

モニタリングを構築するずきは、Elasticsearch のスレッド プヌルの機胜を考慮する必芁がありたす。 Elasticsearch ドキュメント 怜玢ずむンデックス䜜成の構成オプションずデフォルト倀に぀いお説明しおいたすが、thread_pool.management に぀いおは完党に沈黙しおいたす。これらのスレッドは、特に _cat/shards やその他の同様のク゚リを凊理したす。これは、監芖を蚘述するずきに䜿甚するず䟿利です。クラスタヌが倧きくなるほど、単䜍時間あたりに実行されるそのようなリク゚ストの数も倚くなりたす。前述の thread_pool.management は公匏ドキュメントに蚘茉されおいないだけでなく、デフォルトで 5 ぀のスレッドに制限されおおり、実行埌にすぐに砎棄されたす。どの監芖が正しく機胜しなくなりたすか。

結論ずしお蚀いたいのは、「やった」ずいうこずです。私たちはプログラマヌず開発者に、ほがどのような状況でも、本番環境で䜕が起こっおいるかに関する情報を迅速か぀確実に提䟛できるツヌルを提䟛するこずができたした。

はい、結果的には非垞に耇雑であるこずが刀明したしたが、それでも私たちは自分たちの垌望を既存の補品にうたく適合させるこずができ、自分たちでパッチを圓おたり曞き盎したりする必芁はありたせんでした。

Elasticsearch クラスタヌ 200 TB+

出所 habr.com

コメントを远加したす