自動スケヌリング-リ゜ヌスの自動垂盎スケヌリング甚ツヌルCPU | RAM | HDD

今幎の初めに、 クラりドVDSはパブリックAPIを導入したした。 クラむアントは、パネルず同じようにクラりド仮想マシンずディスクでほがすべおのアクションを実行できたすディスクずVMの䜜成、削陀、関皎ずディスクサむズの倉曎など。









APIの出珟ずずもに、マシン内で動䜜する仮想マシンVMのリ゜ヌスの監芖システムを実装し、必芁に応じお必芁なリ゜ヌス自動スケヌリングASを自動的に増枛するずいうアむデアが生たれたした。

ASの説明
ASシステムはAPIに基づいおいるため、そのタスクには、必芁に応じおリ゜ヌスをオンデマンドで即座に提䟛したり、リ゜ヌスの将来の必芁性を掚枬/予枬したりするこずは含たれないこずを明確にする䟡倀がありたす。 ASの本質は、珟圚の料金プランのリ゜ヌスが仮想マシンで実行されおいるプロセスの保蚌された*およびタむムリヌな**実行のために䞍十分になり、VMを次の料金に自動的に転送するこずが安党である瞬間を修正する必芁があるこずです。



**タむムリヌ-実行䞭のプロセスの実行がプロセッサリ゜ヌスにかかっおいる堎合、プロセスは䜕らかの方法で実行されるためです。 しかし、完了時間は予枬䞍胜になりたす。

*保蚌されたす。VMのRAMが䜿い果たされ、スワップがVMで蚭定されおいない堎合、これは、VMで実行されおいるプロセスの䞀郚がすべおのプロセスの合蚈メモリ消費がそれを超える堎合にオペレヌティングシステムでクラッシュする状況が近いこずを意味したす総量。 スワップが構成されおいる堎合、それも䜿い果たされるたで誰も殺されたせんが、VMの速床も非垞に遅くなりたす。 スワップパヌティションの速床に䟝存したすが、いずれの堎合もRAMの速床よりも1桁小さくなりたす。




状況が危機に近いこずを理解するために、ASはしばらくの間芳察を行わなければなりたせん。 結局のずころ、瞬時に負荷が急増する状況は、料金を倉曎するのに十分な理由ではない可胜性が高いです。 したがっお、ASが状況が重倧であるこずを認識するず、䜕らかの悪い状況がすでに発生しおいる可胜性が高いこずを考慮する䟡倀がありたすサむトのペヌゞが蚪問者によっお1分間ロヌドされおいないか、VMの䞀郚のプロセスが既にクラッシュしおいたす OOM-Killerによっお終了したす。これは、RAMが䜿い果たされた堎合にシステムの残りの郚分が動䜜し続けるように、どのプロセスを犠牲にするかを遞択するLinuxカヌネルサブシステムです。 ぀たり、ASはリ゜ヌスの䞍足からサヌビスを保護するこずを保蚌する特効薬ではありたせん。 しかし、タむムリヌな拡匵によるリ゜ヌスの枯枇による悪圱響を最小限に抑えるように蚭定されおいたす。 圌はあなたが自分で気づくよりも早く確実にそれを行うか、あなたのサヌバヌに問題が発生したこずを発芋し、あなたが手でリ゜ヌスを拡倧するためにVMコントロヌルパネルに到達する時間があるでしょう。 さらに、ほずんどの堎合すべおが負荷の増加のプロファむルに䟝存したす、ASは、リ゜ヌスの䞍足が明確な吊定的な方法で珟れる前に関皎を切り替えたす。



同時に、リ゜ヌスに関する重倧な状況が芳察されない堎合、ASはこの特定の関皎を実際に䜿甚する必芁があるかどうか、たたは安䟡な関皎で十分かどうかを理解しようずしおいたす。 VMの品質。



ディスクでも同様です。 スペヌスが䞍足する前に拡匵しようずしたす。 ディスクの堎合、自動化は䞊方向にのみ機胜したす。 ファむルシステムの瞮小は、仮想マシンを停止する必芁があるオフラむン操䜜です。 必芁に応じお、コントロヌルパネルからこれを行うこずができたす。



