Amazonのサヌバヌを「バックアップ」しおピラニアを防ぐ方法

人気のあるAmazonクラりドプロバむダヌがホストするWebプロゞェクトの所有者の倚くは、おそらく、効率的で信頌性の高いWeb゜リュヌション構成の䜜成方法、マシンのバックアップ方法、およびサヌバヌが配眮されおいるデヌタセンタヌの厩壊に察凊する方法に぀いお考えるでしょう。 残念ながら、クラりドホスティングの公匏ドキュメントは 、Webサヌビスの信頌性ず内郚実装のトピックに぀いおはややこしいです。したがっお、操䜜ず軍隊の工倫で、独自の戊闘経隓に頌らなければなりたせん。



クラりド内のすべおが非垞に信頌性が高く、快適に眠るこずができるずいう誀解に察する珟圚の反察により、状況は悪化しおいたす。ハヌドドラむブは「チタン」で䜜られおおり、ネットワヌクトラフィックは「金線」に沿っお流れ、゚ンゞニアは小䟿噚を半分に切るタフな男たちがいたす- クラりドからの掚奚事項 「十分な信頌性ずDC間での高速チャネルのサヌビスを提䟛したす。プロゞェクトアヌキテクトのタスクは、9぀の技術を適切な量にするこずにより、技術を結合するこずです。」



蚘事では、6か月間のサヌビスの動䜜、Webプロゞェクトの信頌性ず生産性を確保するためのEBSドラむブのアヌキテクチャ゜リュヌション、および日垞業務で䜿甚する特定のバックアップ手法に関する芳察結果を共有したいず思いたす。





EBSディスクの信頌性-RAID1たたは「さらに悪い」



正盎に蚀うず、EBSディスクに関するAmazonの公匏ドキュメントから、RAID1よりも信頌性が高いかどうかはただわかりたせんでした。ディスクのボリュヌムの機胜䟝存性、ディスクの最埌のスナップショットの時間、りィザヌドのひげの髪の毛の数、月の満ち欠けは楜芳的ではありたせん

「ボリュヌムの耐久性は、ボリュヌムのサむズず、前回のスナップショット以降に倉曎されたデヌタの割合の䞡方に䟝存したす。 䟋ずしお、最新のAmazon EBSスナップショット以降の倉曎デヌタが20 GB以䞋で動䜜するボリュヌムは、0.1から0.5の幎間故障率AFRを予枬できたす。ここで、故障ずはボリュヌムの完党な損倱を指したす»



Amazonの欧州DCでの最近の事故では、デヌタセンタヌの停電のため、2぀のディスクが゜フトりェアRAID10からすぐに飛び出したした。 EBSディスクが突然「クラッシュ」し、「残念ながらデヌタが倱われたした」ずいう件名でクラむアントに手玙が送信されたずいう䞍気味なメッセヌゞがネットワヌクに衚瀺されるこずがありたす。ディスクが故障する1分前にスナップショットを取るこずを公匏に掚奚したす:-)スナップショットメカニズムは、非垞に信頌性の䜎いEBSドラむブの障害の「セヌフティネット」専甚に登堎したした。



独自のプラむベヌトむメヌゞを䜜成するために䜿甚されるパブリック仮想マシンには、EBSドラむブが1぀しかありたせん。これはRAIDになく、ルヌトパヌティションにありたす。 そしお、゜フトりェアRAIDにルヌトパヌティションを持぀マシンをロヌドする-ファむルを䜿わずに穏やかに眮くのは簡単ではなく、時間がかかりたす。



それにもかかわらず、半幎間、Amazonで1台のディスクが飛び出したこずはなく玄50台ありたす、 萜雷埌の停電をカりントせず、倚かれ少なかれ信頌できる「RAID1」ドラむブノック、ノックずしお扱うこずができたす;同じデヌタセンタヌにある1぀のデバむスぞの耇補、 s3に察する信頌性は劣りたす異なるデヌタセンタヌの2぀のデバむスに远加で耇補され、䞀般にブロックデバむスではありたせんが、通垞のハヌドドラむブの10倍の信頌性がありたす。





゜フトりェアRAIDず䜎EBSパフォヌマンス



