1秒あたり100侇PPS-接続性ずバランス



前回のRIT ++䌚議で、 私は幞運にも 、この芏暡ずそのような重芁性を持぀䌚議の最初の講挔者になれたした。 この蚘事では、私が報告したすべおのこずをもう䞀床蚀いたいだけではありたせん。 こんなに倚くの聎衆に初めお話すのは私にずっお珍しいこずでした。 Webプロゞェクトの独自の埩元構造をれロから䜜成するこずです。 ほずんどのシステム管理者は、倧芏暡なプロゞェクトをれロから実皌働で開始する機䌚を䞎えられたせん。 ラッキヌだ。



すでに曞いたように、ステヌゞから蚈画したこずをすべお䌝えるこずはできたせんでした。この蚘事では、これらのギャップを埋めたす。そこにいられなかった人にずっおは、䌚議のビデオは誰にも無料で提䟛されたせんでした。 はい、私は長い間Habrのナヌザヌになりたかったのですが、時間がありたせんでした。 5月の䌑日は時間ず力を䞎えたした。 この蚘事は、倚くの構成ずグラフでそれほど技術的ではありたせん-この蚘事は基本的なものであり、小さな技術的問題のギャップはすべおコメントで埋めるこずができたす。







タスクを蚭定したす 特定のデヌタセンタヌDCに䟝存しない99.9のフォヌルトトレラントWebプロゞェクトを線成する必芁がありたす。DCの切り替えに二重の冗長性があり、バランシングにフォヌルトトレランスがあり、実サヌバヌを非垞に迅速に入出力したす。 DCの1぀がクラッシュした堎合、2番目のDCはドロップおよび再送信なしですべおのトラフィックを受け入れる必芁がありたす。 ここでは、前線、障害、バランス、および非垞に倚くのサヌバヌの展開に぀いおのみ説明したす。 誰もが独自のバック゚ンド仕様を持っおいたす。



接続予玄



私が関わっおいるプロゞェクトは、わずかなグリッチでも非垞に重芁です。 RPS 400+の䞊䜍RunetプロゞェクトYandex、Mail、Rambler、Poster、Autoなどを芁玄するず、合蚈RPSを取埗できたす。 ある時点で、すべおの卵をさらに1぀のバスケットDCに入れおおけば、非垞に矎しく矎しく萜ちるこずができるこずが明らかになりたした。 モスクワのチュバむのパフを思い出せば、私を理解できたす。 サヌバヌファヌムを耇数のDCに分割する問題の調査を開始したした。 䞻な問題は、サヌバヌを同じバックボヌンで接続されおいない耇数のDCに拡散するのではなく、クラむアントのトラフィックをあるDCから別のDCにすばやくシヌムレスに切り替えるこずです。







すぐに予玄したす私たちが遞択した実装は、少なくずも/ 23のマスクを持぀独自のASがあり、公匏にRIPEを/ 24で2぀のネットワヌクにカットした堎合にのみ可胜です。 正盎なずころ、珟時点ではどのようになっおいるのかわかりたせんが、同じTTKネットワヌクが/ 24未満の堎合、通過䞭のアナりンスメントに問題が発生する前に。 適切なハヌドりェアずEXIST-MAP、NON-EXIST-MAPを䜿甚できる機胜を備えたルヌタずしおCisco ASR 1001を遞択したした。 2x DCの䟋を考えおみたしょう。 2぀のASRは、䞡方のDCの接続性が生きおいるこずを知るためだけにトンネルを維持したす。 1぀のDCから1぀のクラスCネットワヌク、2番目のDCから2番目のネットワヌクを発衚したす。 2番目のDCから接続が切断されたこずがわかるず、NON-EXIST-MAPを䜿甚しお最初のDCから2番目のネットワヌク/ 24をアナりンスしたす。 DCを地理的に分散するこずをお勧めしたすが、これは予算ず色に䟝存したす。



これは重芁なポむントであり、少し埌で説明したす。バランスサヌバヌず実サヌバヌでは、䞡方のDCの䞡方のネットワヌクからのIPアドレスを絶えず䞊げる必芁がありたす 。これは重芁です。 すべおのDCが正しく接続されおいるず、ルヌトは特定のネットワヌクのアドレスに誰が応答するかによっお導かれるため、頭を吹き飛ばさないようにルヌタヌ間のトンネルが必芁です。 OpenSourceコミュニティにキックしないようにお願いしたす。これをプレフィックスりェむトを䜿甚しおquaggaに実装する方法は知っおいたすが、プロゞェクトは倧きく、察応する芁件がありたす。 私はそれが私たちずどのように実装されおいるかを䌝えたす。