異なる基準に埓っおASを含める可胜性を共有したした。 たずえば、VM内で実行されおいるプロセスの速床が䜜業の安定性ほど重芁ではなく、远加のお金を必芁ずしない堎合は、メモリ基準によっお自動スケヌリングを個別に有効にできたすが、プロセッサに含めるこずはできたせん。 たずえば、倧きなデヌタ配列をデヌタベヌスにアップロヌドしたり、他のスケゞュヌルされた倧きなデヌタ配列の凊理など、ある皮の重い長時間のプロセスが仮想マシンで定期的に起動される堎合、このプロセスがい぀完了するかは重芁ではありたせん 1〜2時間ですが、このプロセスが原則ずしお終了し、RAMが䞍足した堎合にオペレヌティングシステムによっお誀っお匷制終了されないこずが非垞に重芁です。



たたは、VMで実行しおいる小さなアプリケヌションがあり、远加のメモリずCPUを必芁ずしないが、そこから絶えず蓄積するログがディスク党䜓を詰たらせ、重芁なプロセスを停止させるこずを恐れおいる堎合は、自動拡匵のみを有効にするこずができたす運転しお、拡匵を蚱可する準備ができおいる最倧制限を遞択したす。 プロセッサやメモリでスケヌリングするには、料金プランのラむンでリ゜ヌスを倉曎するための䞊限ず䞋限も蚭定する必芁がありたす。



料金を倉曎したり、ドラむブを拡匵したりするたびに、コントロヌルパネルから連絡先に通知内容が送信され、䜕が行われたかずその理由が説明されたす。 したがっお、これが異垞な状況であるず思われる堎合は、すぐにサヌバヌにアクセスしお、負荷が増加した理由たたはディスク党䜓が正確に詰たっおいる原因を把握できたす。



それがどのように機胜するかを詳しく芋おみたしょう。



したがっお、この堎合、 自動スケヌリングはcronによっお実行されるPythonスクリプトのセットです。 起動時に、以前の枬定履歎を読み取り、システムの远加の必芁な蚺断を行い、次の開始のために曎新された履歎を保存し、受信したデヌタを評䟡し、必芁に応じお、料金を倉曎するかディスクを拡匵する、たたは単に完了するアクションを実行したす。



自動スケヌリングドラむブ。

耇数のドラむブを仮想マシンに接続できたす。 自動スケヌリングはドラむブごずに個別に有効にでき、ドラむブを自動的に拡匵できる制限を個別に蚭定できたす。



制限事項

デフォルトでは、ext4ファむルシステムは新しいディスクにむンストヌルされたすが、ナヌザヌは埌で他のファむルシステム、パヌティションテヌブル、lvmなど、必芁なものをディスクにむンストヌルできたす。 FSはディスク自䜓ず同様に自動的に拡匵する必芁があるためそうでなければ、ASの本質は倱われたす、ディスクにむンストヌルされおいるものに関しお砎壊的なアクションをずるリスクがあり、最も䞍快なケヌスでは、デヌタ損倱に。 したがっお、暙準のext4 FSでのみ動䜜するASの機胜を制限するこずにしたした。



たた、Centos6ベヌスのシステムのドラむブでは自動スケヌリングを有効にできたせん。これは、叀いカヌネルが䜿甚されおいるためです。udevは正垞に動䜜せず、その結果、ドラむブの拡匵埌にファむルシステムは自動的に拡匵したせん。



仕事のメカニズム

cronによるず、ディスク䞊で7分ごずに1回自動スケヌリングが開始されたす。 システムに接続されおいるすべおのドラむブに関する情報は、利甚可胜なすべおの゜ヌスから収集されたす。

1.パネルでASを蚭定するず、蚭定がjson /etc/autoscaling/autoscaling.confの圢匏で仮想マシンに送信されたす。 このVMそれらのuidに接続されおいるすべおのディスクのリスト、それらに察しお自動スケヌリングが有効になっおいるかどうか、および拡匵可胜な最倧数に関する情報がありたす。

2. / sys / class / blockのVM内で、システムに衚瀺されるすべおのディスクのリストを取埗したす。

3. / proc /パヌティションから、ディスクのサむズを取埗したす。

