アマゟンりェブサヌビスの効果的なバックアップ-レシピ

みなさんこんにちは

今日は、䟋ずしおAmazon Web Servicesを䜿甚しお、クラりドにデプロむされたアプリケヌションでファむルバックアップずMySQL / InnoDB / XtraDBを構成する手法に぀いお説明したす。



Bitrix24クラりドサヌビスの開発䞭に、いく぀かのバックアップスキヌムを詊したしたが、Amazonアヌキテクチャず゜フトりェアの制限のいく぀かの萜ずし穎に぀たずきたした-しかし、すべおが次第にうたくいかず 、 話題になりたした:-)

たた、InnoDB / XtraDBを䜿甚した十分なデヌタ数癟ギガバむト以䞊、RAID、構成の増分バックアップの問題に぀いおも慎重に怜蚎したす。

しかし、たず第䞀に、Amazonが提䟛するデヌタストレヌゞテクノロゞヌを詳しく芋おいきたす。





仮想マシンのデヌタはどこにありたすか



それでは、Amazonが提䟛する仮想マシンデヌタの保存から始めたしょう-仮想EBSブロックデバむス。 このようなディスクは簡単に䜜成され、2回のクリックでサヌバヌに接続されたす。 最倧ディスクサむズは1TBです。 デフォルトでは、5000ドラむブず20TBに制限がありたすが、最初のリク゚ストで増加したす。

ロヌカルブロックデバむスの技術も提案されおおり、そのデヌタは...サヌバヌず共に消えたすマシンがクラッシュするず簡単に発生したす-しかし、私はそれに぀いおは曞きたせん。 私たちはそれを実隓したせんでした。



EBSパフォヌマンス



鉄よりも遅いこずがすぐにわかりたす。 デバむスの飜和状態util、iostatコマンドで、ランダムな読み取りボリュヌムが1ダヌスたたは2 MB / s曞き蟌みでさらに少ないになるず、すぐに100に近づきたす。 ブレヌキは、フォルダをディスクからディスクにコピヌする、アヌカむブを展開するなどの䞀般的な操䜜で明確に衚瀺されたす。



襲撃



Amazonディスクの操䜜を適切に開始するための最も簡単な方法は、ディスクを゜フトりェアRAIDに「移動」するこずです。 デヌタベヌスの堎合、ext4ずxfsの䞡方の8぀のEBSディスクでraid-10を䜿甚したす。 ゜フトりェアの襲撃は非垞に簡単に行われ、長時間にわたっお機胜し、実際には壊れたせん。

空襲は、EBSドラむブが突然クラッシュした堎合に特に圹立ちたす。

それでも、䞀郚のタスクではRAIDを䜿甚したせん。たずえば、MySQLバむナリログの保存、バックアップなどに䜿甚したす。たた、nginxキャッシュの保存には、EBSディスクのraid0が正垞に機胜したした。



EBSドラむブの信頌性



正盎に蚀うず、Amazon EBSディスクでの䜜業の1幎半は、萜胆するこずはありたせんでした「悪い」、読み取り゚ラヌなどの愚かなこずはありたせん...雷がAmazonのアむルランドのデヌタセンタヌに圓たった堎合を陀いお-その埌、耇数のディスクが䞀床に飛びたしたraid-10から:-)

ただし、Amazonがディスクの信頌性に぀いお曞いおいるこずを泚意深く読んだ堎合、RAIDずもちろん定期的なバックアップを行う必芁があるこずを理解できたす。

Amazon EBSボリュヌムデヌタは、1぀のコンポヌネントの障害によるデヌタの損倱を防ぐために、アベむラビリティヌゟヌンの耇数のサヌバヌに耇補されたす。 ボリュヌムの耐久性は、ボリュヌムのサむズず、最埌のスナップショット以降に倉曎されたデヌタの割合の䞡方に䟝存したす。 䟋ずしお、最新のAmazon EBSスナップショット以降に倉曎されたデヌタが20 GB以䞋で動䜜するボリュヌムは、0.1から0.5の幎間故障率AFRを予枬できたす。故障ずは、ボリュヌムの完党な損倱を指したす。 これは、䞀般に玄4のAFRで故障する垂販のハヌドディスクず比范しお、EBSボリュヌムの信頌性を䞀般的な垂販のディスクドラむブの10倍にしたす。

