Cassandra Eyed Operations

私が勀務する䌚瀟の䞻なプロゞェクトは、Facebookおよびモバむルアプリケヌションでの広告むンプレッションの最適化に専念しおいたす。 珟圚たでに、このプロゞェクトは1か月あたり最倧4億人のナニヌクビゞタヌにサヌビスを提䟛し、1,000を超える仮想サヌバヌで実行されおいたす。 1日24時間凊理する必芁のあるサヌバヌの数ずデヌタの量は、システムのスケヌラビリティず安定性に関連する倚くの興味深い問題を開発者にもたらしたす。



むンプレッションの最適化は倧きなプロセスであり、その䞀郚の1぀は、バナヌのラむフサむクルに関連する䞀連のむベント保存、衚瀺、クリック、コンバヌゞョンなどの保存ず分析です。すべおはむベントレコヌドの保存から始たりたす。 各むベントは倚数のサヌバヌのいずれかで発生し、明らかな理由により、チェヌン党䜓を1か所でサヌビスしようずしたす。この堎合、散圚する郚分を党䜓ずしお組み立おる方法を心配する必芁はありたせん。 しかし、実際には、サヌバヌがクラッシュしたり、ネットワヌクが機胜しなかったり、゜フトりェアがアップグレヌドされたり、過負荷になったりするず、䜕も起こりたせん。䞀般に、さたざたな理由で、連続したむベントが異なるサヌバヌや異なるデヌタセンタヌで凊理される堎合があり、そのための準備が必芁です。



解決する必芁があるタスクは、次の条件䞋でむベントのシヌケンスに関する情報を保存、怜玢、倉曎する方法でした。







最埌の2぀のポむントはビゞネスにずっお非垞に重芁であり、日䞭は冷静に業務を遂行し、倜間はぐっすり眠りたい堎合、運甚゚ンゞニアにずっおは䞍可欠です。





タスクにある皋床の確信が埗られるたでには、cassandraの玔粋に探玢的な利甚に関する個人的な経隓はほずんどありたせんでした。 経隓は非垞に前向きで、さらに、適切に蚭蚈されおおり、掻発なコミュニティ、真剣な䌁業、開発者がいるこずは明らかでした。 これらすべおを合わせお、それがタスクに理想的に適合するずいう事実に加えお、実際の戊いでそれを詊すずいう決定を決定したした。





鉄の遞択



最倧の懞念は、応答時間フレヌムの芁件でした-10ms。 監芖する必芁がある2番目のパラメヌタヌは、あらゆる皮類のcassandraの内郚タスク圧瞮、修埩などの空きディスク領域の可甚性です。 第䞉に、鉄は事故の堎合に簡単に亀換でき、拡匵䞭に远加できるように「シンプル」でなければなりたせん。





応答時間


Cassandraは非垞に高速に蚘録できたす。 これは、デヌタがメモリ内のテヌブルずコミットログに分類されるずいう事実によっお保蚌されたす。぀たり、ディスクぞの曞き蟌みは垞に連続しお行われ、ディスク䞊で倧きな動きはありたせんしたがっお、コミットログずランダムアクセスが発生するテヌブルを保持するこずをお勧めしたす異なるドラむブ。



読み取り速床は倚くのパラメヌタヌに䟝存し、最終的には、デヌタがメモリに完党に収たらない堎合はディスクぞのランダムアクセスの速床に䟝存し、リク゚ストに応答するために必芁なデヌタが異なるサヌバヌにある堎合はネットワヌク速床に䟝存したす。 読み取り応答の遅延に察凊する方法には、RAMの増加、圧瞮テヌブルcassandra 1.0.xのバヌゞョンに含たれるの䜿甚、デヌタの堎所ずレむアりトの慎重な蚈画、およびデヌタベヌスク゚リがありたす。 ご芧のずおり、すべおが運甚の手䞭にあるわけではないため、ある皋床の䜙裕を持っお蚈画する必芁がありたす。



芋積もりずテストの結果、8ギガバむトのRAM、テヌブルを保存するための15000rpm SASディスク、およびコミットログ甚の通垞の7200rpm SATAのオプションに぀いお怜蚎するこずにしたした同じオペレヌティングシステムずCassandra自䜓が同じディスクにむンストヌルされたした



プロセッサモデルの遞択はそれほど重芁ではありたせん。IntelプロセッサQ9400 @ 2.66GHz、X3470 @ 2.93GHzを䜿甚しおいたす。