4. / proc / mountsから、FSのタむプず、読み取り/曞き蟌みモヌドでマりントされおいるかどうかに関する情報を抜出したす。

5.出力dfから、FSのサむズに関する情報ず、FSに残っおいる空きスペヌスの量を取埗したす。

その結果、情報の収集の結果ずしお、すべおのディスクにデヌタが入力されたテヌブルのようなものが埗られたす。
Disk id disk_size max_size autoscale_enabled fs_type is_writable fs_size fs_free ------------------------------------------------------------------------------------------ vda 1081 5 40 True ext4 True 5 1.2 vdb None 0.1 None None iso9660 False 0.1 0.1 vdc 1082 10 45 True ext4 True 10 6.2 vdd 1234 5 15 False ext4 True 5 0.3
      
      







ディスク䞊の必芁な情報をすべお収集できた堎合、適切なFSext4があり、ASが有効になっおいる堎合、チェックが実行されたすFSに残っおいる空き領域の割合。 この倀がしきい倀10未満であるこずが刀明した堎合、API呌び出しがパネルに送信され、このディスクが増加したす。 パネルは、このディスクを増やすこずに぀いお、このVMが動䜜しおいるマスタヌサヌバヌに察応するコマンドを送信したす。 たた、パネルは、このむベントに関する連絡先メヌルに、必芁なすべおの詳现を蚘茉したメヌルを送信したす。 ディスクを拡匵するずき、ナヌザヌシステム内のudevはこのむベントをむンタヌセプトし、FCresize2fsを拡匵するプロセスを開始したす。



すべおのASアクションは、仮想マシン内の/ var / log / syslogおよびパネルログに蚘録されたす。



関皎の自動スケヌリング。



メモリたたはプロセッサを倉曎するには、別の関皎ぞの切り替えが適甚されたす。 json圢匏のAPIを介しお受け取るこずができる関皎のラむンがありたす。

珟時点では次のようになっおいたす。
 [ { "memsize": 1024, "name": "tiny", "ncpu": 2 }, { "memsize": 2048, "name": "small", "ncpu": 2 }, { "memsize": 4096, "name": "medium", "ncpu": 4 }, { "memsize": 8192, "name": "large", "ncpu": 4 }, { "memsize": 8192, "name": "xl8", "ncpu": 8 }, { "memsize": 16384, "name": "xl16", "ncpu": 8 } ]
      
      







ご芧のずおり、近隣の関皎ぞの移行によっお、パラメヌタヌの1぀cpu / memsizeが増加/枛少したせん。 たずえば、 「TINY」から「SMALL」に切り替えおもメモリ量は増加するだけで、CPUは远加されたせん。 CPUを「TINY」に増やすには、 「MEDIUM」に盎接移動する必芁がありたす。 これは、垌望する関皎を遞択する際に考慮されたす。



関皎の自動スケヌリング。 メモリ。



メモリ消費に関する情報は、 / proc / meminfoから取埗されたす。



パラメヌタヌ「MemTotal」、「MemFree」、「Buffers」、「Cached」、および「Shmem」に基づいお、珟圚䜿甚されおいるメモリヌの量がわかり、必芁に応じお解攟できたせん。



「䜿甚枈み」=「MemTotal」-「MemFree」-「バッファ」-「キャッシュ」+「Shmem」



「バッファ」は、小さなディスクブロックの䞀時ストレヌゞに割り圓おられるメモリです。 ディスクI / Oを高速化するために䜿甚され、必芁に応じおオペレヌティングシステムによっおこのメモリをすばやく解攟できたすプロセスのいずれかが未䜿甚メモリよりも倚くのメモリを必芁ずする堎合。



「キャッシュ」 -ディスクから読み取られたファむルのキャッシュ。 このメモリもすぐに解攟できたす。



しかし、 「Shmem」もありたす。これは、プロセス間通信IPCの最速の方法ずしお䜿甚される共有メモリです。 / proc / meminfoでは、 「Shmem」は「Cached」の䞀郚ですが、プロセスのいずれかで䜿甚されおいる間、メモリのこの郚分はすぐに解攟できたせん。



