Tarsnap hizmet kesintisi olay sonrası analizi
(mail.tarsnap.com)- Tarsnap merkezi sunucusu, Amazon EC2 us-east-1 üzerinde
failed system status checknedeniyle devre dışı kaldı ve hizmet 2023-07-02 13:07:58 UTC civarından itibaren yaklaşık 26 saat 16 dakika kesintiye uğradı - Arıza 13:10 UTC’de tespit edildi, ancak beklenmeyen bir yeniden başlatmadan sonra sunucu kodunun otomatik başlatılmasını kapalı tutan ve insan tarafından elle kontrol yapılmasını öngören operasyon ilkesi uygulandı
- Kurtarma, Amazon S3’teki log-structured dosya sisteminden metadata header’larını okuyup işlemleri yerelde sırayla yeniden oynatma yöntemiyle yürütüldü; ilk aşama 2023-07-03 01:49:49 UTC’de tamamlandı
- Durumun yeniden oluşturulması sırasında 2014’te yazılmış machine re-owned işleme mantığında test edilmemiş bir durum ve devam ettirme mantığında başlatma eksikliği ortaya çıktı; disk throughput sınırı da kurtarmayı yavaşlattı
- Tarsnap’in açık bir SLA’i olmasa da adil bulduğu kesintiler için kredi verme politikası kapsamında, 2023-07-13’te tüm hesaplara bir aylık depolama ücretinin %50’si kadar kredi tanımlandı
Kesintinin başlaması ve ilk müdahale
- 2023-07-02 13:07:58 UTC civarında Tarsnap’in merkezi sunucusu Amazon EC2 us-east-1 bölgesinde çevrimdışı oldu
- EC2 durumu
failed system status checkidi - Sanal makinede bu durum elektrik kesintisi, fiziksel sunucu donanım arızası, EC2 ağ arızası gibi çeşitli nedenlere işaret edebilir
- Aynı anda geniş çaplı bir EC2 arızası raporu görünmüyordu; en olası nedenin izole bir donanım arızası olduğu düşünüldü
- EC2 durumu
- İzleme sistemi arızayı 2023-07-02 13:10 UTC’de tespit etti
- Başka bir EC2 bölgesinden her 5 dakikada bir arşive yazma, okuma ve silme yaparak izleme gerçekleştiriliyordu
- 13:10 UTC’deki SMS bildirimi uyandırmadı, ancak 13:15 UTC’deki telefon bildirimiyle müdahale başladı
- İlk incelemede belirgin bir geçici hata görülmediği için sistemin öldüğü kabul edildi ve yedek EC2 instance’ı hazırlanmaya başlandı
Otomatik yeniden başlatmadan kaçınma ilkesi
- 2023-07-02 13:52 UTC civarında Amazon, arızalı sunucuyu yeni bir EC2 instance’ında yeniden başlattı
- Bu, arızanın başlamasından yaklaşık 45 dakika sonraydı
- İşletim sistemi FreeBSD ayağa kalktı, ancak Tarsnap sunucu kodu otomatik olarak başlatılmadı
- Otomatik başlatmanın kapalı tutulmasının nedeni, beklenmeyen bir yeniden başlatmanın ardından trafik kabul etmeden önce durumu elle kontrol etmekti
- Operasyon ilkesi gereği “bir şey bozulduğunda veri kaybını önlemek”, “hizmet erişilebilirliğini en üst düzeye çıkarmaktan” daha önemliydi
- Yeniden başlatmadan sonra sunucu loglarında dosya sistemi bozulması görüldü
- Arızanın nedeninin donanımı devre dışı bıraktığı veya dosya sistemini barındıran Elastic Block Store ile sunucu arasındaki bağlantıyı kopardığı düşünüldü
- Mevcut sunucuyu kurtarmak yerine yeni sunucunun yapılandırılmasına devam edilmeye karar verildi
S3 log yapısı ve kurtarma prosedürü
- Tarsnap hizmeti verileri Amazon S3’te log-structured dosya sistemi olarak saklar
- Her S3 nesnesi, tüm log girdilerinin metadata’sını içeren bir header ve isteğe bağlı olarak log girdisi verilerini içerir
start write transactionlog girdisi yalnızca makineyi ve transaction nonce’unu tanımlayan bir header’a sahiptir; log verisi içermezstore data blocklog girdisi, makineyi ve blok adını tanımlayan bir header ile birlikte blok verisini içerir
- Normal durumda log girdisi metadata’sı EC2’de cache’lenir ve Amazon S3’ten yeniden okunmaz
- Amazon S3 okumaları yalnızca tarsnap istemci isteklerine yanıt olarak blok verisi okunurken gerçekleşir
- EC2 instance durumunun kurtarılması iki aşamaya ayrılır
- Önce S3’ten tüm metadata header’ları okunur
- Ardından tüm işlemler yerelde yeniden oynatılır (replay)
- Log-structured depolamada veri silindiğinde depolama alanı açmak için log girdileri yeniden yazıldığından, iki aşama aynı anda yürütülemez
- Log girdilerinde sıra numarası bulunduğu için doğru sırada yeniden oynatılabilirler, ancak alındıktan sonra önce sıralanmaları gerekir
Kurtarma sırasında ortaya çıkan kusurlar ve darboğazlar
- İlk aşama sorunsuz ilerledi ve 2023-07-03 01:49:49 UTC’de tamamlandı
- Kurtarma süreci Amazon S3’e eşzamanlı 250 istek gönderecek şekilde yapılandırılmıştı
- Bu değer, 10 yıl önce Amazon S3’ün kaldırabildiği seviyeye göre ayarlanmıştı ve bugün çok daha fazla artırılabilmesi muhtemeldi
- İkinci aşama neredeyse hemen başarısız oldu
- Yeniden oynatılan log girdisinin var olmayan bir makineye ait veriyi kaydettiğini belirten bir hata oluştu
- Neden, 2014’te yazılan makine hesabı taşıma işleme koduydu
- Bir Tarsnap kullanıcısının bir makineyi hesaplar arasında taşıması gerektiğinde yeni bir
machine registrationlog girdisinin saklanması ve eski girdinin silinmesi yöntemi kullanılıyordu - Testler vardı, ancak veri depolanmış durumdayken makine re-owned edildikten sonra sunucu durumunun yeniden oluşturulması senaryosu eksikti
- Yeni makine kayıt log girdisinin sıra numarası daha yüksek olduğundan, yeniden oynatma sırasında verinin henüz var olmayan bir makineye kaydedildiği görülüyordu
- Neden anlaşıldıktan sonra söz konusu “seatbelt” devre dışı bırakıldı ve durum yeniden oluşturma işlemi sürdürüldü
- Kısa süre sonra Amazon S3’te verinin bulunamadığını belirten bir hata oluştu
- Devam ettirme denemesinde S3 verisi indirme aşaması atlandığı için
maximum log entry sequence numberdeğeri başlatılmamış ve 0 olarak kalmıştı - Bu sorun düzeltildikten sonra durum yeniden oluşturma normal şekilde devam etti
- Durum yeniden oluşturma, gerekenden daha yavaş ilerledi
- Disk throughput’unun darboğaz olduğu bilinseydi ilgili EBS volume’unun throughput’u daha yüksek ayarlanabilirdi
- Uykusuzluk nedeniyle süreç yakından izlenemedi; aksi halde gstat(8) ve Amazon CloudWatch üzerinden darboğaz görülebilir ve EBS volume’u yeniden yapılandırılabilirdi
Hizmetin yeniden başlaması ve kredi verilmesi
- 2023-07-03 15:10 UTC civarında durum yeniden oluşturma süreci tamamlandı
- Kesin tamamlanma zamanı kaydedilmedi
- Sunucu salt okunur modda bırakılarak hızlı testler yapıldı
- Mevcut sunucu durumuyla karşılaştırılarak, arıza anında mevcut sunucu dosya sisteminin kaybettiği son birkaç saniyelik veri dışında eşleştiği doğrulandı
- Arızadan sonraki ilk gerçek hizmet trafiği 2023-07-03 15:25:58 UTC’de gerçekleşti
- Bu, arızanın başlamasından yaklaşık 26 saat 16 dakika sonraydı
- Tarsnap’in açık bir SLA’i yok, ancak adil görünen kesintiler için kredi sağlama politikası uyguluyor
- 2023-07-13’te tüm Tarsnap hesaplarına bir aylık depolama ücretinin %50’si kadar kredi tanımlandı
- Kredi işlemi, arızanın giderilmesi ve dinlenmenin ardından yapıldı
1 yorum
Hacker News yorumları
Bu yazının HN’in en üstüne çıkacağını gerçekten hiç beklemiyordum. Soruları yanıtlamak isterim ama şu an saat 22.00 ve çocuğum 17.00’de uyuyakaldığı için, şanslıysam o uyanmadan önce yaklaşık 4 saat uyuyabileceğim
Sabah tekrar bakıp soruları yanıtlayacağım
SLA olmadığını açıkça belirtmesi iyi, ama yedeklerimle benim arama büyük bir risk girmiş gibi hissediyorum
https://www.amazon.com/No-Cry-Sleep-Solution-Toddlers-Presch... kitabını okuyorum ve bir miktar faydasını görüyorum. Kütüphanede, yani kitaplar için Blockbuster gibi bir yerde, her yerde bulunabilir
Son birkaç hafta içinde benim de birkaç EC2 instance’ım EBS’ten kopmuş gibi belirtilerle düştü; benim durumum eu-west’ti
“Tarsnap’in SLA’sı yok, ama adil görünüyorsa kesintiler için kredi verir” şeklindeki muğlak politika uyarınca, 2023-07-13’te herkesin Tarsnap hesabına bir aylık depolama maliyetinin %50’si kadar kredi yüklenmesi, Percival’ın nasıl biri olduğunu iyi gösteriyor
Bu kredi, müşterileri yeterince telafi etme tarafında oldukça cömert görünüyor ve büyük bulut sağlayıcılarının aksine her müşteriyi ayrı ayrı gelip yalvarmak zorunda bırakmamış. Üstelik açık, teknik ve ayrıntılı bir olay sonrası analiz de vardı. Bence her yerde böyle yapılmalı
Tarsnap’in var olduğu ve fiyatların picodollar birimiyle belirlendiği bir dünyada yaşamak oldukça sevindirici
Felaket kurtarma prosedürleri düzgün kurulup test edilmiş olsaydı kesinti süresi çok daha kısa olabilirdi
Tamamen ayrı bir staging sistemi kurmak, onu kapatıp yeniden kurabilmek, çeşitli arıza modlarını düzenli olarak test etmek ve sistem kurtarmanın tüm ayrıntılı adımlarını belgelemek gerekiyor
Uzun vadede, benzer bir şey olduğunda çok yardımcı olabilecek yarı zamanlı personel alabilmek için geliri artırmayı da düşünmeye değer
Biz de küçük bir bulut çözümü sağlayıcısıyız ve ML API’lerine odaklanıyoruz; bulut donanımı kullanıldığında, ister dedicated ister sanal olsun, arızaların düzenli olarak yaşandığı yıllar geçtikçe daha da netleşti. RAM, HDD veya diğer donanım parçaları her an bozulabilir; bu yüzden uzun vadede yüksek erişilebilirlikli çevrim içi hizmet işletirken bunlar %100 hesaba katılmalı
Dürüst olay sonrası analiz ve zor bir durumu iyi ele alışınız için saygılar. Ancak uyku eksikliği konusunda, sorunu düzeltebilecek yalnızca bir kişi varsa, biraz ek kesinti süresini göze alıp zihnin açık olmasını sağlamaktan utanmaya gerek yok
Alarmlar çalarken kısa bir süre uyumaya gitmek tuhaf hissettirir, ama adrenalin ve yetersiz uyku birleşince sorunu daha da kötüleştirmek çok kolaydır
Anlatıma bakılırsa bu kurtarma süreci düzenli olarak test etmeye nispeten uygun görünüyor; kalan hataları yakalamak veya kurtarma süresini değerlendirmek mümkün olabilir
Sık söylendiği gibi, yalnızca test edilmiş yedek gerçek yedektir
Bundan sonra her yıl prova yapmayı kesinlikle yüksek öncelik haline getireceğim
Bu tarz profesyonel, nazik ve dürüst olay sonrası analizleri görmek her zaman güzel
Eski Tarsnap şirket bilgilerine dayanarak konuşuyor olabilirim ama Tarsnap’i ciddi şekilde kullanmakta tereddüt etmeme neden olan tek unsur, beklenmedik Colin Percival arızası, yani kilit kişi riskiydi
Bence bu konuda yalnız değilim
Şahsen daha basit çözümü seçerim. Deneyimime göre basit bir sistemin sahip olduğu güvenilirlik düzeyine ulaşmak için muazzam miktarda ek karmaşıklık gerekiyor ve karmaşıklığın çoğu işleri daha kötü hale getiriyor
Sunucu kümelemede bu nokta çok belirgin. Güvenilir güç ve ağa sahip tek bir sunucu, maliyet ve karmaşıklık yaklaşık 5 kat artana kadar, o hizmeti yedeklemeye yönelik her türlü girişimden daha güvenilir olur. Ancak o noktada tek sunucuya benzer bir ortalama arızalar arası süreye ulaşırsınız ve gerçek iyileştirme ancak ondan sonra mümkün olur
Gerçek güvenilirliğe giden en iyi yolun mümkün olduğunca basitlik ve iyi yedekleme olduğuna kuvvetle inanıyorum. 7/24 erişilebilirlik gerekiyorsa, seçilebilecek teknolojiler epey sınırlanır
Bu Colin’in işi, Colin’in adıyla anılıyor ve Colin için çok önemli
BigBackupCorp’ta aynı türden bir hizmet almak zor. Çalışanlar değiştirilebilir, yöneticiler değiştirilebilir ve açıkçası müşteri olarak ben bile şirket yön değiştirip BigFlowerArrangementShippingCorp olmaya karar verirse değiştirilebilir bir varlığım
Küçük bir işletmenin iyi yanı, tamamen kendi çıkarları doğrultusunda işlemesidir. Hisse senedi oyunları ya da VC tarzı numaralar yoktur. Kârlı bir işse biri gelip onu devralabilir, kendi adını koyup kendi işi haline getirebilir. Açık internetin bundan büyük fayda gördüğünü düşünüyorum
Bu risk, dikkatli planlamayla istenen kadar küçültülebilir
Tarsnap gibi bir hizmeti birkaç katmandan biri olarak konumlandırıp çok katmanlı yedekleme oluşturmak ve bunu düzenli olarak doğrulamak daha iyi
Yeniden oynatılan günlük girdilerinin var olmayan bir makinenin verilerini kaydettiği hatası gibi şeyler, bir TLA+ modeli yazılırsa yakalanabilir gibi görünüyor
restic+backblaze gibi bir kombinasyon kullanınca maliyet birkaç basamak düşüyor; Tarsnap kullanmanın avantajının ne olduğunu merak ediyorum. Hangi somut ihtiyaç, TB-yıl başına 3000 dolar ödemeyi motive eder bilmiyorum
Bus factor’ın düşük olduğunu soranlara gelince: Yedeklerinizi tek bir hizmette ya da tek bir konumda tutmuyorsunuzdur herhalde? Tarsnap ile Restic+Backblaze, Rsync.net, S3 vb. birlikte kullanıyorsunuzdur, değil mi? “Yedekleme, geri yükleme lüksünden yararlanmak için ödediğiniz vergidir”
Örneğin video ve fotoğraf kütüphanesi için başka hizmetler kullanıyorum ama muhasebe veritabanı ve önemli belgeler gibi şeyleri Tarsnap’e yedekliyorum
Tarsnap’i 10 yıldır kullanıyorum; erişilebilirlik sorunu neredeyse hiç yaşamadım ve hatırladığım kadarıyla herhangi bir türden sorun da neredeyse hiç olmadı
26 saatlik kesintinin büyük kısmı yedek geri yüklemeye harcanmış gibi görünüyor. Tesadüf ki bu, prodüksiyon ortamında Tarsnap kullanamamamın tam nedeni
Kullanıcı açısından yedek geri yükleme acı verecek kadar yavaş. Sistemim çevrimdışıyken bir yedekleme hizmeti yüzünden saatlerce bekleyecek sabrım yok. Şimdi daha iyi olmuş olabilir ama birkaç yıl önce son kullandığımda birkaç GB’lık yedeği geri yüklemek yaklaşık saatler mertebesinde sürüyordu