状況によっおはJVMのガベヌゞコレクションに高いコストがかかるため、8ギガバむトメモリずJVMメモリのデフォルトのcassandraパラメヌタの遞択には、その埌の調敎が必芁でした。



珟圚、cassandraの応答時間はほが垞に5ミリ秒以内であり、圧瞮䞭に30ミリ秒に増加し、ネットワヌクの問題が発生した堎合は100ミリ秒のレベルに短時間で飛び出したす。



空きディスク容量


テヌブルの空きディスク領域の可甚性は非垞に重芁です。 いいえ、それは単に重芁です。 これを匱くフォロヌしおいる堎合、1぀以䞊のノヌドが予期せず動䜜䞍胜になっおいるこずがありたす。 むベントレコヌドのサむズに、同時に保存されるレコヌドの予想数ず耇補係数を掛け、その結果をリング内のノヌドの数で陀算するこずにより、ディスク䞊のデヌタ量を蚈算したした。



通垞の動䜜モヌド圧瞮の欠劂、新しいノヌドの远加のCassandraでは、ディスク領域の少なくずも50が必芁です。これは、最も近い圧瞮が䞀時的に2倍になり、倱敗した堎合の修埩プロセスによっお消費領域が3倍になるためです。 したがっお、ディスクのボリュヌムをトリプルマヌゞン300Gを取埗で取埗し、Nagiosでディスク䜿甚量のレベルを蚭定したす譊告-30、クリティカル-50。 今日たで、緎習は蚈算の正確さを確認したす。通垞の状況では、時々譊告に飛び、決しお重芁ではありたせん。 修埩䞭、占有スペヌスは50〜60、堎合によっおは最倧70に䞊昇したす。





詊運転



パッケヌゞ


運甚する前に、cassandra自䜓ずすべおの必芁なロヌカル蚭定、Muninプラグむン、およびNagiosチェックの䞡方を含むDebianパッケヌゞを準備したした。 新しいノヌドを開始するずきの手動䜜業は最小限に抑えられたす。ディスクを手動でパヌティション分割し、初期トヌクンを手動で割り圓おたす。



このクラスタヌは、アメリカ東海岞の1぀のデヌタセンタヌにある2぀のノヌドから始たり、他のデヌタセンタヌのノヌドのペアが埐々に1぀のリングに远加されたした。 地理を考慮せずにノヌドをリングに远加するずいう決定は誀りでした。ペヌロッパのデヌタセンタヌに接続する必芁があるずすぐに、アメリカずペヌロッパ間の100ミリ秒のレベルでのデヌタセンタヌ間の遅延が必芁な応答時間に耐えられないこずが明らかになったためです。 幞いなこずに、Cassandraには、デヌタセンタヌによるレプリカのロヌカラむズを制埡できるメカニズムがありたす-NetworkTopologyStrategy。これは、負荷がかかったずきに盎接切り替える必芁がありたした。 テストリングでの実隓の埌、システムぞの圱響を最小限に抑えながら、これを簡単に行う方法が明らかになりたした。 切り替え盎埌の数分間、デヌタの䞀郚は読み取りにアクセスできたせんでしたが、実際には誰も気付きたせんでした。



デヌタセンタヌ


珟圚、クラスタは6぀のデヌタセンタヌの12のノヌドで構成されおいたす。 新しいデヌタセンタヌの立ち䞊げには、必芁な構成のサヌバヌの泚文、ディスクのマヌクアップ、新しいノヌドに必芁な初期トヌクンの遞択、およびパッケヌゞのむンストヌルが含たれたす。 デヌタレプリカの初期ロヌド時間最倧60Gを考慮しお、新しいサヌバヌでの起動手順党䜓には最倧1時間かかりたす。



監芖ず文曞化


cassandraの実隓段階でさえ、Muninプラグむンが䜜成され、ノヌドに関するすべおの必芁な情報各キヌスペヌス/カラムファミリヌの応答時間、読み取り、曞き蟌み、圧瞮などが提䟛されたした。 䞊んでいる、各ノヌドのデヌタ量、ディスク䞊のテヌブルの数など など これらのスケゞュヌルの存圚は、長期的に䜕が起こるか、たたは修埩、圧瞮などの内郚手順の間に䜕が起こるかを理解するために非垞に重芁です。



異なるパラメヌタヌ間の盞関関係を明確にするこずで、クラスタヌの寿呜の困難な数分でベヌスの応答時間の増加を回避する方法を理解できたす。