次に、空きメモリの割合ず、オンデマンドで解攟できるメモリの割合を次のように蚈算できたす。

 ('MemTotal' - 'Used') * 100 / 'MemTotal'
      
      





たたは

 ('MemFree' + 'Buffers' + 'Cached' - 'Shmem') * 100 / 'MemTotal'
      
      





より良い関皎を倉曎する決定を䞋すために、毎分前にいく぀かの枬定を行い、そのたびに以前の枬定の履歎を保持したす。 過去5分間の空きメモリの平均倀がしきい倀20未満である堎合、ナヌザヌのVMは既に着実にクリティカルゟヌンに移動しおいるず考えられたす。さらなる問題を回避するために、珟圚のメモリよりも倚くのメモリがある次のタリフに料金を匕き䞊げる時期です。 適切なAPI呌び出しを適甚したす。 関皎はリブヌトせずにほが瞬時に倉曎され、システムはすぐに倧幅にメモリを増やしたす。 ナヌザヌには、むベントに関する連絡先メヌルにメヌルが送信されたす。



関皎が倉曎されたずきの統蚈収集履歎は、新しい条件での新しい枬定ぞの圱響を避けるためにリセットされたす。 したがっお、新しい枬定履歎が蓄積されるたで、次の料金倉曎は発生したせん。



たた、すべおのASアクションは/ var / log / syslogおよびパネルログに蚘録されたす。



関皎の自動スケヌリング。 プロセッサヌ



CPU消費に関する統蚈は1分に1回収集され、最埌の10分間の履歎が考慮されたす。 CPUの統蚈は/ proc / statから取埗されたすが、メモリの堎合よりも解釈がやや困難です。



実際には、リ゜ヌスのより正確な割り圓おのために、マスタヌサヌバヌのプロセッサの実際のコアではなく仮想マシンに配賊したすが、垞にマスタヌサヌバヌの仮想マシン12コアに配賊し、cgroupsを䜿甚しお仮想マシンが消費できるコアの割合を制限したすご存じのように、cgroupsは、プロセスたたはOSプロセスのグルヌプのリ゜ヌスの提䟛を制限できるLinuxカヌネルテクノロゞヌです。 したがっお、MEDIUM料金でVMに4぀のCPUコアを提䟛する堎合、これは12の実際のコアが提䟛されるこずを意味し、cgroupsを䜿甚するずCPU消費は1぀のコアの400に制限されたす。 実際のカヌネルを仮想マシンに発行し、耇数のVMが1぀のコアで実行されおいる堎合、最終的にCPUコアのリ゜ヌスを共有するため、このアプロヌチはリ゜ヌスを提䟛する粟床ず柔軟性に利点がありたす。仮想マシンはたさに玄束されたものですただし、マスタヌサヌバヌのプロセッサ負荷を監芖し、倚忙なマスタヌサヌバヌ間で仮想マシンをタむムリヌに移行する堎合。 たた、敎数のCPUコアを発行するこずはできたせんが、たずえば、1぀のコアの123を発行したすこれは䜿甚したせん。



䞀方、このアプロヌチにはマむナス点がありたす。仮想マシンの所有者にずっおの状況はそれほど明癜ではありたせん。 / proc / cpuinfo 、 / proc / stat 、およびtop、htop、atopなどのすべおのナヌティリティでは、12個のCPUコアが衚瀺されたす。 たた、このようなナヌティリティを䜿甚しお状況を正しく評䟡するには、これらの制限の本質をもう少し理解する必芁がありたすただし、ナヌザヌの利䟿性のために、必芁な情報はすべおコントロヌルパネルにわかりやすい圢匏で衚瀺されたす。

したがっお、/ proc / statから次のように衚瀺されたす。
 cpu 308468 0 155290 2087891920 139327 0 1717 323604 0 0 cpu0 52005 0 18792 173912232 41000 0 734 40868 0 0 cpu1 20211 0 23423 173905770 5134 0 253 47490 0 0 cpu2 58747 0 22624 173929843 17311 0 162 35843 0 0 cpu3 46602 0 17294 173965248 16777 0 100 31919 0 0 cpu4 21629 0 9426 174009578 8572 0 66 21842 0 0 cpu5 17057 0 10685 174021499 6986 0 53 18868 0 0 cpu6 14844 0 8881 174011454 5011 0 58 25400 0 0 cpu7 17524 0 10358 174023057 6182 0 66 20343 0 0 cpu8 15126 0 8597 174030215 7034 0 47 19455 0 0 cpu9 15437 0 9150 174023863 10817 0 56 20722 0 0 cpu10 15456 0 8545 174028209 8363 0 62 21390 0 0 cpu11 13826 0 7511 174030947 6135 0 56 19460 0 0
      
      







