「任意のコストでサバむブ」モヌドでのりサギの操䜜RabbitMQ

「 䌚瀟 」-通信事業者PJSCメガフォン

「 Noda 」はRabbitMQサヌバヌです。

「 クラスタ 」ずは、3぀の堎合、党䜓ずしお動䜜するRabbitMQノヌドの組み合わせです。

「 等高線 」-RabbitMQクラスタヌのセット。䜜業のルヌルは、それらの前のバランサヌで決定されたす。

「 バランサヌ 」、「 hap 」-Haproxy-ルヌプ内のクラスタヌの負荷を切り替える機胜を実行するバランサヌ。 䞊列で実行されるHaproxyサヌバヌのペアが各ルヌプに䜿甚されたす。

「 サブシステム 」-りサギを介しお送信されるメッセヌゞの発行者および/たたは消費者

「 SYSTEM 」-サブシステムのセット。圓瀟が䜿甚する単䞀の゜フトりェアおよびハヌドりェア゜リュヌションであり、ロシア党土に分垃しおいたすが、すべおの情報が流れ、䞻な蚈算ず蚈算が行われる耇数のセンタヌがありたす。

SYSTEM-地理的に分散したシステム-ハバロフスクずりラゞオストクからサンクトペテルブルクずクラスノダヌルたで。 アヌキテクチャ䞊、これらは接続されたサブシステムの機胜で分割されたいく぀かの䞭倮の茪郭です。



テレコムの珟実における茞送のタスクは䜕ですか



簡単に蚀うず、サブスクラむバヌのアクションごずに、サブシステムの反応が続き、むベントおよび埌続の倉曎に぀いお他のサブシステムに通知されたす。 メッセヌゞは、サブスクラむバヌ偎だけでなく、䌚瀟の埓業員偎およびサブシステムからもSYSTEMを䜿甚したアクションによっお生成されたす非垞に倚くのタスクが自動的に実行されたす。



テレコムのトランスポヌトの機胜非同期トランスポヌトを介しお送信される、さたざたなデヌタの倧きな、間違いのない倧きなストリヌム。



䞀郚のサブシステムは、メッセヌゞフロヌの重いために別のクラスタヌに存圚したす。たずえば、クラスタヌにリ゜ヌスが残っおいたせん。たずえば、5〜6千メッセヌゞ/秒のメッセヌゞフロヌでは、送信されるデヌタの量は170〜190メガバむト/秒に達したす。 このような負荷プロファむルでは、このクラスタヌに他の誰かを着陞させようずするず悲しい結果に぀ながりたす。すべおのデヌタを同時に凊理するのに十分なリ゜ヌスがないため、りサギは着信接続をフロヌに远い蟌み始めたす-単玔な公開プロセスが開始され、すべおのサブシステムずシステムのすべおの結果が党䜓。



茞送の基本芁件



  1. 車䞡のアクセシビリティは99.99でなければなりたせん。 実際には、これは幎䞭無䌑の運甚芁件ず、緊急事態に自動的に察応する機胜に倉換されたす。
  2. デヌタの安党性の確保トランスポヌトで倱われたメッセヌゞの割合は0になる傟向がありたす。


たずえば、呌び出しを行うずいう事実では、いく぀かの異なるメッセヌゞが非同期トランスポヌトを通過したす。 同じ回路に存圚するサブシステム向けのメッセヌゞもあれば、䞭倮ノヌドぞの送信甚のメッセヌゞもありたす。 同じメッセヌゞが耇数のサブシステムで芁求される可胜性があるため、りサギでのメッセヌゞの公開の段階で、メッセヌゞはコピヌされ、異なるコンシュヌマヌに送信されたす。 たた、堎合によっおは、ハバロフスクの回線からクラスノダヌルの回線に情報を配信する必芁がある堎合に、メッセヌゞのコピヌが匷制的に䞭間回線に実装されたす。 送信は、䞭倮の受信者に察しお、メッセヌゞのコピヌが䜜成される䞭倮の茪郭の1぀を介しお行われたす。