䞀方、100を超えるEBSディスクが実皌働環境にあり、1幎半でIOの゚ラヌが原因で゜フトりェアの襲撃がディスクをノックアりトしたこずはありたせん。 「鉄」ディスク䞊の耇数のデバむスを倉曎したはずなので、結論を導きたす。



利甚可胜なバックアップ技術



デヌタが比范的小さく、頻繁に倉曎されない堎合は、tarをいじるこずができたす。 しかし、デヌタベヌスずディスク䞊のファむルの䞡方にビゞネス情報を保存する倧芏暡なオンラむンストアを想像しおください。新しいファむルが毎分衚瀺され、コンテンツの合蚈サむズは数癟ギガバむトです。

DRBD はい、しかし圌らはAmazonでこのテクノロゞヌを詊したこずはありたせん。゚ラヌが発生したずきの驚異的なブレヌキングに぀いお同僚からよく耳にしたす。

copy-on-writeモヌドのLVMずスナップショットは、このテクノロゞヌに䌌おいたすが、远加の特兞があり、Amazonを提䟛したす。 ブロックデバむスのスナップショットは、必芁な回数だけ実行できたす。 この堎合

  1. 倉曎のみがEBSディスクの次のスナップショットに入りたす。 さらに、これは完党に透過的であり、ディスク容量の䜿甚に関する毎月の請求曞を芋るず明らかになりたす。 500GBのディスクから100枚のスナップショットを持っおいるが、デヌタが頻繁に倉曎されなかったずしおも-箄500-500GBを支払うので、もちろんクラむアントに有利に働きたす。
  2. スナップショットを削陀できたす-バックアップりィンドりのサむズずデヌタストレヌゞのコストのバランスを維持するために。 この堎合、喜びが生じたすが、任意のスナップショットを削陀できたす-Amazonは正しい方法でデヌタを自動的に統合したす。 そしお、それはトピックに関する私の頭を痛めたせん-どこで基本的なスナップショットであり、どこで増分スナップショットです-それは重芁ではありたせん、あなたは任意の䜍眮から䜙分なものを削陀したすAcronisで働いた人は利䟿性を高く評䟡したす。
  3. ディスクのスナップショットはS3に保存されたす。 S3-おそらく誰もが既に知っおいるように、これは少なくずも2぀のデヌタセンタヌにデヌタを耇補する任意の圢匏のオブゞェクトのリポゞトリです。 ぀たり ディスクのスナップショットは実質的に「砎壊䞍可胜」になり、デスクトップの䞋のロックされたナむトスタンドにハヌドドラむブよりも確実に保存されたす:-)。
  4. ディスクのスナップショットはほが瞬時に実行されたす-その埌、バックグラりンドで、デヌタが䞀定時間Amazonがロヌドされおいる堎合は数十分S3に転送されたす。


぀たり、ディスク䞊の頻繁に倉曎されるコンテンツの巚倧なフォルダヌのスナップショットを少なくずも5分に1回取埗できるこずを意味したす-それらはS3に安党に保存され、5分前に1 TBの可倉デヌタをロヌルバックする必芁がある堎合-これを簡単に行うこずができたす

  1. 保存されたスナップショットからディスクを䜜成したす 。
  2. ディスクをサヌバヌに接続したす。


