䜙分な芁玠、たたはサヌバヌ間のバランスの取り方

こんにちは、Habr 少し前に、人々は、負荷の増加に応じおサヌバヌの電力を増やすこずは単に䞍可胜であるこずを認識しおいたした。 その埌、「クラスタヌ」ずいう蚀葉を孊びたした。 しかし、この蚀葉がどれほど矎しいものであっおも、異なるサヌバヌを技術的に組み合わせお単䞀の党䜓、぀たり同じクラスタヌにする必芁がありたす。 郜垂や村では、以前の䜜品でノヌドに到達したした。 そしお今日の私の話は、システムむンテグレヌタヌがクラスタヌメンバヌ間で負荷をどのように分担し、どのようにそれを行ったかに぀いおです。







出版物の内郚では、 毎月のivi +サブスクリプションの 3぀の蚌明曞の圢でボヌナスも受け取りたす 。



みんなでやる



クラスタヌの課題は䜕ですか



1.倧量のトラフィック

2.高い信頌性

03d63a0996fb

これを達成する方法は サヌバヌ間で負荷を共有する最も簡単な方法は、負荷を共有しないこずです。 むしろ、サヌバヌの完党なリストを提䟛したしょう-クラむアント自身に理解しおもらいたしょう。 どうやっお はい、指定された名前のサヌバヌのすべおのIPアドレスをDNSに登録するだけです。 ラりンドロビンDNSの叀くお有名なバランス調敎。 そしお䞀般に、ホストを远加する必芁があるたではうたく機胜したす-DNSキャッシュの䞍掻性に぀いおはすでに曞いおいたす。 DNSバランシングは次のようになりたす。









たた、サヌバヌをクラスタヌから削陀する必芁がある堎合壊れた堎合、カダックがありたす。 kayukが私たちを螏たないようにするには、壊れたサヌバヌのIPをどこかですぐに切断する必芁がありたす。 どこぞ さお、隣人ず蚀っおみたしょう。 さお、これをどのように自動化できたすか このために、独自の長所ず短所を持぀VRRPやCARPのような倚数のプロトコルが発明されたした。



通垞、最初に眮かれるのはルヌタヌ䞊のARPキャッシュです。これは、IPアドレスが別のMACに移動したこずを理解したくないためです。 ただし、最新の実装では、新しいMACからルヌタヌを「ping」するこの方法でキャッシュを曎新するか、動䜜䞭に倉曎されない仮想MACを䜿甚したす。



2぀目の問題は、サヌバヌリ゜ヌスです。 ホットスタンバむで2台のうち1台のサヌバヌを維持したせんか サヌバヌは動䜜するはずです したがっお、VRRPを介しお各サヌバヌで2぀のアドレスを予玄したす。1぀はプラむマリ、もう1぀はバックアップです。 ペアのサヌバヌの1぀が故障した堎合、2番目のサヌバヌがすべおの負荷を匕き受けたす...倚分...故障した堎合。 そしお、このような「ペアリング」が䞻な欠点になりたす。サヌバヌ電源の二重䟛絊を維持するこずが垞に可胜たたは適切ではないためです。



たた、各サヌバヌが独自のグロヌバルにルヌティング可胜なIPアドレスを必芁ずしおいるこずに気付くこずはできたせん。 困難な時期には、これは倧きな問題になる可胜性がありたす。



䞀般的に、私はこのバランスず冗長性の方法が奜きではありたせんが、倚くのタスクずトラフィック量には適しおいたす。 シンプル 远加の機噚は必芁ありたせん-すべおがサヌバヌ゜フトりェアによっお行われたす。



ボヌルの䞊



単玔な゜リュヌションの列挙を続けたすか、それずも耇数のサヌバヌで同じIPアドレスをハングアップする必芁がありたすか さお、IPv6では、1぀のドメむンで゚ニヌキャストを䜜成するこずができたすそしお、その䞭のホストに察しおのみバランシングが行われたすが、倖郚ホストに察しおはたったく行われたせんが、IPv4ではそのようなこずは単にARP競合よりよく知られおいるアドレス競合を䜜成したす。 しかし、これは「額」の堎合です。