今幎の初めにAmazonに移行した埌、EBSディスクのパフォヌマンスがかなり䜎䞋したした。これは、MySQLを搭茉したマシンで特に顕著でした。 RDSでアむデアを「芋た」AmazonはEBSディスクの総量に応じお自動的にデヌタベヌス情報を゜フトりェアRAIDに配眮したす軍隊の工倫を䜿甚しお、EBSディスクから䜜成された゜フトりェアRAID10Linuxではmdadmにデヌタを転送したした

cat /proc/mdstat

Personalities : [raid10]

md0 : active raid10 sdo[0] sdj[8](S) sdi[7] sdh[6] sdg[5] sdn[4] sdm[3] sdl[2] sdk[1]

629145344 blocks 64K chunks 2 near-copies [8/8] [UUUUUUUU]







ああ、予備ディスク、ご芧の通り、私たちは:-) 'sdj [8]S'を䜿甚しおいたす。 それでも同じように、圌らはフォヌルトトレランスのレベルを䞊げるために襲撃を行うこずにしたした。

RAIDぞのデヌタの移行埌、マシン䞊のディスクサブシステムのパフォヌマンスの問題は気になりなくなりたした。





クラスタファむルシステムずEBSドラむブ



なぜなら メむンサむトwww.1c-bitrix.ruはWebクラスタヌ構成で動䜜したす。2台のWebマシン、デヌタベヌスマスタヌ+スレヌブを備えた2台のマシン-バランサヌnginxの背埌に、クラスタヌファむルシステムを䜿甚したかったのです。 OCFS2やGFS2など。 しかし、EBSディスクを耇数の仮想マシンに同時にマりントできないこずが刀明したした。 そのため、コンテンツクラスタリングにはcsync2ナヌティリティを䜿甚したす。これは、アドむンによっお、 inotifyに基づいお頻繁に曎新される重いフォルダヌを「迅速に」同期するように匷制されたす必芁に応じお詳现を説明したす。





バックアップEBSドラむブ



仮想マシンディスクは非垞に簡単にバックアップできたす。 この目的のために、ブロックデバむススナップショットを䜜成するツヌルが䜜成されたした。

ec2-create-snapshot vol-a5rtbvwe





操䜜は非垞に迅速数秒に開始し、スナップショットのs3ぞのロヌドは、ディスクサむズずAmazonの負荷に応じお特定の時間最倧数十分続きたす。



私たちは倧人であり、ディスクの党䜓的なスナップショットは次の堎合に成り埗るこずを理解しおいたす。

  1. ドラむブは事前にマりント解陀されおいたす「umount -d / dev / sdh」。
  2. サヌバヌは以前に停止されおいたす。
  3. ファむルシステムは凍結されおいたす。 この堎合でも、アプリケヌションにデヌタをディスクにフラッシュするように指瀺する必芁がありたす。




それ以倖の堎合、「突然の電源オフ埌のように」ディスクのスナップショットを取埗し、マシンの起動時にディスクを凊理する必芁がありたすfsck-最新のゞャヌナリングファむルシステムext3、ext4、xfs など のおかげで、気付かれないために頻繁に発生したす雑誌をする。 ラむブマりント解陀なしext3およびxfsを䜿甚しおディスクのスナップショットの䜜成をテストしたした-ログの再生を䞀時停止した埌、ディスクスナップショットから䜜成がマりントされお動䜜したす。



ファむルシステムを「フリヌズ」および「フリヌズ」する


「サスペンション」をサポヌトするファむルシステムずしお、 xfsを遞択したした。 このFSはAmazon によっお掚奚され 、 ec2-consistent-backupタむプの完党なスナップショットを䜜成するナヌティリティによっお䜿甚されたす

xfs_freeze -f | -u mount-point





実際、「xfs_freeze -f」の埌にディスクのスナップショットが䜜成されるず、非垞に迅速にログを再生せずにマりントされたす。



CentOS6および明らかに「曎新された」カヌネルを備えた他のディストリビュヌションでは、 fsfreezeコマンドでext3 / ext4などのデフォルトのファむルシステムを「フリヌズ」するこずも可胜になりたした。 EBSディスクの党䜓的なスナップショットを䜜成するコンテキストで、このナヌティリティを十分にテストする予定です。



゜フトりェアRAIDバックアップ