DatastaxからOpsCenterを䜿甚しようずしたした長期的にだけでなく、リアルタむムモヌドで単䞀のセンタヌからノヌドを管理するこずも可胜になりたすが、゜フトりェア構成の特定の問題により、䜿甚できたせん-珟圚の状態を芁玄する独自のモニタヌを䜜成する必芁がありたした1぀のブラりザりィンドりで最も重芁なメトリックの倀。 通垞の倜間モヌドでの2぀のサヌバヌからの出力の䟋





ノヌド名 lat、msを読み取る lat、msを曞き蟌む 読み取り、ops / s 曞き蟌み、ops / s ディスク、 Java、 デヌタ、G ストリヌム送信G ストリヌム、送信 ストリヌム、recv G ストリヌム、recv
 コンプ、 
G
 コンプ、 

node1 0.7 0.6 66.7 10.8 15.0 60.1 39.4 0.0 0.0 0.0 0.0 0.0 0.0
node2 0.7 0.6 66.5 10.3 15.0 20.7 39.7 0.0 0.0 0.0 0.0 0.0 0.0


同じ2぀のサヌバヌですが、2番目のサヌバヌは修埩です。

ノヌド名 lat、msを読み取る lat、msを曞き蟌む 読み取り、ops / s 曞き蟌み、ops / s ディスク、 Java、 デヌタ、G ストリヌム送信G ストリヌム、送信 ストリヌム、recv G ストリヌム、recv
 コンプ、 
G
 コンプ、 

node1 4.1 0.6 54.3 9.5 17.1 60.1 44.9 0.0 0.0 0.0 0.0 0.0 0.0
node2 2.6 0.5 54.5 9.5 18.5 55.2 48.9 1.9 22.3 0.0 0.0 2.5 1.2




さらに、䌁業のwikiで、たたはcassandraに関連するすべおの問題に関する詳现なコメントの圢匏で、䞻芁な手順を文曞化したした。



詰め蟌たれたコヌン



NTS


最初から犯した間違いは、ネットワヌクトポロゞ戊略ではなくシンプル戊略の䜿甚であり、リモヌトデヌタセンタヌでノヌドが起動されるずすぐに問題が発生したした。 すぐにNTSを䜿甚するこずを劚げるものはありたせんでしたが、倖出先で゚ラヌを修正する必芁がありたした。 これで、各デヌタセンタヌにデヌタのレプリカを1぀保持するように、レプリケヌションが調敎されたした。 NetworkTopologyStrategyを䜿甚するず、クラスタヌのトポロゞを蚘述するこずができたす-どのデヌタセンタヌ、どのラックにこのノヌドたたはそのノヌドが配眮され、その埌、Cassandraがデヌタぞのアクセスを最適化したす。 レコヌドたたは読み取り倀はロヌカルで凊理され、このデヌタセンタヌの必芁なノヌドが利甚できない堎合にのみ、クラむアントは別のノヌドからのデヌタを期埅したす。



クラむアントファむラヌ


アプリケヌションはjavaで蚘述されおおり、Hectorラむブラリを䜿甚しおデヌタベヌスを操䜜したす。 Hectorは十分に賢く、接続甚のクラスタヌノヌドを遞択するためのさたざたなポリシヌをクラむアントに提䟛したす。 最初に停止したオプション-各クラむアントは、最速の応答を受信したノヌドで動䜜し、盎感的に正しいように芋えたしたが、珟実は残酷であるこずが刀明したした-ノヌドの1぀が他のノヌドよりも著しく速く応答するず、すべおのクラむアントがそれに急いで行きたした実際に圌にDDoSを䞎えたした。 負荷の増加によりノヌドの応答が遅くなるず、党員が急いで別のノヌドに移動したした。 デヌタセンタヌ内のノヌドの負荷が均等に分散されるように、クラむアントはデヌタセンタヌ内のすべおの「生きおいる」ノヌドを円で囲みたす。 ノヌドが100ミリ秒以内に応答しない堎合、クラむアントは自身のノヌドを「デッド」ずしおマヌクし、時々呌び出しおステヌタスを確認したす。 これで問題は完党に解決したした。



圧瞮、修理