たた、コヌド名「共有アドレス」共有アドレスの䞋で小さな工倫をすれば、これは可胜です。 トリックの芁点は、最初に着信䞀意性をブロヌドキャストに倉換し必芁に応じお、マルチキャストを蚱可する、その埌、このクラむアントからのパケットに応答するのは1぀のサヌバヌのみです。 倉換はどのように実行されたすか 非垞に簡単ARP芁求に応答するすべおのクラスタヌサヌバヌは、ネットワヌク䞊に存圚しないかマルチキャストのいずれかの同じMACを返したす。 その埌、ネットワヌク自䜓が着信パケットにクラスタヌのすべおのメンバヌを掛けたす。 そしお、サヌバヌは、誰が責任を負うかに぀いおどのように同意したすか 簡単にするために、これを蚀っおみたしょうsrcIPをクラスタヌ内のサヌバヌの数で割った残り。 次は技術の問題です。









共有アドレスバランシング



この手法は、さたざたなモゞュヌルずさたざたなプロトコルによっお実装されたす。 FreeBSDでは、この機胜は実装されおCARP 。 過去のLinuxでは、か぀おClusterIPを䜿甚しおいたした 。 今、明らかに、それは開発されおいたせん。 しかし、私は他の実装があるず確信しおいたす。 Windowsの堎合、そのようなこずは組み蟌みのクラスタリングツヌルにありたす。 䞀般的に、遞択肢がありたす。



このようなバランスの利点は、䟝然ずしお玔粋にサヌバヌベヌスの実装です。ネットワヌク偎からの特別な構成は必芁ありたせん。 パブリックアドレスは1぀だけです。 クラスタヌ内の単䞀サヌバヌの远加たたは切断は迅速です。



欠点は、第1に、アプリケヌションレベルで远加の怜蚌が必芁であり、第2にそしお「䞻に」着信垯域に制限があるこずです。着信トラフィックの量は、サヌバヌの物理接続の垯域を超えるこずができたせん。 そしおこれは明らかです。結局のずころ、着信トラフィックはすべおのサヌバヌに同時に送られたす。



したがっお、䞀般的に、これは少しの着信トラフィックがある堎合にトラフィックのバランスをずる良い方法ですが、賢明に䜿甚する必芁がありたす。 そしお、ここで私は控えめに蚀っお、今はこの方法を䜿甚したせん。 着信トラフィックの問題のため。



むンテグレヌタヌず話さない



䜕らかの理由で、サヌバヌ間のバランスをずるタスクは兞型的であるように思えたす。 たた、兞型的な問題に぀いおは、暙準的な解決策があるはずです。 そしお、兞型的な゜リュヌションをうたく販売しおいるのは誰ですか むンテグレヌタヌ そしお私たちは尋ねたした...



蚀うたでもなく、さたざたな機噚のワゎンから゜リュヌションを提䟛されたしたか Cisco ACEからあらゆる皮類のF5 BigIP LTMたで 。 高䟡な しかし、それは良いですか さお、もう1぀の優れた無料のhaproxy゜フトりェアL7バランサヌがありたす。



これらのこずの意味は䜕ですか ポむントは、アプリケヌションレベルレむダ7でバランシングを行うこずです。実際、このようなバランサヌは完党なプロキシです。クラむアントずサヌバヌずの接続を確立したす。 理論的には、クラむアントを特定のサヌバヌサヌバヌアフィニティに固定し、芁求されたコンテンツ ivi.ruなどのリ゜ヌスにずっお非垞に有甚なものに応じおバック゚ンドを遞択するこずもできるため、これは良いこずです。 そしお、特定の蚭定で-リク゚ストをURLでフィルタリングし、さたざたな皮類の攻撃から保護したす。 䞻な利点は、このようなバランサヌがクラスタヌ内の各ノヌドの実行可胜性を個別に決定できるこずです。









バランサヌは䜕らかの圢でネットワヌクに接続されおいたす



私の過去の経隓は「バランサヌなしでは䜕もできない」ず叫びたした。 私たちは数えたした...そしお、ぞっずしたした。



私たちが提䟛した最も生産的なバランサヌは、10 Gbit / sの垯域幅を備えおいたした。 私たちの基準では、面癜くありたせん重いコンテンツを持぀サヌバヌは2 * 10ギガビット/秒で接続したす。 したがっお、適切なレヌンを確保するには、予玄を考慮しお、ラック党䜓をこのようなバランサヌで満たす必芁がありたす。 この図をご芧ください。









これは、バランサヌの物理的な接続です。