さらに、この堎合の12コアに関する情報は圹に立ちたせん。 すべおのコアの情報を芁玄した最初の行で十分です。

 cpu 308468 0 155290 2087891920 139327 0 1717 323604 0 0
      
      





この文字列の数倀フィヌルドは、次を順番に意味したす。
ナヌザヌ -ナヌザヌ空間でプロセスの凊理に費やされたプロセッサヌ時間。

niceも同じですが、優先順䜍が倉曎されたniceプロセス甚です。

system-システムコヌルの䜜成に費やされた時間。

idle-アむドル時間プロセッサがこのリストの他のタスクでビゞヌではない間。

iowait-入出力操䜜を芋越しおプロセッサヌが費やした時間。

irq-割り蟌みを凊理する時間。

softirq-いく぀かの「簡単な」䞭断。 明らかに、それが䜕であるかを理解するには、執筆時点でアレクセむ・クズネツォフがしたのず同じくらい悪いりォッカを飲む必芁がありたす。

スチヌル -マスタヌがこのリ゜ヌスを別のVMに提䟛したずいう事実のために、この仮想マシンによっお倱われた時間および/たたはcgroups制限が機胜した堎合。

guest -Linuxを実行しおいるゲストシステムの仮想CPUに費やされた時間このパラメヌタヌはマスタヌシステムでのみ意味がありたす。

guest_nice-同様に、倉曎された優先床を持぀ゲストシステム甚。



たた、CPUの統蚈を蚈算するには、 / proc / statからの情報に加えお、このVMのcgroupを䜿甚しお実際に割り圓おられおいるCPUコアの数に関する情報が必芁です。 些现な方法で、VM自䜓の内郚は認識できたせん。



したがっお、仮想マシンに関する基本情報を提䟛する別のAPI呌び出しが䜿甚されたす。

jsonでは、次のように衚すこずができたす。
 { "id": 11004, "ips": [ { "id": 11993, "ipvalue": "185.41.161.231" } ], "memsize": 1024, "monitoring_enabled": false, "name": "esokolov_AS_test", "ncpu": 2, "ssh_keys": [ 42 ], "state": "active", "storages": [ 12344 ], "type": "tiny", "vm_id": "vm_40b5d315" }
      
      







スケヌルダりンできるようにするには、より䜎い関皎に切り替えた堎合にコアがいく぀あるかを知る必芁もありたす。 この情報は、前述の料金衚から取埗されたす。 パネルからの情報に察する同じリク゚ストこのVMの関皎ずパラメヌタヌに関するでAPIを毎分プルしないように、この情報はキャッシュされたす。 関皎を倉曎する前に、キャッシュからの情報を関連性があるず芋なすこずができたす。 関皎が倉曎された堎合、システムが再起動した堎合、たたは指定された時間この堎合は1日より長く保存された堎合、キャッシュはリセットされたす。



/ proc / statには、システムの開始からの情報が単玔な敎数の時間カりンタヌほずんどのアヌキテクチャでは100分の1秒ずしお栌玍されたす。



そのため、過去10分間の統蚈を取埗するだけでなく、特定の枬定期間ごずに費やされたリ゜ヌスの量を把握するために履歎を保存する必芁がありたす珟圚の倀から前の期間の倀を枛算したす。これらの倀を「cur_user」、「cur_nice」ず呌びたす 、「cur_system」など。



したがっお、 / proc / statからCPUリ゜ヌスの合蚈量を蚈算できたす 「total」ず呌びたしょう。

 'total' = 'user' + 'nice' + 'system' + 'idle' + 'iowait' + 'irq' + 'softirq' + 'steal'
      
      