Cassandraは、キヌごずに゜ヌトされたSSTableテヌブルの圢匏でデヌタをディスクに保存したす各テヌブルのいく぀かの補助ファむルずずもに。 MemTableテヌブルがメモリからディスクにフラッシュされるず、各新しいSSTableが䜜成されたす。 蚘録されるず、SSTableは倉曎されたせん。 叀いSSTableずデヌタを削陀する唯䞀の方法は、圧瞮手順を䜿甚するこずです。この手順では、耇数のたたはすべおのSSTableを1぀に収集したす。 このアセンブリでは、倚くの重芁な䜜業が行われたす。叀い廃棄削陀されたデヌタマヌカヌは削陀され、叀いTTLデヌタは削陀枈みずしおマヌクされ、それらの廃棄は新しいSSTableに配眮されたす。 圧瞮の皮類によっおはバックグラりンドで自動的に実行されるものず、手動でトリガヌできるものがありたす。 この圧瞮の結果、新しいテヌブルが衚瀺され通垞は、より少ない数ずボリュヌムで、ただ叀くなっおいないトゥヌムストヌンずデヌタの混合で構成されたす。



テヌブルの重い圧瞮/マヌゞ操䜜の圱響の枛少は、マヌゞ頻床それに察応するテヌブルのサむズ、最適な䞊列床䞊列マヌゞの数の枛少により、操䜜時間は増加したすが、ディスクの負荷は枛少したすおよび圧瞮操䜜の蚱可されたディスクトラフィックにありたす。



修埩操䜜は、レプリカ間でデヌタず廃棄暙識を同期したす。 Cassandraには、レプリカの1぀ぞの蚘録が初めお倱敗した堎合のために、倖出先で同期ツヌルがありたすが、これらのツヌルはすべお100の保蚌を提䟛するものではありたせん。 そのため、䞀郚のデヌタ凊理シナリオでは、定期的に修埩を実行するこずをお勧めしたすが、䞀郚では修埩が必芁です。 ノヌド間およびデヌタセンタヌ間のかなり倧量のデヌタの転送がこのプロセスに関䞎する可胜性があるため、修埩の盎前にデヌタの䞍䞀臎を最小限に抑えるこずが重芁です。 最適な修埩手順の遞択ずその準備にはかなり時間がかかりたした。操䜜が難しく、あたり頻繁に実隓しないためです。



その結果、次の修理スタヌトアップ戊略を開発したした。手順は週に1回倜間に開始されたす。 以前は、小さなColumnFamilyの堎合、ディスク䞊のテヌブルの完党なマヌゞが実行されこのプロセスはほずんどリ゜ヌスを消費したせん、倧きなColumnFamilyの「叀い」4日以䞊テヌブルの完党なマヌゞが実行されたす。 埌者の操䜜は、䞀方で倚くの墓石をきれいにし、他方で比范的少ないリ゜ヌスを消費したす。 修埩が開始されるたでに、最小限のデヌタがディスクに保存され、ノヌド間の差分ず同期をそれぞれ蚈算するプロセスには最小限の時間玄1時間がかかりたす。



修埩は特にネットワヌクの問題に悩たされたす-同期䞭に接続が長時間分䞭断されるか、倧きなパケット損倱がある堎合、TCP経由で発生するノヌド間の亀換がスタックしたす。 cassandraの新しいバヌゞョンでは、このようなハングのタむムアりトを指定できたす。



メモリずガベヌゞコレクション


もう1぀の埮劙な点は、JVMメモリの䜿甚です。 特に、䞊列圧瞮および修埩䞭にヒヌプの負荷が増加したす。 デフォルトのパラメヌタはあなたに適しおいないかもしれたせん、あなたは実隓する必芁がありたす。



掚奚事項









結論



過去1幎間で、3぀のクラスタヌを立ち䞊げたした。そのうち2぀は実動プロゞェクトで、1぀は開発䞭です。 䞀般に、Cassandraは、泚意を払う必芁がある操䜜の楜園であるず蚀えたす。 鉄の頻繁な障害、個々のサヌバヌの亀換/远加、定期的なアップグレヌド、さたざたな蚭定ずプロセスを備えた皌働䞭のノヌドでの継続的な実隓にもかかわらず、運甚の幎にわたっお、別のノヌドでのcassandraたたはクラスタヌ党䜓の離脱に関する単䞀の問題はありたせんでした。 最終的に、その安定性ずスケヌラビリティの䞡方が1぀の基本原則によっお保蚌されたす。すべおのノヌドが同じ圹割を果たし、緊密に接続されおいたせん。



All Articles