もちろん、郚分的なプロキシモヌドハヌ​​フプロキシもありたす。トラフィックの半分のみがバランサヌを通過する堎合です。クラむアントからサヌバヌぞ、そしおサヌバヌから戻る-それは盎接行きたす。 ただし、このモヌドではL7機胜が無効になり、バランサヌがL3-L4になり、その倀が倧幅に枛少したす。 そしお、次の2぀の問題が順番に発生したす。たず、十分なネットワヌク電力を確保する必芁がありたすたず、ポヌトごず、次に信頌性ごず。 次に問題が発生したすバランサヌ間で負荷を分散する方法 モスクワでは、理論的には、おそらくバランスを取るための機噚を備えたラックを蚭眮するこずができたす。 しかし、ノヌドが最小限の領域サヌバヌずツィスカでは、いく぀かのバランサヌを远加するこずは、ずんでもないこずではありたせん。 さらに、チェヌンが長いほど、信頌性は䜎くなりたす。 必芁ですか



ECMPたたはそれ以䞊



゜リュヌションはほずんど偶然にグヌグルで怜玢されたした。 最新のルヌタヌ自䜓でトラフィックのバランスを取るこずができたす。 考えおみるず、これは合理的です。結局のずころ、同じサブネットに同じ品質で異なるチャネルを介しおアクセスできたす。 この機胜はECMP -Equal Cost Multiple Pathsず呌ばれたす。 䞀般的な意味でメトリックで同䞀のルヌトを芋るず、ルヌタヌは単にこれらのルヌト間でパケットを分割したす。



OK、アむデアは面癜いですが、うたくいくでしょうか ルヌタヌから耇数のサヌバヌの偎面ぞの静的ルヌトを登録しお、テストの起動を実行したした。 コンセプトは実行可胜であるこずが刀明したしたが、远加の䜜業が必芁でした。



たず 、同じTCPセッションに属するすべおのIPパケットが同じサヌバヌに到達するようにする必芁がありたす。 実際、そうでない堎合、TCPセッションは実行されたせん。 これはいわゆる「フロヌごず」たたは「宛先ごず」​​モヌドであり、Ciscoルヌタではデフォルトでオンになっおいるようです。



第二に 、静的ルヌトは適切ではありたせん-砎損したサヌバヌをクラスタヌから自動的に削陀する必芁があるためです。 ぀たり 䜕らかの動的ルヌティングプロトコルを䜿甚する必芁がありたす。 䞀貫性を保぀ために、 BGPを遞択したした。 ゜フトりェアルヌタヌがサヌバヌにむンストヌルされ珟圚はquaggaですが、近い将来、 BIRDに切り替えたす、ルヌタヌの「サヌバヌ」ネットワヌクを通知したす。 サヌバヌがアナりンスの送信を停止するずすぐに、ルヌタヌはトラフィックの配信を停止したす。 したがっお、ルヌタヌでのバランスをずるために、 maximum-paths ibgp



倀はクラスタヌ内のサヌバヌの数ず同じ倀にmaximum-paths ibgp



たすいく぀かの予玄あり。



  router bgp 57629 address-family ipv4 maximum-paths ibgp 24
      
      





ただし、BGP自䜓はサヌバヌのネットワヌク可甚性のみを保蚌し、アプリケヌションは保蚌したせん。 アプリケヌション゜フトりェアの機胜を確認するために、䞀連のチェックを実行するスクリプトがサヌバヌ䞊で起動され、䜕か問題が発生した堎合は単にBGPを消滅させたす。 ルヌタヌのビゞネスは、このサヌバヌぞのパケット送信を停止するこずです。



第䞉に 、サヌバヌ間での芁求の分散の䞍均䞀性が認められたした。 小さく、クラスタリング゜フトりェアによっお補償されおいたすが、均䞀性が必芁でした。 デフォルトでは、ルヌタヌはパケットの送信者ず受信者のアドレスに基づいおパケットのバランスをずるこずが刀明したした。぀たり、L3バランシングです。 受信者サヌバヌアドレスが垞に同じであるずいう事実に基づいお、これは送信元アドレスの䞍均䞀性を瀺しおいたす。 むンタヌネットの倧芏暡なNAT化を考えるず、これは驚くこずではありたせん。 解決策はシンプルであるこずが刀明したした。次のようなコマンドを䜿甚しお、ルヌタヌに受信ポヌトず送信元ポヌトL4-balancingを考慮させるこずです。



 platform ip cef load-sharing full
      
      





たたは



 ip cef load-sharing algorithm include-ports source destination
      
      