サブスクラむバヌのアクションによっお匕き起こされるむベントに加えお、サブシステムを亀換するサヌビスメッセヌゞはトランスポヌトを通過したす。 したがっお、数千の異なるメッセヌゞングルヌトが取埗され、䞀郚は亀差し、䞀郚は分離しお存圚したす。 トランスポヌトマップのおおよそのスケヌルを理解するには、異なる茪郭䞊のルヌトに含たれるキュヌの数に名前を付けるだけで十分です䞭倮回線600、200、260、15 ...およびリモヌト回線80-100 ...



このようなトランスポヌトの関䞎により、すべおのトランスポヌトノヌドの100のアクセス可胜性に察する芁件は、もはや過床に思えたせん。 これらの芁件の実装に進んでいたす。



タスクを解決する方法



RabbitMQ自䜓に加えお、 Haproxyは負荷のバランスを取り、緊急事態ぞの自動応答を提䟛するために䜿甚されたす。



私たちのうさぎがいるハヌドりェアず゜フトりェア環境に぀いおのいく぀かの蚀葉





これはすべおこのように考えられお実装されおいるように芋えたす



画像



画像



今、いく぀かの蚭定。



Haproxy蚭定
フロント゚ンドcenter-rmq_5672
瞛る *5672
モヌド tcp
マックスコン 10,000
タむムアりトクラむアント 3時間
オプション tcpka
オプション tcplog
default_backend center-rmq_5672
フロント゚ンドcenter-rmq_5672_lvl_1
瞛る ロヌカルホスト56721
モヌド tcp
マックスコン 10,000
タむムアりトクラむアント 3時間
オプション tcpka
オプション tcplog
default_backend center-rmq_5672_lvl_1
バック゚ンドcenter-rmq_5672
バランス 最少
モヌド tcp
フルコン 10,000
タむムアりト サヌバヌ3h
サヌバヌ srv-rmq01 10/10/10/10/106767むンタヌ5秒の立ち䞊がり2立ち䞋がり3マヌクアップされたシャットダりンバックアップセッションのチェック
サヌバヌ srv-rmq03 10/10/10/2011 11672盞互5秒の䞊昇2萜䞋3マヌクアップされたシャットダりンバックアップセッションのチェック
サヌバヌ srv-rmq05 2012幎10月10日126767盞互5秒の䞊昇2萜䞋3マヌクアップされたシャットダりンバックアップセッションをチェック
サヌバヌ localhost 127.0.0.1 ∗ 6721 check inter 5s rise 2 fall 3 backup on-marked-down shutdown-sessions
バック゚ンドcenter-rmq_5672_lvl_1
バランス 最少
モヌド tcp
フルコン 10,000
タむムアりト サヌバヌ3h
サヌバヌ srv-rmq02 10/10/10/136767むンタヌ5秒の立ち䞊がり2立ち䞋がり3マヌクアップされたシャットダりンバックアップセッションのチェック
サヌバヌ srv-rmq04 10/10/10/146767むンタヌ5の䞊昇2の䞋降3のマヌクアップされたシャットダりンバックアップセッションのチェック
サヌバヌ srv-rmq06 10.10.10.5:0767むンタヌ5sの䞊昇2の䞋降3のマヌクアップされたシャットダりンバックアップセッションの確認




フロントの最初のセクションは、メむンクラスタに぀ながる゚ントリポむントを説明したす。2番目のセクションは、予備レベルのバランスを取るように蚭蚈されおいたす。 バック゚ンドセクションですべおのバックアップりサギサヌバヌを単玔に説明する堎合バックアップ手順、同じように機胜したす-メむンクラスタヌに完党にアクセスできない堎合、接続はバックアップに行きたすが、すべおの接続はリストの最初のバックアップサヌバヌに行きたす。 すべおのバックアップノヌドで負荷分散を保蚌するために、ロヌカルホストでのみ䜿甚できるフロントをもう1぀導入し、それをバックアップサヌバヌに割り圓おたす。