論理的に考えるず、araidファむルシステムを「停止」し、b各物理raidディスクのスナップショットの䜜成を開始し、craidファむルシステムを「解攟」する必芁がありたす。

残念ながら、Amazon APIのドキュメントには、bずcの間の経過時間に関する情報が含たれおいたせん。 ただし、各RAIDディスクのAPI呌び出しからスナップショット識別子を取埗するだけで十分であり、RAIDファむルシステムを「解凍」できるこずが実隓的にわかっおいたす このナヌティリティでも同様に行われたす 。RAIDを組み立おるずきに再構築せずにピックアップされたす。 そうでなければ、再構築を開始したす。 だから私たちはやった

bxc_exec("/usr/bin/ssh remote_xfs_freezer@hostname".escapeshellarg("sudo /usr/sbin/xfs_freeze -f /xfs_raid_path"));

...

ec2-create-snapshot -

...

bxc_exec("/usr/bin/ssh remote_xfs_freezer@hostname".escapeshellarg("sudo /usr/sbin/xfs_freeze -u /xfs_raid_path"));

...

ec2-create-volume --snapshot id_of_snapshot

...

ec2-attach-volume volume_id -i instance_id -d device

...

mdadm --assemble /dev/mdN /dev/sd[az]









スナップショットMySQL



片手でMySQLデヌタをディスクにフラッシュできたすが、 FLUSH TABLES WITH READ LOCK 、巊足でファむルシステムxfs_freeze -f / pathを反転し、錻でEnterを抌しおスナップショット削陀APIを実行したすec2-create-snapshot ...別のDCぞの非同期MySQLレプリケヌションが満たされたす:-)。 興味深いのは、 xtrabackupを䜿甚したベヌススナップショットの䜜成です-タンバリンずの䞊蚘のダンスなし。





マシン党䜓を䞀床にバックアップできたす



RAID、RAIDのディスクグルヌプを個別にバックアップする堎合、構成が存圚する堎合、プロセスは安定しお透過的に動䜜したす。 ただし、AZデヌタセンタヌアマゟン間を移動する必芁がある堎合たずえば、週末にDC萜雷で:-)-むンスタンスむンスタンス、スナップショット、ディスクよりも高い抜象化レベルを入力し、ロヌルずむメヌゞのカテゎリで操䜜するのが簡単ですAMI- Amazon Machine Image 車。 APIを䜿甚しお、 タグを Amazonオブゞェクトに割り圓お、遞択をフィルタヌするこずができたす。



ロヌルを定矩したしたWebマシン、DBMS、バランサヌ、モニタリングマシン、およびバックアップスクリプトは次のように機胜したす。

  1. DBMSタグで車を探し、そのIDを取埗したす
  2. 「フリヌズ」車のホむヌル
  3. ディスクのスナップショットを䜜成したす。 スナップショットタグ「DBMS」を蚭定したす。
  4. 車のホむヌルの「霜取り」
  5. 叀いスナップショットをクリアするには 、タグず時間で遞択し、䞍芁なスナップショットを削陀したす。


ただし、 実行䞭の仮想マシンをむメヌゞ AMIむメヌゞにバックアップする方がはるかに簡単です。 同時に、蚭定ず䜜成されたスナップショットぞのパスは、マシンのディスクの䜜成元であるむメヌゞに保存され、起動時に接続されたす。

ec2-create-image id_of_instance [--no-reboot]

...

ec2-run-instances ami_image_id









違いを感じおください 1぀のコマンドで、9個のディスクのうち10個のRAIDを持぀マシンからむメヌゞを䜜成したす。 そしお、私は圌女のディスクずスナップショットのidshniksに぀いお心配しおいたせん-マシンを再䜜成するために必芁なすべおの情報はAMIむメヌゞに自動的に曞き蟌たれたす。 唯䞀のマむナスは、実行䞭のマシンのドラむブ/レむドをロックしお、そこからAMIむメヌゞを䜜成するのにかかる時間が明確でないこずです。 経隓的に、2〜5秒で十分であるこずがわかりたした。これより短い堎合、新しいマシンの䜜成時にディスク/ RAIDが回埩し始めたす。 たた、別のデヌタセンタヌAZでバックアップからむメヌゞAMIに車を乗せるこずができるのも非垞に䟿利です。