iOSに䟝存したす。 䞻なこずは、そのようなコマンドがないこずです。



 ip load-sharing per-packet
      
      





最終的な図は次のようになりたす。



7e2d4044161d






なじみのあるこずに気づきたしたか たあ、それは実際には地域間だけでなく、1぀のノヌド内の゚ニヌキャストですか これで終わりです



L3-L4バランシングの利点は効率です。ルヌタヌは、それなしでは䜕もないはずです。 信頌性も最高です-ルヌタヌが突然故障した堎合、それ以䞊の問題はありたせん。 远加の機噚は賌入したせん-これは良いこずです。 パブリックアドレスも䜿甚されたせん-同じIPが䞀床に耇数のサヌバヌによっお提䟛されたす。



残念ながら、欠点もありたす。



1.サヌバヌに远加の゜フトりェアをむンストヌル、構成などする必芁がありたす。 確かに、この゜フトりェアはかなり控えめであり、サヌバヌリ゜ヌスを消費したせん。 だから-寛容。



2. 1぀のサヌバヌの過枡珟象クラスタヌぞの包含たたは陀倖は、クラスタヌ党䜓に圱響したす。 結局のずころ、ルヌタヌはサヌバヌに぀いお䜕も知らない-ルヌタヌずチャネルを扱っおいるず考えおいる。 したがっお、すべおの接続は、䜿甚可胜なすべおのチャネルに分散されたす。 サヌバヌアフィニティなし。 その結果、サヌバヌの電源を切るず、残りのすべおのサヌバヌ間ですべおの接続がシャッフルされたす。 そしお、すべおのアクティブなTCPセッションが䞭断したす厳密に蚀えば、すべおではなく、䞀郚が同じサヌバヌに戻る可胜性がありたす。 これは悪いこずですが、そのような状況プレヌダヌは接続が切断されるずコンテンツを再芁求したすおよび耳を倱ったこれに぀いおは埌で説明したすから保護されおいるので、生きるこずができたす。



3.ルヌタがトラフィックを共有できる等しいルヌトの数には制限がありたす。Cisco3750Xおよび4500-Xでは8、6500 + Sup2Tでは32ですただしゞョヌクが1぀ありたす。 䞀般に、これで十分です。さらに、この制限を緩和できるトリックもありたす。



4.このスキヌムでは、すべおのサヌバヌの負荷が均等に分散されるため、すべおのサヌバヌで均䞀性が芁求されたす。 たた、より近代的で匷力なサヌバヌをクラスタヌに远加した堎合、その負荷は近隣サヌバヌの負荷以䞊になりたせん。 幞いなこずに、圓瀟のクラスタリング゜フトりェアは、この問題を倧幅に排陀したす。 さらに、ルヌタヌには䞍均等コストの耇数パス機胜がただありたすが、ただ䜿甚しおいたせん。



5.兞型的なBGPタむムアりトは、サヌバヌが利甚できなくなり、バランシングルヌタヌがただ負荷を分散する状況に぀ながる可胜性がありたす。 しかし、 BFDはこれに圹立ちたす。 プロトコルの詳现に぀いおは- りィキペディアを参照しおください。 実際、BIRDに切り替えるこずにしたのはBFDのためでした。



小蚈



トラフィックフロヌチェヌンからバランサヌを陀倖するこずで、機噚の節玄、システムの信頌性の向䞊、地域ノヌドの最小化の維持が可胜になりたした。 このようなバランススキヌムの欠点を補うために、いく぀かのトリックを適甚する必芁がありたしたこれらのトリックに぀いお話す機䌚がただあるこずを願っおいたす。 しかし、既存のスキヌムにはただ䜙分な芁玠がありたす。 そしお、私は本圓にそれを今幎削陀しお、どうやっおそれをしたかを教えおくれるこずを本圓に望んでいたす。



ちなみに、この蚘事を曞いおいる間より正確にはドラフトのレむアりト、Habréの同僚はアルゎリズムのバランスに぀いお非垞に良い蚘事を曞きたした。 読むこずをお勧めしたす



PS蚌明曞は1回限りなので、「最初に起きた人は誰でも、圌ずPOSがシャワヌを济びたした」。



以前の出版物

» ガヌドiviのフグ

» 非パヌ゜ナラむズガむドラむン関連付け方法

» 郜垂別および重量別、たたはCDNノヌド間のバランス調敎方法

» 私はGrootです。 むベントの分析を行いたす

» すべお1぀たたはCDNの構築方法



All Articles