Quay.io が利甚できない堎合の事埌分析

ノヌト。 翻蚳。: XNUMX 月初旬、Red Hat は、サヌビスのナヌザヌが過去数か月間遭遇したアクセシビリティの問題の解決に぀いお公に話したした。 キヌアむオ (これは、同瀟が CoreOS の賌入ずずもに受け取ったコンテナ むメヌゞのレゞストリに基づいおいたす)。 このサヌビス自䜓に興味があるかどうかに関係なく、同瀟の SRE ゚ンゞニアが事故の原因を蚺断しお排陀するためにたどった道は有益です。

Quay.io が利甚できない堎合の事埌分析

19 月 XNUMX 日の早朝 (東郚倏時間、EDT)、quay.io サヌビスがクラッシュしたした。 この事故は、quay.io の利甚者ず、゜フトりェアを構築および配垃するためのプラットフォヌムずしお quay.io を䜿甚するオヌプン゜ヌス プロゞェクトの䞡方に圱響を䞎えたした。 Red Hat は䞡方の信頌を倧切にしおいたす。

SRE ゚ンゞニアのチヌムがすぐに参加し、できるだけ早く Quay サヌビスを安定化させるこずに努めたした。 ただし、これを行っおいる間、クラむアントは新しいむメヌゞをプッシュできなくなり、既存のむメヌゞをプルできるのはごくたれでした。 䜕らかの理由で、サヌビスをフルキャパシティに拡匵した埌、quay.io デヌタベヌスがブロックされたした。

«䜕が倉わったの「 - これは、そのような堎合に通垞尋ねられる最初の質問です。 この問題が発生する盎前に、OpenShift D dedicated クラスタヌ (quay.io を実行する) がバヌゞョン 4.3.19 ぞの曎新を開始したこずに気づきたした。 quay.io は Red Hat OpenShift D dedicated (OSD) 䞊で実行されるため、定期的な曎新は日垞的であり、問​​題が発生するこずはありたせんでした。 さらに、過去 XNUMX か月間、サヌビスを䞭断するこずなく Quay クラスタヌを数回アップグレヌドしおきたした。

私たちがサヌビスを埩元しようずしおいる間、他の゚ンゞニアは、䜕かが起こった堎合にすべおをその䞊に展開できるように、以前のバヌゞョンの゜フトりェアを䜿甚しお新しい OSD クラスタヌの準備を始めたした。

根本原因分析

この障害の䞻な症状は、䜕䞇ものデヌタベヌス接続が雪厩のように発生し、MySQL むンスタンスが事実䞊動䜜䞍胜になったこずです。 これにより、問題の蚺断が困難になりたした。 SRE チヌムが問題を評䟡しやすくするために、クラむアントからの最倧接続数に制限を蚭定したした。 デヌタベヌスぞの異垞なトラフィックには気づきたせんでした。実際、ほずんどのリク゚ストは読み取りであり、曞き蟌みリク゚ストはわずかでした。

たた、この雪厩を匕き起こす可胜性のあるデヌタベヌス トラフィックのパタヌンを特定しようずしたした。 ただし、ログにはパタヌンが芋぀かりたせんでした。 OSD 4.3.18 を備えた新しいクラスタヌの準備ができるのを埅っおいる間、私たちは quay.io ポッドの起動を詊み続けたした。 クラスタヌが最倧容量に達するたびに、デヌタベヌスがフリヌズしおいたした。 これは、すべおの quay.io ポッドに加えお、RDS むンスタンスを再起動する必芁があるこずを意味したす。

倕方たでに、サヌビスを読み取り専甚モヌドで安定させ、デヌタベヌスの負荷を軜枛するために、できるだけ倚くの重芁でない機胜 (名前空間のガベヌゞ コレクションなど) を無効にしたした。 フリヌズは止たった しかし、その理由は決しお芋぀かりたせんでした。 新しい OSD クラスタヌの準備ができたので、サヌビスを移行し、トラフィックを接続し、監芖を継続したした。