䞊蚘の䟋では、2぀のデヌタセンタヌ内で動䜜するリモヌト回線のバランスに぀いお説明しおいたす。srv-rmqサヌバヌ{01,03,05}-デヌタセンタヌNo. 1に䜏んでおり、srv-rmq {02,04,06}-デヌタセンタヌNo. 2にありたす。 したがっお、4コヌダ゜リュヌションを実装するには、察応するりサギサヌバヌの2぀のロヌカルフロントず2぀のバック゚ンドセクションを远加するだけです。



この構成でのバランサヌの動䜜は次のずおりです。少なくずも1぀のメむンサヌバヌが皌働しおいる間、それを䜿甚したす。 メむンサヌバヌが利甚できない堎合、予備で䜜業したす。 少なくずも1぀のプラむマリサヌバヌが䜿甚可胜になるず、バックアップサヌバヌぞのすべおの接続が切断され、接続が埩元されるず、それらは既にプラむマリクラスタに萜ちたす。



この構成の操䜜経隓は、各回路のほが100の可甚性を瀺しおいたす。 この゜リュヌションでは、サブシステムが完党に合法か぀シンプルである必芁がありたす。切断埌にりサギず再接続できるようにするためです。



そのため、任意の数のクラスタヌに負荷分散を提䟛し、クラスタヌを自動的に切り替えたした。今床はりサギに盎接アクセスしたす。



実践が瀺すように、各クラスタヌは3぀のノヌドから䜜成されたす。これは、最適なノヌド数であり、可甚性/フォヌルトトレランス/速床の最適なバランスを保蚌したす。 りサギは氎平方向にスケヌリングしないためクラスタヌのパフォヌマンスは最も遅いサヌバヌのパフォヌマンスに等しい、CPU / Mem / Hddの最適なパラメヌタヌが同じであるすべおのノヌドを䜜成したす。 サヌバヌをできるだけ近くに配眮したす。この堎合、同じファヌム内に仮想マシンをファむリングしたす。



前提条件に関しおは、サブシステムの䞀郚で、受信したメッセヌゞを保存するための芁件の最も安定した動䜜ず実珟が保蚌されたす。



  1. りサギを䜿甚した䜜業は、amqp / amqpsプロトコルを介しおのみバランシングを介しお行われたす。 ロヌカルアカりントでの承認-各クラスタヌ内および、回路党䜓
  2. サブシステムはパッシブモヌドでりサギに接続されたすりサギの゚ンティティキュヌ/゚シェンダむ/バむンドの䜜成の操䜜は蚱可されず、アカりント暩限のレベルで制限されたす-単に蚭定する暩利を䞎えたせん。
  3. 必芁なすべおの゚ンティティは、サブシステムではなく䞭倮で䜜成され、すべおのクラスタヌで同じ方法で行われたす-バックアップクラスタヌぞの自動切り替え、およびその逆を行うため。 そうでない堎合は、状況を把握できたす。リザヌブに切り替えたしたが、キュヌたたはバむンドが存圚せず、接続゚ラヌたたはメッセヌゞの欠萜のいずれかを遞択できたす。


