Mengembalikan array RAID0 EBS Amazon dari snapshot yang diambil dengan EC2-konsisten-snapshot


8

Saya telah mengkonfigurasi server MySQL baru di Amazon EC2 dan memutuskan untuk menyimpan data saya pada EBS RAID0 Array. Sejauh ini bagus, dan saya telah menguji pengambilan snapshot dari perangkat-perangkat itu dengan ec2-konsisten-snapshot, hebat.

Sekarang, bagaimana Anda membangun kembali array pada instance baru, dari snapshot ini, dengan cepat?

Saat Anda menggunakan ec2-konsisten-snapshot untuk membuat snapshot dari beberapa volume, Anda tidak memiliki cara untuk mengetahui volume mana yang digunakan untuk setiap perangkat di RAID. Saya mungkin benar-benar salah, tetapi karena Anda menghapus data di seluruh volume, masuk akal bahwa Anda harus meletakkan setiap volume BARU di lokasi yang sama pada RAID sebagai volume dari mana snapshot dibuat.

Sebuah contoh:

  • Volume 3x200gb dalam konfigurasi RAID0.
  • vol-1 adalah perangkat / dev / sdh 0 di RAID
  • vol-2 adalah perangkat / dev / sdh1 1 di RAID
  • vol-3 adalah perangkat / dev / sdh2 2 di RAID

Anda membuat snapshot EC2 dengan: ec2-consistent-snapshot <options> vol-1 vol-2 vol-3.

Anda sekarang memiliki 3 snapshot, dan satu-satunya cara untuk melacak kembali perangkat mana mereka adalah dengan melihat id volume sumber, kemudian melihat pada perangkat mana volume id sumber dipasang seperti pada contoh, dan kemudian memeriksa rincian RAID konfigurasi pada instance volume sumber.

Ini jelas sangat manual ... dan tidak cepat (yang jelas membuat sulit untuk memunculkan instance mysql baru dengan cepat jika yang lain gagal. Belum lagi, Anda harus merekam posisi perangkat pada RAID pada saat itu) snapshot, karena jika instance volume sumber macet, Anda tidak memiliki cara untuk mendapatkan konfigurasi RAID).

Jadi, sebagai kesimpulan:

  • Apakah saya kehilangan sesuatu dengan cara EC2-konsisten-snapshot dan array perangkat lunak RAID0 bekerja?
  • Jika tidak, apakah ada solusi / praktik terbaik yang diketahui di sekitar masalah tidak mengetahui perangkat / posisi mana dalam array RAID yang dimiliki snapshot?

Saya harap ini jelas, dan terima kasih atas bantuan Anda!

Jawaban:


5

karena Anda menghapus data di seluruh volume, maka Anda harus menempatkan setiap volume BARU di lokasi yang sama pada RAID sebagai volume dari mana snapshot dibuat.

Saya menguji premis Anda, dan tampaknya logis, pengamatannya sebaliknya.

Biarkan saya merinci ini:
Saya memiliki persyaratan yang sama persis seperti yang Anda lakukan. Namun, RAID0 yang saya gunakan hanya memiliki 2 volume.

Saya menggunakan Ubuntu 10 dan memiliki 2 perangkat EBS yang membentuk perangkat RAID0 yang diformat dengan XFS.

Perangkat raid0 dibuat menggunakan perintah berikut:
sudo mdadm --create /dev/md0 --level 0 --metadata=1.1 --raid-devices 2 /dev/sdg /dev/sdh

Saya telah menginstal MYSQL dan banyak perangkat lunak lain yang dikonfigurasi untuk menggunakan / dev / md0 untuk menyimpan file data mereka.

Menggunakan volume yang sama : Setelah selesai, saya umount semuanya, hentikan Raid dan pasang kembali seperti ini: sudo mdadm --assemble /dev/md0 /dev/sdh /dev/sdg Masalahnya adalah terlepas dari urutannya /dev/sdg /dev/sgh, RAID menyusun kembali dirinya dengan benar.

Menggunakan snapshots : Posting ini, saya gunakan ec2-consistent-snapshotuntuk membuat snapshot dari 2 disk EBS bersama-sama. Saya kemudian membuat volume dari disk ini, melampirkannya ke contoh baru (yang telah dikonfigurasi untuk perangkat lunak sudah), memasang kembali RAID (Saya sudah mencoba menukar urutan volume EBS juga), pasang dan saya siap untuk pergi.

Kedengarannya aneh, tetapi berhasil.