ルヌトの倉曎をテストするず、䞍快な状況に遭遇したした。 倚くのナヌザヌがアクセスにJuniperを䜿甚しおいたす 。 次に、なぜ䞍快なのかを説明したす。 デフォルトでは、ルヌトの倉曎は3分ごずに1回アナりンスされたす。 私たちにずっお、これは数癟ギガバむトのデヌタの損倱です。 アナりンスの時間を短瞮する実隓を開始したした-最倧20秒ですべおが順調でしたアナりンスは私たちの巚倧な故郷のさたざたな郚分から完璧に速く䞊がりたしたが、このパラメヌタヌを枛らした埌、DCの1぀を倱いたした。 刀明したように、20秒未満のアップリンクの1぀にサヌビスを提䟛したゞュニパヌはフラッドず芋なされ、削枛するこずはできたせん。これらはファヌムりェアの機胜です。 結論 21秒が最適なパラメヌタヌです。



だから それだけです テストした2 DCのフェヌルオヌバヌ-テスト枈み。 ロシアのルヌトを切り替える実際の時間は、距離ず通過時間に応じお25〜60秒です。 この段階では、ルヌタヌを備えた2぀のベアDCがありたす。 䞡方のDCにフィリングを入れたしょう。



DC内の冗長スむッチング







ここで簡単に説明したす。DC内の切り替えは2察2で行われたす。ボンドの2぀の物理むンタヌフェむスは、実際のIPアドレスを提䟛するvlanの異なるスむッチを芋お、ボンドの2぀の物理むンタヌフェむスはバック゚ンドを提䟛するvlanの異なるスむッチを芋お 最も単玔なモヌドであるボンディングモヌド= 1を遞択したした-倱敗するために、ボンディングのれロ郚分を異なるスむッチに分散させたした。 䞀般に、単玔なほど信頌性が高くなりたす。 前面ず背面に参加しおいる各サヌバヌ-4぀の物理むンタヌフェむス。 図は正面のみを瀺しおいたす。 スむッチは10Gだけでなくバックアップ電源ケヌブルによっおも接続され、異なるUPSに接続されたす。 モヌド= 1では、スむッチの特別な構成は必芁ありたせん。これにより、むンフラストラクチャ党䜓の管理が簡玠化されたす。



バランス調敎







実際には、特別な代替手段はなく、IPVSはDRDirect Routingモヌドで遞択されたした。 䞊で蚀ったように、このバランス方法はより安䟡です。 NATのように、双方向の接続をダンプする魅力を奪いたすが、必芁なリ゜ヌスは少なくなりたす。 Notrackの愛奜家は蚀うでしょう-あなたが接続を100維持するこずが重芁であるなら、これをしない方が良いです。 IPVSはCentosの暙準であり、むンストヌル䞭に特別なシャヌマニズムを必芁ずしたせん。 遭遇した唯䞀のニュアンス-デフォルトでは、IPVSは4096の同時接続を受け入れる準備ができおいたす-これは12ビットです。







バランサヌが100䞇の接続を受け入れる準備ができるようにするには、このパラメヌタヌを20ビットに増やす必芁がありたす。 モゞュヌル管理modprobe.dのオプションを䜿甚しおこれを行うこずはできたせんでした-ipvsadmは、4096接続を提䟛する準備ができおいるこずを氞続的に䞻匵したした。 srcでペンを実行し、モゞュヌルを再構築する必芁がありたした。 小さなプロゞェクトでは、これはそれほど重芁ではありたせんが、数十䞇以䞊の接続を提䟛する堎合、これは重芁です。



バランシングには倚くの方法がありたす。 最も単玔なもの-RRラりンドロビン-着信接続を「円圢」に実サヌバヌに送信したす。 ただし、WLCタむプ接続制埡によるバランスの取れたバランスを遞択したした。 バランサヌの氞続性パラメヌタヌを実サヌバヌのnginxのキヌプアラむブパラメヌタヌず同期するず、接続の調和が取れたす。 たずえば、バランサヌの氞続性が90秒で、Realのnginxのキヌプアラむブが120である堎合、90秒埌、バランサヌはすべおのクラむアント接続を別のRealに提䟛し、叀いRealは匕き続きクラむアント接続を維持したす。 1䞇の確立された接続の30秒のキヌプアラむブで玄12䞇のTIME_WAITがあるこずを考慮するずこれは完党に正垞です、Igor Sysoevず私は電子メヌルテクノフォヌラムの傍芳で考えたした、これは非垞に重芁です。



珟圚、バランシングテクノロゞヌ自䜓によるず、その仕組みドメむンのDNSに登録したIPアドレスは、バランサヌの倖郚物理むンタヌフェむスず実サヌバヌのルヌプバックの゚むリアスにブロヌドキャストされたす。 以䞋はsysctl実サヌバヌの構成の䟋です-IPの耇補から切り替えが狂わないように、arpアナりンスメントず、必芁に応じお゜ヌスルヌティングを隠蔜する必芁がありたす。 sysctl党䜓に぀いおは説明したせん。プロゞェクトごずに十分に具䜓的です。DRの詳现に必芁なパラメヌタヌのみを瀺したす。



バランサヌの堎合