りサギの盎接蚭定



  1. ロヌカルホストはWebむンタヌフェむスにアクセスできたせん
  2. WebぞのアクセスはLDAPを介しお敎理されたす。ADず統合し、りェブカメラで誰がどこに行ったかを蚘録したす。 構成レベルでは、ADアカりントの暩利を制限したす。特定のグルヌプに属しおいる必芁があるだけでなく、「芋る」ためだけの暩利も䞎えたす。 監芖グルヌプで十分です。 たた、ADの別のグルヌプに管理者暩限を掛けおいるため、トランスポヌトぞの圱響の茪は倧幅に制限されおいたす。
  3. 管理ず远跡を容易にするには

    すべおのVHOSTで、すべおのキュヌに適甚するレベル0のポリシヌをすぐに切断したすパタヌン。*



    • ha-modeall-すべおのデヌタをクラスタヌのすべおのノヌドに保存したす。メッセヌゞの凊理速床は䜎䞋したすが、安党性ず可甚性は保蚌されたす。
    • ha-sync-modeautomatic-クラスタヌのすべおのノヌドでデヌタを自動的に同期するようにクロヌラヌに指瀺したす。デヌタの安党性ず可甚性も向䞊したす。
    • queue-modelazy-おそらくバヌゞョン3.6以降のりサギに登堎した最も有甚なオプションの1぀-HDD䞊のメッセヌゞの即時蚘録。 このオプションは、RAMの消費を劇的に削枛し、ノヌドたたはクラスタヌ党䜓の停止/フォヌル䞭のデヌタの安党性を高めたす。


  4. 構成ファむルの蚭定 rabbitmq-main / conf / rabbitmq.config 



    • セクションrabbit  {vm_memory_high_watermark_paging_ratio、0.5} -メッセヌゞをディスクにダりンロヌドするためのしきい倀50。 lazyがオンの堎合、たずえばlazyを含めるこずを忘れるレベル1のようなポリシヌを䜜成するず、保険ずしおの圹割を果たしたす。
    • {vm_memory_high_watermark、0.95} -りサギはRAM党䜓の95に制限したす。りサギのみがサヌバヌ䞊に存圚するため、より厳しい制限を導入しおも意味がありたせん。 5の「幅広いゞェスチャヌ」なので、OS、監芖、その他の䟿利なものはそのたたにしおおきたす。 この倀は䞊限であるため、誰もが十分なリ゜ヌスを持っおいたす。
    • {cluster_partition_handling、pause_minority} -ネットワヌクパヌティションが発生したずきのクラスタヌの動䜜を説明したす。3぀以䞊のノヌドクラスタヌの堎合、このフラグをお勧めしたす-クラスタヌが自身を回埩できるようにしたす。
    • {disk_free_limit、 "500MB"} -500 MBの空きディスク容量がある堎合、すべおが簡単です-メッセヌゞの発行は停止され、枛算のみが䜿甚可胜になりたす。
    • {auth_backends、[rabbit_auth_backend_internal、rabbit_auth_backend_ldap]} -りサギの承認順序最初に、ロヌカルデヌタベヌス内の超音波の存圚を確認し、存圚しない堎合はLDAPサヌバヌに移動したす。
    • rabbitmq_auth_backend_ldapセクション-ADずの察話の構成 {servers、["srv_dc1"、 "srv_dc2"]} -認蚌が行われるドメむンコントロヌラヌのリスト。
    • ADのナヌザヌ、LDAPポヌトなどを盎接説明するパラメヌタヌは玔粋に個別であり、ドキュメントで詳现に説明されおいたす。
    • 私たちにずっお最も重芁なこずは、りサギのWebむンタヌフェヌスぞの管理ずアクセスに関する暩利ず制限の説明ですtag_queries

      [{管理者、{in_group、 "cn = rabbitmq-admins、ou = GRP、ou = GRP_MAIN、dc = My_domain、dc = ru"}}、

      {監芖、

      {in_group、「cn = rabbitmq-web、ou = GRP、ou = GRP_MAIN、dc = My_domain、dc = ru」}

      }] -この蚭蚈は、rabbitmq-adminsグルヌプのすべおのナヌザヌに管理暩限を提䟛し、rabbitmq-webグルヌプに監芖暩限アクセスの衚瀺に最䜎限必芁を提䟛したす。

    • resource_access_query 

      {のために、

      [{permission、configure、{in_group、 "cn = rabbitmq-admins、ou = GRP、ou = GRP_MAIN、dc = My_domain、dc = ru"}}

      {蚱可、曞き蟌み、{in_group、 "cn = rabbitmq-admins、ou = GRP、ou = GRP_MAIN、dc = My_domain、dc = ru"}}、

      {蚱可、読み取り、{定数、true}}

      ]

      } -蚭定および管理者グルヌプにのみ曞き蟌む暩限を提䟛したす。ログむンに成功した他のすべおの人に、暩限は読み取り専甚です-Webむンタヌフェヌスを介しおメッセヌゞを読み取るこずができたす。



デヌタの可甚性ず安党性を最倧化するりサギ自䜓の構成ファむルず蚭定のレベルで構成枈みクラスタヌを取埗したす。 これにより、ほずんどの堎合、デヌタの可甚性ず安党性を確保するずいう芁件を実装したす。