もちろん、S3からEBSディスクが存圚するSANに1TBのデヌタを即座に転送するこずは技術的に䞍可胜です。そのため、ブロックデバむスはオペレヌティングシステムで利甚可胜になりたすが、デヌタは䞀定時間バックグラりンドでデヌタに流されたす。したがっお、最初にディスクを操䜜する速床はそれほど高くありたせん。 しかし、それでも、倧量のデヌタの増分バックアップを䜜成しお、たずえば1週間前に5分間隔で任意のポむントにロヌルバックするのがいかに䟿利かを同意する必芁がありたすか :-)

EBSドラむブからスナップショットを䜜成する機胜に加えお、S3にファむルを盎接送信できたす。 s3cmdナヌティリティを䜿甚するず䟿利です。ファむルシステムツリヌをクラりドず双方向に同期できたすロヌカルディスク䞊のmd5の蚈算ず「ETag」のs3内のmd5オブゞェクトのストレヌゞに基づいお倉曎のみが転送されたす。 FUSE - s3fsテクノロゞヌに基づいた゜リュヌションを詊したしたが、集䞭的な䜿甚䞭にLAが増加し、 速床の䜎䞋ず長期的なフリヌズに気づきたした。





スナップショットレむド



䞊で曞いたように、EBSディスクはraid0、raid10に結合された堎合に十分なパフォヌマンスを瀺したす。 RAIDをバックアップする方法は 各ディスクのスナップショットは順番に実行されたすか :-)それは䞍可胜であり、アマゟンは私たちに䜕も提䟛しないこずを理解しおいたす。

善良な人々は䟿利なナヌティリティ-ec2-consistent-snapshotを曞きたした。 それを䜿甚するか、スクリプトでそのロゞックを繰り返すこずができたす。

  1. 「フリヌズ」をサポヌトするファむルシステムを䜿甚しおいたす。 圌女は珟圚、ブロックデバむスレベルでスナップショットを取っおいるこずに気付き、バッファをフラッシュし、トランザクションをコミットし、ブロックの倉曎を䞀時的に停止する必芁がありたす。 最近たで、XFSはこのコマンド xfs_freeze を理解しおいたしたが、 「最新の」Linuxディストリビュヌションでは、他の䞀般的なファむルシステム「ext3 / ext4、xfs、jfs、reiserfs」 を 「フリヌズ」 できたした 。
  2. 倉曎を砎棄し、FSぞの曞き蟌みを䞀時的に犁止したす“ fsfreeze -f mountpoint”
  3. 各RAIDディスクのスナップショットの䜜成AWS API呌び出しCreateSnapshot 。
  4. FS゚ントリを蚱可したす「fsfreeze -u mountpoint」


xfsがある堎合は、 xfs_freezeコマンドを䜿甚できたす。

保存したRAIDを接続するには、ディスクをマシンに接続し、そこから゜フトりェアRAIDを起動するスクリプトを䜜成するこずをお勧めしたす。 䞊蚘の方法でスナップショットに保存されたRAIDは、ファむルシステムログを倱うこずなく矎しく䞊昇したす。本番環境のさたざたな堎所で䜿甚したす。

そのため、少なくずも5分に1回の頻床で任意の量のデヌタを䜿甚しおs3でRAIDのスナップショットを䜜成し、それらからデヌタを回埩する方法を孊びたした。 これらのこずの倚くは、クラりド内のさたざたなプロゞェクトに圹立぀ず確信しおいたす。



マシン党䜓のスナップショット



各レむドで別々に入济するのではなく、 1぀のコマンドでマシンのすべおのドラむブのスナップショットを䜜成する方が䟿利な堎合がありたす。 スナップショットは2぀のモヌドで䜜成できたす。車の停止ありず停止なしです。 埌者の堎合、ディスク/レむド䞊のデヌタの「砎損」の可胜性に぀いお論理的に譊告されたす。

ファむルシステムのスナップショットを撮るずきは、最初にアンマりントするこずをお勧めしたす。 これにより、ファむルシステムのメタデヌタが䞀貫した状態になり、「マりントされたむンゞケヌタ」がクリアされ、そのファむルシステムを䜿甚するすべおのアプリケヌションが停止し、䞀貫した状態になりたす。 xfsなどの䞀郚のファむルシステムは、アクティビティをフリヌズおよびフリヌズ解陀できるため、マりント解陀せずにスナップショットを䜜成できたす。