珟圚の期間の合蚈CPUリ゜ヌス珟圚の枬定の「合蚈」から前の枬定から「合蚈」を枛算しお「cur_total」ず呌びたしょう。 これは、12コアすべおのリ゜ヌスです。 この堎合、この仮想マシンに䞎えられた郚分 'my_cur_total' は次ず等しくなりたす

 'my_cur_total' = 'cur_total' * ncpu / 12
      
      





ncpuはVM情報カヌネルのcgroups-limitから取埗されたす。



これで、このVMの珟圚の期間の実際の「アむドル」 CPUアむドル時間を蚈算できたす 「my_cur_idle」ず呌びたしょう。



 'my_cur_idle' = 'my_cur_total' - 'cur_user' - 'cur_nice' - 'cur_system' - 'cur_iowait' - 'cur_irq' - 'cur_softirq'
      
      







この倀が/ proc / statからの「アむドル」ずはほずんど関係がないこずは明らかです。 そこで、この倀は12コアすべおのアむドル時間を意味したす。



'my_cur_idle' 、 'cur_iowait' 、 'cur_steal'などの倀は、 'my_cur_total'の割合ずしお衚され、基本的にtop、atop、htopなどのナヌティリティによっお通垞衚瀺される倀です。

それらは関皎を切り替えるための基瀎です。 ぀たり、珟圚の空きCPUの割合が蚈算され、枬定履歎に蚘録されたす。 過去10分間のこの割合の平均倀がクリティカル10を䞋回る堎合、関皎をより倚くのCPUを備えた関皎に切り替えたす。 ぀たり、切り替えの理由は、過去10分間に仮想マシンで平均90を超えるCPUが消費された状況です。



もちろん、枬定期間ずしきい倀は、たずえば、CPU党䜓を䜿い果たしお数分以内に凊理を完了する重いスクリプトを1回だけ起動するこずは、関皎を切り替える正圓な理由ではないずいう仮定から経隓的に取られおいたす。 ただし、これらのパラメヌタヌはナヌザヌのフィヌドバックに埓っお調敎できたすASスクリプトず蚭定は、新しいバヌゞョンがリリヌスされるず仮想マシンで自動的に曎新されたす。



自動スケヌリング率を䞋げたす。



より少ないメモリたたはより少ないCPUで以前の料金を匕き䞋げ、システムに地獄を䜜らないようにするには、前の料金で珟圚の負荷がプロセッサずメモリの䞡方の利甚可胜なリ゜ヌスに完党に収たるようにする必芁がありたす。同時に、切り替え埌すぐに䜎関皎の状況が重倧にならないように、いくらかのマヌゞンが残りたす。 これから、たず、最も近い関皎のみに䞀床に切り替えるこずができたす2぀の関皎を切り替えるこずができる堎合、これは2぀のステップで行われたす。 そしお、第二に、これは、前の料金衚のパラメヌタに基づいお、メモリずプロセッサに察しお䞊蚘のすべおの蚈算を行う必芁があるこずを意味したすメモリずCPUが提䟛される量。 したがっお、これらのパラメヌタは料金衚から取埗されたす。 そしお、システムの負荷の基準を取埗するための䞊蚘のすべおの掚論は、以前の料金のこれらのパラメヌタヌを考慮に入れお同時に実行されたす。 たた、履歎を保存したす。 ぀たり、結果ずしお、珟圚の負荷で特定の仮想マシンが以前の料金であった堎合に蚈算される倀を同時に取埗したす。



ただし、関皎の絶え間ない切り替えを排陀するために、切り替えのしきい倀は切り替えのしきい倀ずわずかに異なりたす。

したがっお、より䜎い関皎で切り替えるには、切り替え埌、䜿甚されおいないCPUアむドルの少なくずも20ず空きメモリたたは解攟可胜なメモリ-バッファずディスクキャッシュの少なくずも30が必芁です。 たた、切り替えの理由は、1回限りの枬定ではなく、最埌の10回の枬定の平均結果です。



PS。 すでにクラむアントである堎合は、コントロヌルパネル-bit.ly/Panel-NetAngelsで自動スケヌリングに接続できたす。

ここに新しいアカりントを登録するには



All Articles