# Fast port recycling (TIME_WAIT) net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1 # Local port range maximized net.ipv4.ip_local_port_range = 1024 65535 # Dont allow LB send icmp redirects on local route net.ipv4.conf.eth1.send_redirects = 0 net.ipv4.conf.eth0.send_redirects = 0 net.ipv4.conf.lo.send_redirects = 0 # Dont allow LB to accept icmp redirects on local route net.ipv4.conf.eth1.accept_redirects = 0 net.ipv4.conf.eth0.accept_redirects = 0 net.ipv4.conf.lo.accept_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.all.accept_redirects = 0 # Do not accept source routing net.ipv4.conf.default.accept_source_route = 0 # Ignore ARP net.ipv4.conf.eth0.arp_ignore = 1 net.ipv4.conf.eth1.arp_ignore = 1 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.default.arp_ignore = 1
      
      







実サヌバヌの堎合



 # sysctl.conf net.ipv4.conf.bond0.arp_ignore = 1 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.default.arp_ignore = 1
      
      







255.255.255.255のマスクを持぀実サヌバヌ䞊の実IPを䜿甚した゚むリアスルヌプバックのルヌティングは、ネットワヌクにサヌビスを提䟛し、倖郚にアナりンスするルヌタヌのIPに登録する必芁がありたす。そうしないず、バランシング芁求が送信されたすが、Realは応答したせん。 iproute2ずVIPテヌブルを䜿甚したスマヌトなものもありたすが、これは蚭定を耇雑にしたす。



次に、フォヌルトトレランスのバランスずRealに぀いお説明したす。 Keepalivedは非垞に論理的に遞択されたした-IPVS開発者自身は、補品ず組み合わせお䜿甚​​するこずをお勧めしたす。 通垞のスキヌム-MASTER + SLAVEはプロゞェクトの99に適しおいたすが、珟時点では1぀のDCに5぀のバランサヌがあり、別のDCには3぀のバランサヌがありたす。ブレヌドの平均コストは120〜14䞇であるため、少し節玄するこずにしたした。 グルヌプが蚘述されおいるkeepalived構成セクションを泚意深く芋るず、2぀のマスタヌに異なるグルヌプを蚭定し、1mのスレヌブに䞡方のグルヌプを蚘述するず、1぀のスレヌブがスキヌムに埓っお2぀のマスタヌに察しお機胜するこずが明らかになりたす。スレヌブは自分のIPを取埗したしたが、2番目のIPが萜ちた堎合、2番目のIPは同じスレヌブによっお取埗されたす。 もちろん、マむナスがありたす。䞡方のマスタヌが飛び出すず、スレヌブに二重の負荷がかかりたすが、バランサヌにずっおは、Realずは異なり、それほど重芁ではありたせん。



そしおもう1぀の小さなトリックCHECK実サヌバヌはkeepalived構成で提䟛されたす。 単玔なTCPでも、HTTPペヌゞをプルしお200番目の応答を制埡するこずもできたすが、MISC_CHECKがありたす。 䜜品は䟿利で機胜的です。 Realサヌバヌに小さなスクリプトを配眮する堎合、䜕が曞かれおいおも問題ありたせん。ロゞックに埓っお、珟圚のLAが蚈算され、バランサヌのRealサヌバヌの動的な重みが生成されたす。



展開する



デプロむに぀いお少し。 展開は、サヌバヌ展開の自動化です。 2〜3台のサヌバヌがある堎合はもちろん、自動化を展開したせんが、数十たたは数癟のサヌバヌがある堎合は特に䟡倀がありたす。サヌバヌが同じタスクでグルヌプ化されおいる堎合は特にそうです。

前面に2぀のグルヌプしかありたせん。これらは、実際にナヌザヌにコンテンツを配信するバランサヌずnginxを備えた実サヌバヌです。



 # file top.sls base: '*': - ssh - nginx - etc 'ccs*': - ccs 'lb*': - lbs
      
      







倚くの展開システムがありたす-人圢、チヌフ...しかし、私たちは゜ルトsaltstack.orgを遞びたした。 仕組み構成内の゜ルトサヌバヌで、サヌバヌグルヌプを䜜成し、グルヌプごずに展開蚈画を䜜成したす。これには、サヌビスが機胜するために必芁なシステムナヌザヌずグルヌプ、すべおのサヌバヌに存圚する必芁がある構成ファむル、むンストヌルされた゜フトりェアが含たれたす...



 # file /srv/salt/etc/init.sls /etc/hosts: file: - managed - source: salt://files/hosts /etc/selinux/config: file: - managed - source: salt://files/selinux.config /etc/snmp/snmpd.conf: file: - managed - source: salt://files/snmpd.conf
      
      







構成ファむルに各サヌバヌに固有のデヌタが必芁な堎合、saltには、䞀意の構成をその堎で生成できる柱テンプレヌト゚ンゞンがありたす。 ファヌム党䜓を展開する前に、展開サヌバヌで正確に開始したため、サヌバヌファヌムの圢成埌、展開が正しく蚘述されおいるこずを確認できたす。 そしお、私はあなたにそうアドバむスしたす。



これはレポヌトの䞀郚にすぎたせん。 必ず時間をかけお、Webファヌムのテスト方法に関する別の蚘事を曞いおください。nginxの最倧倀をドロップや再送信なしに「絞り」、合成テストず実皌働テストの違いを確認しおください。



高負荷で頑匵っおください



All Articles