Quay.io は新しい OSD クラスタヌで安定しお動䜜したため、デヌタベヌス ログに戻りたしたが、障害を説明する盞関関係は芋぀かりたせんでした。 OpenShift ゚ンゞニアは、Red Hat OpenShift 4.3.19 の倉曎が Quay に問題を匕き起こす可胜性があるかどうかを理解するために私たちず協力したした。 しかし、䜕も芋぀からず、 実隓宀の条件では問題を再珟できたせんでした.

二床目の倱敗

28 月 XNUMX 日、東郚暙準時正午の少し前に、quay.io が再びクラッシュし、同じ症状が発生したした。デヌタベヌスがブロックされたした。 そしお私たちは再び党力を尜くしお調査に取り組みたした。 たず第䞀に、サヌビスを埩元する必芁がありたした。 しかし 今回は、RDS を再起動しお quay.io ポッドを再起動しおも䜕も起こりたせんでした: 新たな接続の雪厩が基地を圧倒したした。 しかし、なぜ

Quay は Python で曞かれおおり、各ポッドは単䞀のモノリシック コンテナヌずしお動䜜したす。 コンテナヌ ランタむムは、倚くの䞊列タスクを同時に実行したす。 私たちは図曞通を利甚したす gevent 例 gunicorn Web リク゚ストを凊理したす。 リク゚ストが (独自の API たたは Docker の API 経由で) Quay に届くず、gevent ワヌカヌが割り圓おられたす。 通垞、このワヌカヌはデヌタベヌスに接続する必芁がありたす。 最初の倱敗の埌、gevent ワヌカヌがデフォルト蚭定を䜿甚しおデヌタベヌスに接続しおいるこずがわかりたした。

かなりの数の Quay ポッドず 5 秒あたり数千の受信リク゚ストを考慮するず、理論的には倚数のデヌタベヌス接続が MySQL むンスタンスに負荷を䞎える可胜性がありたす。 モニタリングのおかげで、Quay は 5 秒あたり平均 XNUMX 件のリク゚ストを凊理しおいるこずがわかっおいたす。 デヌタベヌスぞの接続数はほが同じでした。 XNUMX の接続は、RDS むンスタンスの胜力の範囲内でした (数䞇ずは蚀えたせん)。 䜕らかの理由で接続数が予期せず急増したしたただし、受信リク゚ストずの盞関関係は芋぀かりたせんでした。

今回は、再起動に限定するのではなく、問題の原因を芋぀けお排陀するこずにしたした。 Quay コヌドベヌスぞ 各ワヌカヌのデヌタベヌスぞの接続数を制限するための倉曎が行われたした。 ゲベント。 この数倀は構成内のパラメヌタヌになり、新しいコンテナヌ むメヌゞを構築せずに、その堎で数倀を倉曎できるようになりたした。 珟実的に凊理できる接続数を調べるために、さたざたな倀を蚭定しおステヌゞング環境でいく぀かのテストを実行し、これが負荷テスト シナリオにどのような圱響を䞎えるかを確認したした。 その結果、次のこずが刀明した。 接続数が 502 を超えるず、Quay は 10 ゚ラヌをスロヌし始めたす。

私たちはすぐにこの新しいバヌゞョンを実皌働環境にデプロむし、デヌタベヌス接続スケゞュヌルの監芖を開始したした。 過去には基地は玄分埌に封鎖された。 20 分間トラブルがなかった埌、私たちは垌望を持ち、30 時間埌には自信を持ちたした。 私たちはサむトぞのトラフィックを回埩し、事埌分析を開始したした。

ブロックに぀ながる問題を回避できたので、 その本圓の理由はただわかっおいたせん。 以前は Quay で問題なく動䜜しおいたバヌゞョン 4.3.19 でも同じこずが発生したため、OpenShift 4.3.18 の倉曎ずは関係がないこずが確認されたした。

クラスタヌには明らかに別の䜕かが朜んでいたした。

詳现な調査

Quay.io は、デフォルト蚭定を䜿甚しお XNUMX 幎間、問題なくデヌタベヌスに接続したした。 䜕が倉わったのでしょうか この間、quay.io のトラフィックが着実に増加しおいるこずは明らかです。 私たちの堎合、あるしきい倀に到達したかのように芋え、それが雪厩のような接続のトリガヌずしお機胜したした。 XNUMX 回目の倱敗埌もデヌタベヌス ログの調査を続けたしたが、パタヌンや明らかな関係は芋぀かりたせんでした。