ここで、クラスタヌ構成内のすべおのマシン数癟ギガバむトのAMIむメヌゞに1日に2回バックアップを䜜成したす。 「廃止された」画像のクリヌニングは、そのスナップショットずずもに、スクリプトによっお実行されたす。

 function bxc_delete_old_instance_backups( AmazonEC2 $ec2, $instanceRole = '', $bkpsMaxCount = 3) { if (!$instanceRole || !is_object($ec2) || $bkpsMaxCount<1 ) { bxc_log_error("Bad input params: ".__FUNCTION__); return false; } $response = $ec2->describe_images(array( 'Filter' => array( array('Name' => 'tag:Role', 'Value' => 'Image:'.$instanceRole), array('Name' => 'state', 'Value' => 'available'), ) )); if ( !$response->isOK() ) { bxc_log_amazon_error($response, __FUNCTION__.":".__LINE__); return false; } if ( isset($response->body->imagesSet->item) ) { $images = array(); $snaps = array(); foreach ( $response->body->imagesSet->item as $image ) { $images[ (string) $image->name ] = (string) $image->imageId; if ( isset($image->blockDeviceMapping->item) ) { foreach ( $image->blockDeviceMapping->item as $disk ) { $snaps[ (string) $image->name ][] = $disk->ebs->snapshotId; } } } if ($images) { krsort($images); } else { bxc_log("No images with tag:Role=Image:$instanceRole"); return true; } if ( count($images) <= $bkpsMaxCount ) { bxc_log("Nothing to delete"); return true; } $imagesToDelete = array_slice($images, $bkpsMaxCount, count($images)-$bkpsMaxCount, true); foreach ($imagesToDelete as $imageName=>$imageId ) { $r = $ec2->deregister_image($imageId); if ( $r->isOK() ) { bxc_log("Image deleted ok: ".$imageId); sleep(5);//Important. Wait to ami really be deleted ;-) foreach ( $snaps[$imageName] as $snapId ) { $rr = $ec2->delete_snapshot( $snapId ); if ( $rr->isOK() ) { bxc_log("Snapshot deleted ok: ".$snapId); } else { bxc_log_amazon_error($rr, __FUNCTION__); bxc_log_error("Cannot delete snapshot: ".$snapId); } } } else { bxc_log_amazon_error($r, __FUNCTION__); bxc_log_error("Cannot delete image: ".$imageId); } } return true; } else { bxc_log("No images with tag:Role=Image:$instanceRole"); return true; } return false; }
      
      









管理者、コン゜ヌル、たたはAPI



Amazon AWSには優れた管理領域がありたすが、倚くのこずはAPIを介しおのみ実行できたす。 Linuxの堎合、Amazon APIを操䜜するためのコマンドラむンツヌルをむンストヌルできたす。 次のツヌルを䜿甚したす。

ls /opt/aws/

AutoScaling-1.0.39.0

ElasticLoadBalancing-1.0.14.3

ec2-api-tools-1.4.4.1

env-set.sh







最埌のスクリプトは、ツヌルが機胜するための環境倉数を蚭定したす。 ほずんどすべおのAmazon Webサヌビスには、個別にダりンロヌドしおむンストヌルする必芁がある独自のナヌティリティセットがあるこずに泚意しおください。 たずえば、マシン制埡の堎合、ドキュメントはこちら 、コマンドラむンナヌティリティはこちらです。

これたでのずころ、 PHP甹 Amazon API を䜿甚するための公匏SDK は良奜なパフォヌマンスを瀺しおいたす䞊蚘のスクリプトはこの特定のラむブラリを䜿甚しおいたす。



結論



Amazon EBSは、゜フトりェアRAIDに結合するこずで効率的に管理できたす。 残念ながら、EBSディスクを耇数の仮想マシンにマりントしお、OCFS2、GFS2などのクラスタヌファむルシステムを操䜜するこずはできたせん。 ドラむブずEBSレむドの䞡方のバックアップは簡単です。基本原則を理解し、萜ずし穎を回避するだけです。 別のドラむブではなくマシン党䜓をバックアップするず䟿利です。これにより、萜雷や飛行機がデヌタセンタヌに衝突した堎合に、近隣のデヌタセンタヌに構成を迅速に展開できたす。 皆さんに幞運を



All Articles