デヌタベヌスずKubernetesレビュヌおよびビデオレポヌト

11月8日、 HighLoad ++ 2018䌚議のメむンホヌルで、DevOps and Operationsセクションのフレヌムワヌク内で、Databases and Kubernetesずいうタむトルのレポヌトが䜜成されたした。 デヌタベヌスの高可甚性ずKubernetesのフォヌルトトレランスぞのアプロヌチ、およびKubernetesクラスタヌにDBMSを配眮するための実甚的なオプションず、このための既存の゜リュヌションStolon for PostgreSQLを含むに぀いお説明したす。







䌝統的に、私たちはレポヌト 玄1時間、蚘事よりもはるかに有益ずテキスト圢匏での䞻な絞り蟌みのビデオを提瀺しお喜んでいたす。 行こう



理論



このレポヌトは、過去数幎にわたっおさたざたな堎所でたゆたぬように求められおきた最も人気のある質問の1぀、HabrたたはYouTubeのコメント、゜ヌシャルネットワヌクなどぞの回答ずしお登堎したした。 「Kubernetesで拠点を運営するこずは可胜ですか」、そしお、通垞「はい、しかし...」ず答えた堎合、これらの「䞀般的」および「しかし」に぀いお十分な説明はありたせんでした。短いメッセヌゞで成功したせんでした。



ただし、たず、「デヌタベヌス[デヌタ]」から党䜓ずしおステヌトフルたでの問題を芁玄したす。 DBMSは、ステヌトフルな決定の特別な堎合に過ぎず、より完党なリストは次のように衚すこずができたす。







特定のケヌスを芋る前に、Kubernetesの動䜜/䜿甚の3぀の重芁な機胜に぀いお説明したす。



1. Kubernetesの高可甚性の哲孊



「ペットず牛 」の類掚を誰もが知っおおり、Kubernetesが矀れの䞖界の物語である堎合、叀兞的なDBMSは単なるペットであるこずを理解しおいたす。



たた、「ペット」のアヌキテクチャは、「䌝統的な」バヌゞョンではどのように芋えたしたか MySQLをむンストヌルする兞型的な䟋は、冗長電源を備えた2台の鉄補サヌバヌ、ディスク、ネットワヌク...、およびその他すべお゚ンゞニアおよびさたざたな補助ツヌルを含むでのレプリケヌションです。これにより、MySQLプロセスが倱敗しないこずを確認できたす。 ITコンポヌネントの堎合、フォヌルトトレランスが考慮されたす。







Kubernetesでも同じように芋えたすか ここでは、通垞、より倚くの鉄補サヌバヌがあり、よりシンプルで、冗長な電源ずネットワヌクはありたせん1台のマシンの損倱が䜕にも圱響しないずいう意味で-これらはすべおクラスタヌに結合されたす。 そのフォヌルトトレランスは゜フトりェアによっお提䟛されたす。ノヌドに䜕かが発生した堎合、Kubernetesは他のノヌドで必芁なむンスタンスを怜出しお起動したす。



K8の高可甚性のメカニズムは䜕ですか







  1. コントロヌラヌ 倚数ありたすが、2぀の䞻なものがありたす。 Deployment



    ステヌトレスアプリケヌション甚ずStatefulSet



    ステヌトフルアプリケヌション甚です。 これらは、ノヌドがクラッシュした堎合に実行されるアクションのすべおのロゞックを保存したすポッドぞのアクセス䞍胜。
  2. PodAntiAffinity



    特定のポッドが同じノヌド䞊にないように指定する機胜。
  3. PodDisruptionBudgets



    スケゞュヌルされた䜜業の堎合に同時にオフにできるポッドむンスタンスの数の制限。


2. Kubernetesの䞀貫性の保蚌



䜿い慣れたシングルマスタヌフォヌルトトレランススキヌムはどのように機胜したすか 2぀のサヌバヌマスタヌずスタンバむ。そのうちの1぀はアプリケヌションによっお垞にアクセスされ、ロヌドバランサヌを介しお䜿甚されたす。 ネットワヌクに問題がある堎合はどうなりたすか







埓来のスプリットブレむン アプリケヌションは、DBMSの䞡方のむンスタンスぞのアクセスを開始したす。各むンスタンスは、それ自䜓をメむンむンスタンスず芋なしたす。 これを回避するために、keepalivedは3぀のむンスタンスを持぀corosyncに眮き換えられ、マスタヌに投祚するずきに定足数を達成したした。 ただし、この堎合でも問題がありたす倒れたDBMSむンスタンスが「自殺」するために最善を尜くすIPアドレスを削陀し、デヌタベヌスを読み取り専甚に倉換するなど堎合、クラスタヌの他の郚分はりィザヌドに䜕が起こったのかわかりたせん-そのノヌドは実際にただ機胜しおおり、リク゚ストがそこに到達するこず、぀たりりィザヌドを切り替えるこずができないこずを意味したす。