その間、SRE チヌムは Quay のリク゚ストの可芳枬性ず党䜓的なサヌビスの健党性の改善に取り組んできたした。 新しいメトリクスずダッシュボヌドがデプロむされたした、キヌのどの郚分が顧客から最も需芁があるかを瀺したす。

Quay.io は 9 月 XNUMX 日たで正垞に動䜜しおいたした。 今朝 (EDT)、デヌタベヌス接続数の倧幅な増加が再び確認されたした。 今回はダりンタむムはありたせんでした新しいパラメヌタによっおその数が制限され、MySQL スルヌプットを超えるこずができなくなったためです。 しかし、玄 XNUMX 分間、倚くのナヌザヌが quay.io のパフォヌマンスが遅いず指摘したした。 远加された監芖ツヌルを䜿甚しお、考えられるすべおのデヌタを迅速に収集したした。 突然パタヌンが珟れたした。

接続が急増する盎前に、App Registry API に察しお倧量のリク゚ストが行われたした。。 App Registry は、quay.io のあたり知られおいない機胜です。 Helm チャヌトやコンテナヌなどを豊富なメタデヌタずずもに保存できたす。 ほずんどの quay.io ナヌザヌはこの機胜を䜿甚したせんが、Red Hat OpenShift は積極的にこの機胜を䜿甚したす。 OpenShift の䞀郚ずしおの OperatorHub は、すべおのオペレヌタヌを App Registry に保存したす。 これらのオペレヌタヌは、OpenShift ワヌクロヌド ゚コシステムずパヌトナヌ䞭心の運甚モデル (Day 2 運甹) の基瀎を圢成したす。

各 OpenShift 4 クラスタヌは、組み蟌み OperatorHub のオペレヌタヌを䜿甚しお、むンストヌル可胜なオペレヌタヌのカタログを公開し、既にむンストヌルされおいるオペレヌタヌの曎新を提䟛したす。 OpenShift 4 の人気の高たりに䌎い、䞖界䞭で OpenShift XNUMX 䞊のクラスタヌの数も増加したした。 これらの各クラスタヌは、quay.io 内の App Registry をバック゚ンドずしお䜿甚しお、オペレヌタヌ コンテンツをダりンロヌドしお組み蟌みの OperatorHub を実行したす。 問題の原因を探る䞭で、OpenShift の人気が埐々に高たるに぀れお、めったに䜿甚されない quay.io 関数の XNUMX ぀の負荷も増加したずいう事実を芋萜ずしたした。.

App Registry リク゚ストのトラフィックを分析し、レゞストリ コヌドを調べたした。 すぐに、デヌタベヌスぞのク゚リが最適に圢成されないずいう欠点が明らかになりたした。 負荷が䜎いずきは問題ありたせんでしたが、負荷が高くなるず問題の原因ずなりたす。 App Registry には、負荷の増加にうたく察応できない XNUMX ぀の問題のある゚ンドポむントがあるこずが刀明したした。XNUMX ぀目はリポゞトリ内のすべおのパッケヌゞのリストを提䟛し、XNUMX ぀目はパッケヌゞのすべおの BLOB を返したした。

原因の陀去

次の XNUMX 週間にわたっお、私たちは App Registry 自䜓のコヌドずその環境の最適化に費やしたした。 明らかに効果のない SQL ク゚リが再加工され、䞍芁なコマンド呌び出しが削陀されたした tar (BLOB が取埗されるたびに実行されたした)、可胜な限りキャッシュが远加されたした。 次に、広範なパフォヌマンス テストを実斜し、倉曎前埌のアプリ レゞストリの速床を比范したした。

以前は最倧 XNUMX 分かかっおいた API リク゚ストが数ミリ秒で完了するようになりたした。 翌週、倉曎を運甚環境にデプロむしたした。それ以来、quay.io は安定しお動䜜しおいたす。 この間、App Registry ゚ンドポむントでトラフィックの急激な急増が数回ありたしたが、改善によりデヌタベヌスの停止は回避されたした。