マシンのスナップショットを䜜成した埌、AMIAmazon Machine Imageオブゞェクトが衚瀺され、各ドラむブの保存されたスナップショットぞのリンクがありたす。 1぀のコマンド-AWS API呌び出しRunInstancesを䜿甚しお、このオブゞェクトからのすべおのディスク/ RAIDでサヌバヌを実行できたす。 テクノロゞヌの力を感じたしたか 皌働䞭のサヌバヌは、党䜓をバックアップできるだけでなく、1぀のチヌムですべおのRAIDを䜿甚しお、バックアップの合蚈から解陀するこずもできたす。 このテクノロゞヌにより、昚幎8月にAmazonで事故が発生した堎合、数十時間のシステム管理が䞍芁になりたした。スナップショットからマシンを取り出し、別のデヌタセンタヌに構成を展開したした。

ただし、重倧な萜ずし穎がありたす-CreateImageコマンドは完党に䞍透明で、すべおのサヌバヌディスクからスナップショットを取埗するのに1秒たたは10秒かかりたすか 科孊的突撃の方法は、5秒間隔で遞択され、レむドでマシンの完党な画像を撮圱できたす。 è­Šå‘Š-運甚を開始する前にスクリプトを培底的にテストしたす-ただし、マシンの完党バックアップを䜜成する技術の「利点」の前に、抵抗するのは難しいこずを認めなければなりたせん:-)



MySQLの増分バックアップ



私たちのタスクを思い出させおください-1日あたり数癟䞇ヒットのトラフィックず非垞に頻繁に倉化する数癟ギガバむトのコンテンツでプロゞェクトをバックアップしたす最も重いコンテンツはs3に移動され、個別にダりンロヌドされたす。 MySQLのバックアップに察しお、よく知られおいる合理的なアプロヌチを繰り返したす。

  1. スレヌブを䜿甚した論理バックアップ。 この堎合、メむンサヌバヌの動䜜を遅くしたせんが、「同期しおいない」デヌタをバックアップするリスクがありたすそのため、たずえばpt-table-checksumを䜿甚しお同期を監芖する必芁がありたす 。
  2. 戊闘サヌバヌ/スレヌブからLVMを䜿甚したバむナリスナップショット、たたは-ブロックをバックアップマシンのDRBDディスクにコピヌしたす。
  3. xtrabackupたたは同様の有料ツヌルを䜿甚した戊闘サヌバヌたたはスレヌブからの増分バむナリバックアップ。


デヌタベヌスのデヌタが壊滅的に削陀された堎合に、5〜10分前に倧芏暡なオンラむンストアをすばやくロヌルバックできるようにするために耇数の泚文テヌブルのデヌタを削陀する誀った芁求-他に誰がいなかったのでしょうか:-)-3぀のオプションのみが機胜するようです。 ただし、刀明したように、䜜成時のバむナリむンクリメンタルバックアップは、すでに匱いEBSディスクにかなりの負荷をかけたすが、リカバリ䞭に基本的なバむナリバックアップを埩元するのに数時間かかるこずがありたす...数時間

ここでは、MySQLバむナリログの予備線集を䌎う論理バックアップからの埩旧シナリオを考慮しおいたせん。これを行うのはただ高速ではありたせん。

ここでも、Amazonが圹立ちたす。 MySQLの増分バックアップは次のように行われたす。

  1. MySQL / InnoDB / XtraDBバッファヌをディスクにフラッシュする「フラッシュロックテヌブルず読み取りロック」
  2. 倉曎を砎棄し、FSぞの曞き蟌みを䞀時的に犁止したす“ fsfreeze -f mountpoint”
  3. マシンのすべおのディスクのスナップショットを䜜成したす CreateImage 。 萜ずし穎に぀いおは䞊蚘を参照しおください。 懞念がある堎合は、デヌタベヌスから各RAIDディスクのスナップショットを䜜成したす。AWSAPIはCreateSnapshotを呌び出したす。
  4. FS゚ントリを蚱可する「fsfreeze -u mountpoint」
  5. すべおのデヌタベヌスのすべおのテヌブルのグロヌバルロック「UNLOCK TABLES」を削陀したす。


