Bu soru hakkında ilginç bir şey var - özellikle kesinti süresi fikri ile ilgili. Bir uygulama, kesinti süresine karşı hassassa, kurtarma süresinin de hesaba katılması gerektiği fikrinin bir parçasıdır. (Aşırı bir argüman olarak, bu yedeklemelere ihtiyaç duymamanız durumunda hiçbir yedekleme kesinti gerektirmez, bu durumda kesinti süresi sonsuza yaklaşabilir ).
EBS hakkında biraz
EBS hacimleri ve anlık görüntüleri blok düzeyinde çalışır - bunun sonucu, bir örnek çalışırken anlık görüntülerin EBS birimi kullanımda olsa bile çekilmesine izin verir. Bununla birlikte, anlık görüntüye yalnızca diskte bulunan (yani bir dosya önbelleğinde bulunmayan) veriler dahil edilir. Tutarlı anlık görüntüler fikrini doğuran ikinci sebep budur.
- Önerilen yol, sesi ayırmak, anlık görüntü almak ve yeniden takmaktır - genellikle pratik değildir.
- Bir sonraki en iyi seçenek yazma önbelleklerini diske temizlemeyi, dosya sistemini dondurmayı ve anlık görüntünüzü almayı içerir
Burada ilginç bir nokta, yukarıdaki her iki durumda da, anlık görüntünün yeniden bağlanması / çözülmesi ve diske yazmaya devam etmesi için anlık görüntünün bitmesini beklemeniz gerekmemesidir - anlık görüntü başlatıldıktan sonra verileriniz bu nokta ile tutarlı olacaktır. Genellikle bu, diskinizin yazma kilitli olduğu sadece birkaç saniye gerektirir. Ayrıca, çoğu veritabanı, disk üzerindeki dosyalarını makul bir şekilde yapılandırdığından - eklerin mevcut blokları minimum etkiye sahip olma şansı vardır - bu da anlık görüntüye eklenen verileri en aza indirir.
Yedekleme noktasını düşünün
EBS birimleri zaten bir kullanılabilirlik bölgesi içinde çoğaltılmıştır - bu nedenle yerleşik bir fazlalık derecesi vardır. Örneğiniz sona ererse, EBS birimini yeni bir örneğe ekleyebilir ve (tutarlılık eksikliğini geçtikten sonra) hariç tutulmuş. Birçok açıdan bu, EBS hacmini erişebilmeniz koşuluyla tutarsız bir anlık görüntü gibi yapar. Bununla birlikte, çoğu EC2 kullanıcısı muhtemelen 2011'in başından itibaren EBS hacimlerinin kademeli başarısızlıklarını hatırlıyor - hacimler birkaç gün boyunca erişilemedi ve bazı kullanıcılar da veri kaybetti.
raıd1
Bir EBS diskinin arızalanmasına karşı koruma sağlamaya çalışıyorsanız (gerçekleşir), bir RAID1 kurulumunu düşünebilirsiniz. EBS hacimleri blok cihazlar olduğundan, istediğiniz yapılandırmaya ayarlamak için mdadm'u kolayca kullanabilirsiniz. EBS birimlerinizden biri spesifikasyona göre performans göstermiyorsa, manuel olarak başarısız olması (ve daha sonra başka bir EBS birimiyle değiştirilmesi) kolaydır. Tabii ki, bunun dezavantajları var - her yazma için daha fazla zaman, değişken performansa karşı daha fazla duyarlılık, G / Ç maliyetini (performans açısından akıllıca değil) ikiye katlayın, daha yaygın bir AWS hatasına karşı gerçek bir koruma yok (geçen yıl yaygın bir sorun vardı) kilitli durumdaki EBS birimlerinin ayrılmaması) ve elbette, diskin arıza durumunda tutarsız durumu.
S3FS
Belirli uygulamalar için bir seçenek (kesinlikle veritabanları için DEĞİLDİR) S3'ü yerel bir dosya sistemi olarak monte etmektir (örn. S3fs aracılığıyla). Bu yavaştır, bir dosya sisteminden bekleyebileceğiniz bazı özelliklerden yoksundur ve beklendiği gibi davranmayabilir (nihai tutarlılık). Bununla birlikte, yüklenen dosyaları örnekler arasında kullanılabilir hale getirmek gibi basit bir amaç için, liyakat gösterebilir. Açıkçası iyi okuma / yazma performansı gerektiren herhangi bir şey için değil.
MySQL bin günlüğü
MySQL'e özgü bir başka seçenek bin-log'un kullanımı olabilir. Bin günlüğünüzü depolayacak ikinci bir EBS birimi ayarlayabilir (eklenen yazma işlemlerinin veritabanınız üzerindeki etkisini en aza indirmek için) ve bunu, aldığınız veritabanı dökümleriyle birlikte kullanabilirsiniz. Bunu, performansın tolere edilebilir olması durumunda gerçekten hak sahibi olabilen s3fs ile bile yapabilirsiniz (rsync, s3fs'yi doğrudan kullanmaya çalışmaktan daha iyi olur ve kesinlikle yapabildiğinizi sıkıştırmak isteyeceksiniz).
Yine de, amaç fikrine geri dönüyoruz. Yukarıdaki önerilerle neler olacağını düşünün:
- EBS hacimlerine erişilemiyor:
- RAID1 - işe yaramaz, çünkü verilere ulaşamazsınız
- bin-log - S3'e aktarmazsanız işe yaramaz - muhtemelen bir gecikme
- Eşgörünüm beklenmedik şekilde sonlanıyor:
- RAID1 - diskleriniz kullanılabilir, ancak tutarlı değil, veritabanınız kendi başına tutarsızlıktan kurtulabilir
- bin-log - son birkaç etkinliği incelemeniz gerekebilse de verilerinize erişilebilir olmalıdır
- Birisi DROP DATABASE'i root olarak çalıştırır:
- RAID1 - var olmayan bir veritabanının iki mükemmel kopyası var
- bin-log - olayları komuttan hemen önce tekrar oynatabilirsiniz, bu yüzden iyi olmalısınız
Yani gerçekten, RAID1 çoğunlukla işe yaramaz ve bin günlüğü çok uzun sürer - her ikisinin de belirli koşullar altında değeri olabilir, ancak fikir yedeklemesinden uzaktır.
Anlık
Anlık görüntülerin farklı olduğunu ve yalnızca veri içeren (ve sıkıştırılmış) gerçek blokları saklamak önemlidir. Bir EBS biriminden farklı olarak, 20GB'lık bir biriminiz varsa, ancak yalnızca 1GB kullanıyorsanız, yine de 'sağlanan' depolama (20GB) için ücretlendirilirsiniz. Anlık görüntü ile yalnızca kullandığınız kadar ücretlendirilirsiniz. Anlık görüntüler arasında veri değişmezse, (teorik olarak) herhangi bir ücret alınmaz. (Anlık görüntüler PUTS / GETS ve kullanılmış depolama alanı için ücretlendirilir).
Bir yana, uygulama verilerinizin (veritabanları dahil) kök biriminizde (zaten ayarlamış olabilirsiniz) saklanmamasını şiddetle tavsiye ederim. Avantajlardan biri, umarım, kök hacminizin minimum bir değişiklik görmesidir - bu, anlık görüntülerinin maliyeti ve kullanım kolaylığını azaltan daha az sıklıkta (veya minimum bir değişime sahip olabileceği) anlamına gelir.
Ayrıca, eski anlık görüntüleri istediğiniz zaman silebileceğinizden bahsetmek de önemlidir - farklı olmalarına rağmen diğer anlık görüntüleri etkilemezler. Bununla birlikte, bir anlık görüntüye atanan her blok, yine de o bloğa başvuran bir anlık görüntü kalmayana kadar bırakılmaz.
Periyodik dökümlerle ilgili sorun öncelikle dökümler arasındaki süredir (muhtemelen MySQL'in bin-log'u kullanılarak ele alınmaktadır) ve aynı zamanda iyileşmenin zorluğudur. Büyük bir dökümü içe aktarmak ve bir bin günlüğündeki tüm olayları yeniden oynatmak zaman alır. Ayrıca, bir döküm oluşturmak performans sonuçları olmadan değildir. Muhtemelen, bu tür dökümler muhtemelen bir anlık görüntüden çok daha fazla depolama gerektirir. Bir EBS hacminin sadece veritabanları ve çoğu durumda tercih edilebilecek anlık görüntü için ayarlanması (bir anlık görüntü çekmenin de biraz performans etkisi olduğu anlamına gelir).
Anlık görüntülerin ve EBS hacimlerinin güzelliği, diğer durumlarda kullanılabilmeleridir. Örneğin önyükleme yapamazsa, sorunu tanılamak ve gidermek veya yalnızca verilerinizi kopyalamak için kök birimini başka bir örneğe ekleyebilirsiniz ve kök birimlerini yalnızca birkaç dakikalık kesinti süresi ile değiştirebilirsiniz (örneği durdurun, ayırın kök birimi, yeni bir kök birimi ekleyin, örneği başlatın). Aynı fikir, verilerinizin ikinci bir EBS biriminde bulunması için de geçerlidir. Temel olarak, özel AMI'nizden yeni bir örnek oluşturur ve mevcut EBS biriminizi buna bağlarsınız - arıza süresini en aza indirmeye yardımcı olur.
(Biri iki EBS birimi kullanarak aynı sunucuda (Master-slave) MySQL'in iki kopyasını kurabileceğinizi iddia edebilir (ve muhtemelen bunu tavsiye etmem) ve sonra bir anlık görüntüsünü almak için slave'inizi kapatabilirsiniz EBS hacmi - kesinti olmadan tutarlı olacaktır - ancak performans maliyetleri muhtemelen buna değmez).
AWS, otomatik olarak ölçeklendirmeye sahiptir - bu, sabit sayıda örneği koruyabilir (bu sayı 1 olsa bile) - bir anlık görüntüden dağıtabilirsiniz - bu yüzden anlık görüntünüz kullanışlı değilse, öncül çok fazla kullanılmaz .
Başka bir çift nokta - tek bir anlık görüntüden istediğiniz kadar çok örnek dağıtabilirsiniz (herhangi bir zamanda yalnızca tek bir örneğe eklenebilen bir EBS biriminin aksine). Ayrıca, EBS birimlerinin kullanılabilirlik bölgesi içinde kullanımı kısıtlanırken, anlık görüntüler bir bölge içinde kullanılabilir.
İdeal olarak, bir anlık görüntü ile, sunucunuz kapanırsa, yalnızca son anlık görüntüyü kullanarak yeni bir tane başlatabilirsiniz - özellikle kök hacminizi verilerinizden ayırırsanız, kötü bir güncelleme minimum kesinti süresine neden olur ( verilerinizi içeren EBS birimini aktarın ve tutarsızlık nedeniyle bozulabilecek her şeyi korumak için anlık görüntüsünü alın).
Bir yan not olarak, Amazon, son anlık görüntüden bu yana değiştirilen veri miktarı ile EBS hacimlerinin başarısızlık oranının arttığını belirtiyor.
Son öneriler
- Anlık görüntüler kullanın - harikalar - arıza süresini nedenlerinden çok daha fazla azaltırlar
- Veriyi ve kök birimini ayırın, hatta veritabanlarını kendi birimlerine bile koyun ve gerekirse güncellemelerden önce anlık görüntü alın
- Mümkün olduğunca sıcak kalmak için bin günlüğünü kullanın - bunu (sıkıştırılmış) S3'e yükleyin
- Verileri örnekten gerçekten aldığınızdan emin olun (veriler bir EBS biriminde bozulmamış olsa bile, birimin kendisine geçici olarak erişilemeyebilir).
Önerilen Kaynaklar:
(Çok fazla yazdığımı düşünüyorum, ama yeterince söylemedim - ama umarım okumaya değer bir şey bulursunuz).