このような負荷の高いシステムを運甚する際に考慮すべき点がいく぀かありたす。



  1. キュヌを䜜成するずきにパラメヌタヌをハングさせるのではなく、政治家がキュヌのすべおの远加プロパティTTL、有効期限、最倧長などを敎理するこずをお勧めしたす。 倉化する珟実に合わせおその堎でカスタマむズできる、柔軟にカスタマむズ可胜な構造になっおいたす。
  2. TTLを䜿甚したす。 キュヌが長いほど、CPU負荷が高くなりたす。 「倩井を突砎する」のを防ぐには、max-lengthを䜿甚しおキュヌの長さを制限するこずをお勧めしたす。
  3. りサギ自䜓に加えお、倚くのナヌティリティアプリケヌションがサヌバヌ䞊で回転しおいたすが、奇劙なこずに、CPUリ゜ヌスも必芁です。 食いしん坊のりサギは、デフォルトで、利甚可胜なすべおのカヌネルを占有したす...それは䞍快な状況であるこずが刀明する可胜性がありたすりサギのブレヌキに簡単に぀ながる可胜性のあるリ゜ヌスの闘争。 この状況は、たずえば次のように回避できたす。アヌラン起動パラメヌタヌの倉曎-䜿甚するコアの数に匷制的な制限を導入したす。 これを次のように行いたす。rabbitmq-envファむルを芋぀け、SERVER_ERL_ARGS =パラメヌタヌを探しお、+ sct L0-Xc0-X + SYYを远加したす。 Xはコア1の数カりントは0から開始、Y-コア1の数1からカりントです。 + sct L0-Xc0-X-カヌネルぞのバむンディングを倉曎したす。+ SYY-アヌランによっお起動されたシェダヌの数を倉曎したす。 したがっお、8コアのシステムの堎合、远加されるパラメヌタヌは次の圢匏になりたす+ sct L0-6c0-6 + S 77。 このようにしお、りサギに7コアのみを提䟛し、OSが他のプロセスを起動するこずにより最適に動䜜し、アンロヌドされたカヌネルにハングするこずを期埅したす。


結果ずしお生じる動物園の運営のニュアンス



どの蚭定からも保護できないのは、蚘憶喪倱したベヌスです-残念ながら、れロ以倖の確率で発生したす。 このような悲惚な結果は、グロヌバルな障害たずえば、デヌタセンタヌ党䜓の完党な障害-負荷が別のクラスタヌに切り替わるなどではなく、同じネットワヌクセグメント内のより倚くのロヌカル障害によっお匕き起こされたす。



さらに、怖いのはロヌカルネットワヌクの障害です。なぜなら、 1぀たたは2぀のノヌドの緊急シャットダりンは臎呜的な結果に぀ながるこずはありたせん-単にすべおの芁求が1぀のノヌドに送られ、芚えおいるように、パフォヌマンスはノヌド自䜓のパフォヌマンスに䟝存したす。 ネットワヌク障害通信の小さな䞭断は考慮しおいたせん-痛みはありたせんは、ノヌドが盞互に同期プロセスを開始し、その埌数秒間䜕床も接続が切断される状況に぀ながりたす。



たずえば、ネットワヌクが耇数回点滅し、5秒を超える頻床でHapov蚭定でそのようなタむムアりトが蚭定されおいる堎合、それらを確実に再生できたすが、有効性を確認するには、倱敗を繰り返す必芁がありたす。



クラスタヌは、このような繰り返しを1回たたは2回耐えるこずができたすが、それ以䞊の可胜性はすでに最小限に抑えられおいたす。 このような状況では、倒れたノヌドの停止は節玄できたすが、手動で停止する時間を持぀こずはほずんど䞍可胜です。 倚くの堎合、結果は「ネットワヌクパヌティション」ずいうメッセヌゞでクラスタヌからノヌドが倱われるだけでなく、キュヌの䞀郚のデヌタがこのノヌドだけに存圚し、残りのノヌドず同期する時間がなかった堎合の画像もありたす。 芖芚的に-キュヌ内のデヌタはNaNです。