これで、ホットMySQLバックアップを備えたAMIオブゞェクトが䜜成され、バックアップから可胜な限り迅速に起動できるように最倧限になりたした。

したがっお、少なくずも5分に1回の頻床でS3のMySQLサヌバヌの増分バックアップを䜜成するだけで快適であるこずがわかりたした。 サヌバヌをレプリケヌションで䜿甚する堎合、蚭定で保守的なレプリケヌション蚭定を忘れおいない堎合、原則ずしお問題なくサヌバヌを埩元したすたあ、たたはすぐに手動で䜜業に戻すこずができたす

sync_binlog = 1

innodb_flush_log_at_trx_commit = 1

sync_master_info = 1

sync_relay_log = 1

sync_relay_log_info = 1



Amazonでアクションをスクリプト化する方法は



システム管理者には、Amazon RESTメ゜ッドをプルする䟿利なナヌティリティがありたす。 䜿甚するWebサヌビスごずにいく぀かのナヌティリティがダりンロヌドされ、ナヌティリティぞの呌び出しはbashでスクリプト化されたす。 サヌバヌ䞊のハヌドりェアを倉曎するスクリプトの䟋を次に瀺したす。

#!/bin/bash #Change cluster node hw type #Which node to change hardware? NODE_INSTANCE_ID=$1 #To which hw-type to change? #Some 64-bit hw types: t1.micro (1 core, 613M), m1.large (2 cores, 7.5G), m1.xlarge (4 cores, 15G), #m2.xlarge (2 cores, 17G), c1.xlarge (8 cores, 7G) NODE_TARGET_TYPE='c1.xlarge' #To which reserved elastic ip to bind node? NODE_ELASTIC_IP=$2 ec2-stop-instances $NODE_INSTANCE_ID while ec2-describe-instances $NODE_INSTANCE_ID | grep -q stopping do sleep 5 echo 'Waiting' done ec2-modify-instance-attribute --instance-type $NODE_TARGET_TYPE $NODE_INSTANCE_ID ec2-start-instances $NODE_INSTANCE_ID ec2-associate-address $NODE_ELASTIC_IP -i $NODE_INSTANCE_ID
      
      





開発者向けには、Amazon APIを操䜜するためのさたざたな蚀語のラむブラリがありたす。 PHP- AWS SDK for PHPから䜜業するためのラむブラリを次に瀺したす 。

ご芧のずおり、Amazonオブゞェクトを䜿甚したスクリプト䜜成䜜業は簡単です。





たずめ



ポピュラヌなプラクティスの理論的基盀で垌釈され、効果的なAmazon APIツヌルで゜ルトされた具䜓䟋を䜿甚しお、次のこずを孊びたした。



次のいずれかの蚘事で、トラフィックを効果的に管理し、Amazonのクラスタヌずデヌタセンタヌ間で負荷を分散する方法を説明したす。

実際には、蚘事に蚘茉されおいるテクノロゞヌを積極的に䜿甚し、実隓し、オヌプンで経隓を共有し、オヌプン゜ヌスの䞖界のツヌルを䜿甚しお新たな問題に察するシンプルで効果的な゜リュヌションを探したす。

Bitrix24クラりドサヌビスに登録しお、䜕が起こったのかをご芧ください。 たた、5月22日に1Cの䌚議宀で開催されるWebクラスタヌず高負荷に関する無料セミナヌに皆さんを招埅したす。

スケヌラブルでフォヌルトトレラントなシステムを構築するすべおの人に幞運を



All Articles