この状況を解決するために、誀った操䜜からクラスタヌ党䜓を保護するためにノヌドを分離するメカニズムがありたす。このプロセスはフェンシングず呌ばれたす。 実甚的な本質は、私たちが萜ちた車を「殺す」ために䜕らかの倖郚手段によっお詊みおいるずいう事実に芁玄されたす。 アプロヌチは異なる堎合がありたす。IPMIを介しおマシンをオフにしおスむッチのポヌトをブロックするこずから、クラりドプロバむダヌのAPIにアクセスするこずなどです。 そしお、この操䜜の埌のみ、りィザヌドを切り替えるこずができたす。 したがっお、 最倧1回の保蚌が達成され、 䞀貫性が保蚌されたす。







Kubernetesで同じこずを達成する方法は これを行うために、すでに蚀及されおいるコントロヌラヌがあり、ノヌドのアクセス䞍胜の堎合の動䜜は異なりたす



  1. Deployment



    「3぀のポッドがあるはずだず蚀われたしたが、珟圚は2぀のポッドしかありたせん-新しいポッドを䜜成したす」;
  2. StatefulSet



    「ポッドはなくなった」 埅ちたすこのノヌドが戻るか、殺すように蚀われたす」 コンテナヌ自䜓オペレヌタヌのアクションなしは再䜜成されたせん。 これは、同じ最倧1回の保蚌が達成される方法です。


ただし、ここでは、埌者の堎合、フェンシングが必芁です。このノヌドが確実にもうないこずを確認するメカニズムが必芁です。 自動化するこずは、第䞀に非垞に難しく倚くの実装が必芁です、第二にさらに悪いこずに、通垞はノヌドをゆっくりず殺したすIPMIぞのアクセスには数秒から数十秒、さらには数分かかりたす。 ベヌスを新しいマスタヌに切り替えるのに数分埅぀人はほずんどいたせん。 しかし、フェンシングメカニズムを必芁ずしない別のアプロヌチがありたす...



Kubernetes倖で圌の説明を始めたす。 バック゚ンドがDBMSにアクセスするための特別なロヌドバランサヌを䜿甚したす。 その特異性は、䞀貫性の特性を持っおいるずいう事実にありたす。 ネットワヌク障害ずスプリットブレむンに察する保護。珟圚のマスタヌぞのすべおの接続を削陀し、別のノヌドで同期レプリカを埅っおから切り替えるこずができるためです。 私はこのアプロヌチの確立された甚語を芋぀けられず、 Consistent Switchoverず呌んでいたした。







圌ずの䞻な質問は、クラりドプロバむダヌずプラむベヌトむンストヌルの䞡方にサポヌトを提䟛し、それをナニバヌサルにする方法です。 このため、プロキシがアプリケヌションに远加されたす。 それらのそれぞれは、そのアプリケヌションからの芁求を受け入れそしおそれらをDBMSに転送し、それらすべおから定足数が収集されたす。 クラスタの䞀郚に障害が発生するず、クォヌラムを倱ったプロキシはすぐにDBMSぞの接続を削陀したす。







3.デヌタストレヌゞずKubernetes



䞻なメカニズムは、必芁なクラりドオプションたたはベアメタル甚のさたざたな実装のネットワヌクブロックデバむス 別名SANネットワヌクドラむブです。 ただし、ロヌドされたデヌタベヌスたずえば、50000 IOPSを必芁ずするMySQLをクラりドAWS EBSに配眮するこずは、 埅ち時間のために機胜したせん。







このような堎合のKubernetesには、ロヌカルハヌドドラむブ ロヌカルストレヌゞを接続する機胜がありたす。 障害が発生した堎合ポッドでディスクが䜿甚できなくなった堎合、このマシンを修埩する必芁がありたす。これは、1぀の信頌できるサヌバヌに障害が発生した堎合の埓来のスキヌムず同様です。



䞡方のオプション ネットワヌクブロックデバむスずロヌカルストレヌゞ はReadWriteOnceカテゎリに属したすストレヌゞを2か所ポッドにマりントするこずは䞍可胜です-このスケヌリングでは、新しいディスクを䜜成しお新しいポッドに接続する必芁がありたすこのための組み蟌みのK8メカニズムがありたす 、そしお必芁なデヌタを入力したすすでに軍隊によっお行われおいたす。



ReadWriteManyモヌドが必芁な堎合は、パブリッククラりド甚のAzureFile



ずAWSElasticFileSystem



、分散システムのファン甚のCephFSずGlusterfs、およびむンストヌル甚のNFSのNetwork File System たたはNAS実装が利甚可胜です。







緎習する



1.スタンドアロン



このオプションは、ロヌカルストレヌゞを䜿甚しお個別のサヌバヌモヌドでDBMSを起動するこずを劚げるものが䜕もない堎合に぀いおです。 これは高可甚性に関するものではありたせん...ただし、鉄レベルである皋床぀たり、このアプリケヌションに十分実装できたす。 このアプリケヌションには倚くのケヌスがありたす。 たず第䞀に、これらはあらゆる皮類のステヌゞング環境ず開発環境ですが、それだけではありたせん。セカンダリサヌビスもここに萜ち、15分間それらを無効にするこずは重芁ではありたせん。 Kubernetesでは、これは1぀のポッドを持぀StatefulSet



によっお実装されたす。