そしお今、これは明確な信号です-バックアップクラスタに切り替えたす。 切り替えは幞運をもたらしたす;メむンクラスタヌでりサギを止めるだけで数分です。 その結果、茞送の䜜業胜力の回埩が埗られ、事故の分析ずその解消に安党に進むこずができたす。



損傷したクラスタヌを読み蟌みから削陀するには、さらなる劣化を防ぐために、最も簡単なのは、りサギを5672以倖のポヌトで動䜜させるこずです。りサギを通垞のポヌトで監芖しおいるため、たずえば5673りサギの蚭定では、クラスタヌを完党に無事に起動し、その操䜜性ず残っおいるメッセヌゞを埩元しようずするこずができたす。



いく぀かの手順でそれを行いたす。



  1. 障害が発生したクラスタヌのすべおのノヌドを停止したす-hapは負荷をバックアップクラスタヌに切り替えたす
  2. RABBITMQ_NODE_PORT = 5673をrabbitmq-envファむルに远加したす-りサギが起動するず、蚭定は匷化されたすが、Webむンタヌフェヌスは15672で動䜜したす。
  3. 早急に死亡したクラスタヌのすべおのノヌドで新しいポヌトを指定し、それらを開始したす。


起動時にむンデックスが再構築され、ほずんどの堎合、すべおのデヌタが完党に埩元されたす。 残念ながら、ディスクからすべおのメッセヌゞを物理的に削陀しなければならないクラッシュが発生し、構成のみが残されたす-ディレクトリmsg_store_persistent 、 msg_store_transient 、 キュヌ バヌゞョン3.6の堎合たたはmsg_stores バヌゞョン3.7の堎合はデヌタベヌスのあるフォルダヌから削陀されたす。



このような急進的な治療の埌、クラスタヌは内郚構造を保持しながら起動されたすが、メッセヌゞはありたせん。



そしお、最も䞍快なオプション䞀床だけ芳察ベヌスぞの損傷は、ベヌス党䜓を完党に削陀し、クラスタヌを最初から再構築する必芁があるほどでした。



りサギの管理ず曎新の利䟿性のために、rpmの既補のアセンブリは䜿甚されたせんが、りサギはcpioを䜿甚しお分解され、再構成されたすスクリプトのパスを倉曎したす。 䞻な違いは、むンストヌル/構成にルヌト特暩を必芁ずせず、システムにむンストヌルされず再構築されたりサギはtgzに完党にパックされおいる、どのナヌザヌからでも実行できるこずです。 このアプロヌチにより、バヌゞョンを柔軟にアップグレヌドできたすクラスタヌを完党に停止する必芁がない堎合-この堎合、バックアップクラスタヌに切り替えお曎新し、シフトされたポヌトを操䜜に指定するこずを忘れないでください。 同じマシン䞊でRabbitMQの耇数のむンスタンスを実行するこずも可胜です-オプションのテストには非垞に䟿利です-バトル動物園のアヌキテクチャコピヌを展開できたす。



スクリプトのcpioずパスのシャヌマニズムの結果ずしお、ビルドオプションがありたした2぀のrabbitmq-baseフォルダヌ元のアセンブリ-mnesiaフォルダヌずrabbimq-main-ここに、りサギずアヌラン自䜓のすべおの必芁なスクリプトを入れたした。



rabbimq-main / binには、りサギずアヌランのスクリプトぞのシンボリックリンクず、りサギの远跡スクリプトがありたす以䞋の説明。



rabbimq-main / init.d-ログが開始/停止/回転するrabbitmq-serverスクリプト。 libでは、りサギ自䜓。 lib64で-アヌランりサギのアヌランのバヌゞョンのみを䜿甚



新しいバヌゞョンがリリヌスされたずきに結果のアセンブリを曎新するのは非垞に簡単です-新しいバヌゞョンからrabbimq-main / libおよびrabbimq-main / lib64の内容を远加し、binのシンボリックリンクを眮き換えたす。 曎新が制埡スクリプトにも圱響する堎合-それらのパスを倉曎したす。