Jadi, pada dasarnya, ketika Anda membangun kembali array, tidak masalah urutan pembuatannya. Saya kira ini karena data superblok yang ditulis ke disk, jadi pengontrol RAID tahu cara menyatukannya kembali. Ini fantastis! Terima kasih atas jawaban Anda, ini persis seperti yang saya butuhkan!
Jim Rubenstein

4

Saya menjalankan konfigurasi yang sama ( RAID0 lebih dari 4 volume EBS ), dan akibatnya memiliki keprihatinan yang sama untuk menyusun kembali array RAID dari snapshots yang dibuat dengan ec2-konsisten-snapshot .

Untungnya, setiap perangkat dalam array serangan berisi metadata (dalam superblok) yang mencatat posisinya dalam array, UUID array dan level array (misalnya RAID0). Untuk menanyakan superblok ini pada perangkat apa pun, jalankan perintah berikut (baris yang cocok '^ ini' menjelaskan perangkat yang diminta):

$ sudo mdadm --examine /dev/sdb1
/dev/sdb1:
          Magic : a92b4efc
        Version : 00.90.00
           UUID : 2ca96b4a:9a1f1fbd:2f3c176d:b2b9da7c
  Creation Time : Mon Mar 28 23:31:41 2011
     Raid Level : raid0
  Used Dev Size : 0
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 0

    Update Time : Mon Mar 28 23:31:41 2011
          State : active
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0
       Checksum : ed10058a - correct
         Events : 1

     Chunk Size : 256K

      Number   Major   Minor   RaidDevice State
this     0     202       17        0      active sync   /dev/sdb1

   0     0     202       17        0      active sync   /dev/sdb1
   1     1     202       18        1      active sync   /dev/sdb2
   2     2     202       19        2      active sync   /dev/sdb3
   3     3     202       20        3      active sync   /dev/sdb4

Jika Anda melakukan kueri yang sama pada perangkat yang bukan bagian dari array, Anda memperoleh:

$ sudo mdadm --examine /dev/sda1
mdadm: No md superblock detected on /dev/sda1.

Yang membuktikan bahwa perintah ini sangat bergantung pada informasi yang tersimpan pada perangkat itu sendiri dan bukan pada beberapa file konfigurasi.

Satu juga dapat memeriksa perangkat array RAID mulai dari perangkat RAID, mengambil informasi serupa:

$ sudo mdadm --detail /dev/md0

Saya menggunakan nanti bersama dengan ec2-menggambarkan-volume untuk membangun daftar volume untuk ec2-konsisten-snaptshot ( -n dan --debug memungkinkan untuk menguji perintah ini tanpa membuat snapshots). Perintah berikut mengasumsikan bahwa direktori / mysql adalah titik mount untuk volume dan bahwa wilayah AWS adalah us-west-1 :

$ sudo -E ec2-consistent-snapshot --region us-west-1 --mysql --freeze-filesystem /mysql --mysql-master-status-file /mysql/master-info --description "$(date +'%Y/%m/%d %H:%M:%S') - ASR2 RAID0 (4 volumes) Snapshot" --debug -n $(ec2-describe-volumes --region us-west-1 | grep $(wget http://169.254.169.254/latest/meta-data/instance-id -O - -q) | egrep $(sudo mdadm --detail $(awk '{if($2=="/mysql") print $1}' /etc/fstab) | awk '/ \/dev\//{printf "%s ", $7}' | sed -e 's# /#|/#g') | awk '{printf "%s ", $2}')

0

Saya tahu ini tidak menjawab pertanyaan Anda, tetapi saya melakukan sesuatu yang serupa tetapi dengan alat ec2-create-snapshot basis Amazon dan skrip cron. Ini tidak secepat snapshot yang konsisten dengan ec2, tapi saya mendapatkan kontrol ekstra yang saya butuhkan: fsync, lock menulis, dan yang paling penting, beri nama snapshot dengan tepat sehingga dapat disusun kembali dalam urutan yang benar.


Saya sebenarnya menggunakan XFS, jadi saya membekukan sistem file sementara saya membidik. Dikombinasikan dengan FLUSH dan LOCK di MySQL (EC2-konsisten-snapshot melakukan semua ini), saya harus memiliki snapshot yang konsisten setiap kali. Masalahnya adalah penamaan, yang saya baru saja mengembangkan solusi temp, dengan memodifikasi skrip perl EC2-konsisten-snapshot, untuk saat ini.
Jim Rubenstein
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.