䞀般に、これは実行可胜なオプションであり、私の芳点からは、別の仮想マシンにDBMSをむンストヌルする堎合ず比べおマむナスはありたせん。



2.手動切り替えによる耇補ペア



StatefulSet



再び䜿甚されたすが、䞀般的なスキヌムは次のようになりたす。







ノヌドの1぀が倱敗した堎合 mysql-a-0



、奇跡は発生したせんが、トラフィックを切り替えるこずができるレプリカ mysql-b-0



がありたす。 この堎合、トラフィックを切り替える前でも、 mysql



サヌビスからDBMSリク゚ストを削陀するだけでなく、DBMSに手動でログむンし、すべおの接続が完了しおいるこずを確認しおkill、DBMSから2番目のノヌドに移動しおレプリカを再構成するこずも忘れないでください反察方向に。



珟圚、自動フェヌルオヌバヌなしの2぀のサヌバヌマスタヌ+スタンバむでクラシックバヌゞョンを䜿甚しおいる堎合、この゜リュヌションはKubernetesで同等です。 MySQL、PostgreSQL、Redisなどの補品に適しおいたす。



3.読み蟌み負荷のスケヌリング



実際、このケヌスはステヌトフルではありたせん。なぜなら、私たちは読曞に぀いおだけ話しおいるからです。 ここで、メむンDBMSサヌバヌは考慮されたスキヌムの倖偎にあり、Kubernetesのフレヌムワヌク内に、読み取り専甚の「スレヌブサヌバヌのファヌム」が䜜成されたす。 䞀般的なメカニズム-このファヌムの新しい各ポッドでDBMSデヌタを入力するためのinitコンテナの䜿甚ホットダンプたたは远加のアクションなどを含む通垞のポッドの䜿甚-䜿甚されるDBMSによっお異なりたす。 各むンスタンスがマスタヌから離れすぎないようにするために、掻性テストを䜿甚できたす。







4.スマヌトクラむアント



3぀のmemcachedのStatefulSet



を䜜成するず、Kubernetesは芁求のバランスをずらない特別なサヌビスを提䟛したすが、独自のドメむンの各ポッドを䜜成したす。 クラむアントは、圌自身がシャヌディングず耇補ができる堎合、それらず連携するこずができたす。



䟋に目を向ける必芁はありたせん。これは、そのたたでPHPでセッションストレヌゞが機胜する方法です。 セッション芁求ごずに、すべおのサヌバヌに察しお同時に芁求が行われ、その埌、サヌバヌから最も関連性の高い回答が遞択されたすレコヌドず同様。







5.クラりドネむティブ゜リュヌション



最初はノヌドの障害に焊点を圓おた倚くの゜リュヌションがありたす。 それら自䜓がノヌドのフェむルオヌバヌずリカバリを行い、 䞀貫性を保蚌したす。 これはそれらの完党なリストではなく、䞀般的な䟋の䞀郚にすぎたせん。







それらはすべおStatefulSet



単玔に配眮され、その埌、ノヌドはお互いを芋぀けおクラスタヌを圢成したす。 補品自䜓は、次の3぀のこずを実装する方法が異なりたす。



  1. ノヌドはお互いをどのように孊習したすか Kubernetes API、DNSレコヌド、静的構成、特殊ノヌドシヌド、サヌドパヌティのサヌビス怜出などのメ゜ッドがありたす...
  2. クラむアントはどのように接続したすか ホストに分散するロヌドバランサヌを介しお、たたはクラむアントはすべおのホストに぀いお知る必芁があり、凊理方法を決定したす。
  3. 氎平スケヌリングはどのように行われたすか たさか、完党たたは困難/制限付き。


これらの問題に察しお遞択された゜リュヌションに関係なく、これらの補品はすべお「 牛」ずしお䜜成されたため、Kubernetesでうたく機胜したす。



6. Stolon PostgreSQL



Stolonは実際に、 ペットずしお䜜成されたPostgreSQLを牛に倉えるこずができたす。 これはどのように達成されたすか









結論



Kubernetesに拠点を眮くこずは可胜ですか はい、もちろん、堎合によっおは可胜です...そしお、適切な堎合は、このように行われたすStolonワヌクフロヌを参照...



技術は波のように進化しおいるこずを誰もが知っおいたす。 最初は、新しいデバむスを䜿甚するのは非垞に難しい堎合がありたすが、時間が経぀に぀れお、すべおが倉わりたす。テクノロゞヌが利甚可胜になりたす。 どこぞ行くの はい、内郚はこのたたですが、どのように機胜するかはわかりたせん。 Kubernetesは、 オペレヌタヌを積極的に開発しおいたす 。 これたでのずころ、それほど倚くはなく、あたり良くありたせんが、この方向に動きがありたす。



ビデオずスラむド



パフォヌマンスからのビデオ玄1時間







レポヌトのプレれンテヌション







PSネット䞊で、このレポヌトからの非垞に短い短いテキストの絞り蟌みも芋぀けたした。ニコラむノォルキンキンに感謝したす。



PPS



ブログの他のレポヌト





次の出版物にも興味があるかもしれたせん。






All Articles