このアプロヌチの確実な利点は、バヌゞョンの完党な連続性です。すべおのパス、スクリプト、制埡コマンドは倉曎されないため、バヌゞョンごずにドヌピングするこずなく、自己蚘述ナヌティリティスクリプトを䜿甚できたす。



りサギのfall萜以来、たれにしか発生しおいたせんが、fall萜の堎合はfall萜の理由のログを維持しながら飌育を監芖するメカニズムを実装する必芁がありたした。 ケヌスの99でのノヌドの障害にはログ゚ントリが䌎い、痕跡を残しおさえ殺すこずができたす。これにより、簡単なスクリプトを䜿甚しおりサギの状態の監芖を実装するこずが可胜になりたした。



バヌゞョン3.6および3.7では、ログ゚ントリの違いにより、スクリプトがわずかに異なりたす。



バヌゞョン3.6の堎合
#!/usr/bin/python import subprocess import os import datetime import zipfile def LastRow(fileName,MAX_ROW=200): with open(fileName,'rb') as f: f.seek(-min(os.path.getsize(fileName),MAX_ROW),2) return (f.read().splitlines())[-1] if os.path.isfile('/data/logs/rabbitmq/startup_log'): if b'FAILED' in LastRow('/data/logs/rabbitmq/startup_log'): proc = subprocess.Popen("ps x|grep rabbitmq-server|grep -v 'grep'", shell=True, stdout=subprocess.PIPE) out = proc.stdout.readlines() if str(out) == '[]': cur_dt=datetime.datetime.now() try: os.stat('/data/logs/rabbitmq/after_crush') except: os.mkdir('/data/logs/rabbitmq/after_crush') z=zipfile.ZipFile('/data/logs/rabbitmq/after_crush/repair_log'+'-'+str(cur_dt.day).zfill(2)+str(cur_dt.month).zfill(2)+str(cur_dt.year)+'_'+str(cur_dt.hour).zfill(2)+'-'+str(cur_dt.minute).zfill(2)+'-'+str(cur_dt.second).zfill(2)+'.zip','a') z.write('/data/logs/rabbitmq/startup_err','startup_err') proc = subprocess.Popen("~/rabbitmq-main/init.d/rabbitmq-server start", shell=True, stdout=subprocess.PIPE) out = proc.stdout.readlines() z.writestr('res_restart.log',str(out)) z.close() my_file = open("/data/logs/rabbitmq/run.time", "a") my_file.write(str(cur_dt)+"\n") my_file.close()
      
      









3.7では、2行のみが倉曎されたす
 if (os.path.isfile('/data/logs/rabbitmq/startup_log')) and (os.path.isfile('/data/logs/rabbitmq/startup_err')): if ((b' OK ' in LastRow('/data/logs/rabbitmq/startup_log')) or (b'FAILED' in LastRow('/data/logs/rabbitmq/startup_log'))) and not (b'Gracefully halting Erlang VM' in LastRow('/data/logs/rabbitmq/startup_err')):
      
      









このスクリプトスクリプト名check_and_runを毎分実行するりサギデフォルトではrabbitmqが動䜜するcrontabアカりントを蚭定したす最初に、管理者にcrontabを䜿甚する暩利を䞎えるように管理者に䟝頌したすが、root暩限がある堎合は自分で行いたす

* / 1 * * * *〜/ rabbitmq-main / bin / check_and_run



再組み立おされたりサギを䜿甚する2番目のポむントは、ログの回転です。



logrotateシステムに瞛られおいないため、開発者が提䟛する機胜を䜿甚したす。init.dのrabbitmq-serverスクリプトバヌゞョン3.6甚

rotate_logs_rabbitmqに小さな倉曎を加えるこずにより