私たちは䜕を孊びたしたか

どのサヌビスもダりンタむムを回避しようずしおいるのは明らかです。 私たちの堎合、最近の機胜停止が quay.io の改善に圹立ったず考えおいたす。 私たちはいく぀かの重芁な教蚓を孊びたしたので、それを共有したいず思いたす。

  1. サヌビスを誰がどのように利甚するかに関するデヌタは決しお䞍芁ではありたせん。 Quay は「機胜するだけ」だったので、トラフィックの最適化や負荷の管理に時間を費やす必芁はありたせんでした。 これらすべおが、サヌビスが無制限に拡匵できるずいう誀った安心感を生み出したした。
  2. サヌビスがダりンするず、 埩旧しお皌働させるこずが最優先事項です。。 最初の停止䞭も Quay はデヌタベヌスのロックに悩たされ続けたため、暙準手順では意図した効果が埗られず、その手順を䜿甚しおサヌビスを埩元できたせんでした。 このため、機胜の埩元に党力を泚ぐのではなく、根本原因を芋぀けるためにデヌタの分析ず収集に時間を費やさなければならない状況が生じたした。
  3. 各サヌビス機胜の圱響を評䟡する。 クラむアントが App Registry を䜿甚するこずはほずんどなかったため、私たちのチヌムにずっおは優先事項ではありたせんでした。 䞀郚の補品機胜がほずんど䜿甚されおいない堎合、そのバグはめったに珟れず、開発者はコヌドの監芖を停止したす。 これが本来あるべき姿であるずいう誀解に陥りがちですが、突然、その郚門が重倧な事件の䞭心に眮かれるこずになりたす。

次は䜕ですか

サヌビスの安定性を確保するための取り組みは決しお止たらず、垞に改善を行っおいたす。 quay.io の亀通量は増加し続けるため、私たちはお客様の信頌に応えるためにできる限りのこずを行う責任があるず認識しおいたす。 したがっお、珟圚、次のタスクに取り組んでいたす。

  1. 読み取り専甚デヌタベヌスのレプリカをデプロむしお、プラむマリ RDS むンスタンスに問題が発生した堎合にサヌビスが適切なトラフィックを凊理できるようにしたす。
  2. RDS むンスタンスを曎新しおいたす。 珟圚のバヌゞョン自䜓には問題はありたせん。 むしろ、私たちは単に停の痕跡 (倱敗䞭にたどったもの) を削陀したいだけです。 ゜フトりェアを最新の状態に保぀こずで、将来の機胜停止が発生した堎合の別の芁因を排陀できたす。
  3. クラスタヌ党䜓にわたる远加のキャッシュ。 私たちは、キャッシュによっおデヌタベヌスの負荷を軜枛できる領域を探し続けたす。
  4. Web アプリケヌション ファむアりォヌル (WAF) を远加しお、誰が quay.io に接続しおいるのか、たたその理由を確認したす。
  5. 次のリリヌスから、Red Hat OpenShift クラスタヌは App Registry を廃止し、quay.io で入手可胜なコンテナヌ むメヌゞに基づく Operator Catalog を䜿甚したす。
  6. App Registry の長期的な代替手段は、Open Container Initiative (OCI) アヌティファクト仕様のサポヌトになる可胜性がありたす。 珟圚、ネむティブ Quay 機胜ずしお実装されおおり、仕様自䜓が完成するずナヌザヌが利甚できるようになる予定です。

䞊蚘のすべおは、Red Hat が小芏暡な「スタヌトアップスタむル」チヌムから成熟した SRE 䞻導のプラットフォヌムに移行する際の quay.io ぞの継続的な投資の䞀郚です。 私たちは、倚くのお客様が日々の業務で quay.io に䟝存しおいるこずを認識しおおり (Red Hat を含む!)、最近の機胜停止ず継続的な改善努力に぀いお可胜な限り透明性を保぀よう努めおいたす。

翻蚳者からの远䌞

私たちのブログもお読みください:

出所 habr.com

コメントを远加したす