远加



  find ${RABBITMQ_LOG_BASE}/http_api/*.log.* -maxdepth 0 -type f ! -name "*.gz" | xargs -i gzip --force {} find ${RABBITMQ_LOG_BASE}/*.log.*.back -maxdepth 0 -type f | xargs -i gzip {} find ${RABBITMQ_LOG_BASE}/*.gz -type f -mtime +30 -delete find ${RABBITMQ_LOG_BASE}/http_api/*.gz -type f -mtime +30 -delete
      
      





キヌrotate-logsを䜿甚しおrabbitmq-serverスクリプトを実行した結果ログはgzipで圧瞮され、過去30日間のみ保存されたす。 http_api-りサギがログを眮くパスhttp-蚭定ファむルで蚭定 {rabbitmq_management、[{rates_mode、Detailed}、{http_log_dir、path_to_logs / http_api "}]}



同時に、 {rates_mode、 detailed }に泚意を払っおいたす。このオプションは負荷をわずかに増加させたすが、WEBむンタヌフェヌスのEXCHENGEでメッセヌゞを投皿するナヌザヌの情報を衚瀺できたすしたがっおAPIを介しお取埗できたす。 情報は非垞に必芁です、なぜなら すべおの接続はバランサヌを経由したす-バランサヌ自䜓のIPのみが衚瀺されたす。 そしお、りサギず接続するすべおのサブシステムをパズルしお、りサギぞの接続のプロパティのクラむアントプロパティパラメヌタを入力するず、誰が、どこで、どの匷床でメッセヌゞを発行するかに関する接続レベルの詳现情報を取埗するこずが可胜になりたす。



新しいバヌゞョン3.7のリリヌスでは、 init.dのrabbimq-serverスクリプトが完党に拒吊されたした。 操䜜りサギのバヌゞョンに関係なく制埡コマンドの均䞀性ずバヌゞョン間のスムヌズな移行を促進するために、再構築されたりサギではこのスクリプトを䜿甚し続けたす。 真実は再びです。ロヌテヌション埌のログの呜名メカニズムが3.7で倉曎されたため、 rotate_logs_rabbitmqをわずかに倉曎したす 。



  mv ${RABBITMQ_LOG_BASE}/$NODENAME.log.0 ${RABBITMQ_LOG_BASE}/$NODENAME.log.$(date +%Y%m%d-%H%M%S).back mv ${RABBITMQ_LOG_BASE}/$(echo $NODENAME)_upgrade.log.0 ${RABBITMQ_LOG_BASE}/$(echo $NODENAME)_upgrade.log.$(date +%Y%m%d-%H%M%S).back find ${RABBITMQ_LOG_BASE}/http_api/*.log.* -maxdepth 0 -type f ! -name "*.gz" | xargs -i gzip --force {} find ${RABBITMQ_LOG_BASE}/*.log.* -maxdepth 0 -type f ! -name "*.gz" | xargs -i gzip --force {} find ${RABBITMQ_LOG_BASE}/*.gz -type f -mtime +30 -delete find ${RABBITMQ_LOG_BASE}/http_api/*.gz -type f -mtime +30 -delete
      
      





ログのロヌテヌション甚のタスクをcrontabに远加するだけです-たずえば、毎日23-00

00 23 * * *〜/ rabbitmq-main / init.d / rabbitmq-server rotate-logs



「りサギファヌム」の運甚のフレヌムワヌクで解決する必芁があるタスクに移りたしょう。



  1. りサギ゚ンティティの操䜜-りサギ゚ンティティの䜜成/削陀ekschendzhey、キュヌ、バむンド、シャベル、ナヌザヌ、ポリシヌ。 さらに、これを行うこずは、すべおのクラスタヌクラスタヌでたったく同じです。
  2. バックアップクラスタに切り替えた埌、バックアップクラスタに残ったメッセヌゞを珟圚のクラスタに転送する必芁がありたす。
  3. すべおの回線のすべおのクラスタヌの構成のバックアップコピヌを䜜成する
  4. Contour内のクラスタヌ構成の完党同期
  5. りサギの停止/開始
  6. 珟圚のデヌタフロヌを分析するにはすべおのメッセヌゞを送信し、送信する堎合はどこに送信するか、たたは...
  7. 任意の基準で通過メッセヌゞを芋぀けおキャッチする


提䟛されおいる通垞のrabbitmq_managementプラグむンを䜿甚した動物園の操䜜ず音声付きタスクの゜リュヌションは可胜ですが、非垞に䞍䟿です。 そのため、さたざたなりサギ党䜓を制埡するシェルが開発および実装されおいたす。



All Articles