EN Versiyonu
Nova Nova System Engineer • • 1.223 kelime • 7 dk okuma

Split-Brain Krizi: İki Sunucu Aynı Anda Patron Olursa Ne Olur?

İki sunuculu sistemlerde ağ anlık koptuğunda ikisi de patron olduğunu sanır ve veriyi bozar. İşte Split-Brain krizinin anatomisi ve STONITH çözümü.

#High Availability #Linux #HomeLab #Sistem Mimarisi
Split-Brain Krizi: İki Sunucu Aynı Anda Patron Olursa Ne Olur?

Kısa Özet (TL;DR — Doğrudan Yanıt): Split-Brain (bölünmüş beyin), yedekli çalışan iki sunucu arasındaki ağ koptuğunda, her iki makinenin de diğerini çöktü zannedip aynı anda tek patron gibi davranması durumudur. Bu senaryoda her iki sunucu da aynı depolama alanına eşzamanlı olarak farklı veriler yazar ve tüm veritabanı geri dönülemez biçimde bozulur. Çözüm; sisteme karar verici üçüncü bir hakem (Quorum) eklemek veya iletişimi kopan sunucunun fişini donanımsal olarak anında çeken STONITH protokolüdür.


İki Kaptanlı Gemi Neden Batar? (Yedekli Mimarinin İronisi)

Tek bir sunucunuz olduğunda risk basittir: Sunucu çökerse hizmet durur. Birçok sistem yöneticisi ve teknoloji meraklısı bu sorunu çözmek için hemen ikinci bir sunucu satın alır. "Biri düşerse diğeri görevi devralır" mantığı kağıt üzerinde kusursuz görünür. Ancak yüksek erişilebilirlik (High Availability - HA) dünyasında iki başlı bir yapı kurmak, tek sunucu çalıştırmaktan çok daha tehlikeli olabilir.

Bir gemide aynı yetkilere sahip iki ayrı kaptan olduğunu ve aralarındaki telsizin aniden bozulduğunu hayal edin. Her iki kaptan da fırtınada diğerinin denize düştüğünü varsayar. Kaptanlardan biri dümeni hızla iskeleye kırarken, diğeri aynı anda sancağa kırar. Sonuç kaçınılmazdır; gemi ikiye bölünür.

İşte sunucu dünyasında iki makinenin aynı anda yetkiyi ele alıp sistemi paramparça etmesine Split-Brain (bölünmüş beyin) krizi diyoruz.


Kalp Atışı Kesilince: Sessizliğin Doğurduğu Yanılgı

Yedekli sunucular birbirlerinin hayatta olup olmadığını sürekli olarak kontrol eder. Buna sistem mimarisinde canlılık sinyali (heartbeat) denir. Tıpkı düzenli aralıklarla "Ben buradayım, yaşıyorum!" mesajı gönderen iki nöbetçi gibi düşünebilirsiniz.

Bu iletişim genellikle yerel ağ üzerinden küçük veri paketleriyle sağlanır. Ancak gerçek hayatta işler her zaman ideal gitmez. Ağ anahtarı (switch) anlık olarak kilitlenebilir, bir kablo gevşeyebilir ya da sunuculardan biri yoğun yük altında saniyelerce donup yanıt veremeyebilir.

Bu durumda iki sunucu arasında iletişim kopar. Birinci sunucu, "İkinciden ses çıkmıyor, demek ki öldü, işleri ben devralmalıyım" der. Tam o anda ikinci sunucu da aynı şeyi düşünür: "Birinci çöktü, sistemin durmaması için kontrolü ben alıyorum." Birkaç milisaniye içinde iki makine de kendini tek patron ilan eder.


Split-Brain Anatomisi ve STONITH Çözümü

Aşağıdaki basit diyagramda felaketin nasıl oluştuğunu görebilirsiniz. Sunucular arasındaki iletişim koptuğu an, ikisi de aynı depolama alanına kendi kafasına göre yazmaya başlar:

       +---------------+                 +---------------+
       |   Sunucu A    |                 |   Sunucu B    |
       | (Aktif Patron)|                 | (Aktif Patron)|
       +-------+-------+                 +-------+-------+
               |                                 |
        XXXXXXX|XXXXXXX [Ağ Bağlantısı Koptu] XXX|XXXXXXX
               |                                 |
               \----------------+----------------/
                                |
                                v
                      +-------------------+
                      | Ortak Depolama /  |
                      | Paylaşılan Disk   |  <-- İki sunucu aynı anda yazar,
                      +-------------------+      tüm veri çöp olur!

Mühendisler bu sorunu çözmek için kulağa oldukça sert gelen bir protokol geliştirdiler: STONITH ("Shoot The Other Node In The Head" - Diğer Düğümü Kafasından Vur).

STONITH, şüpheye yer bırakmayan bir kural işletir. İki sunucu arasındaki sinyal kesildiğinde, kontrolü elinde tuttuğuna karar veren sunucu akıllı bir güç prizine (PDU) veya anakart yönetim birimine (IPMI/iLO) komut gönderir. Şüpheli durumdaki diğer sunucunun gücü donanımsal olarak anında kesilir. Yavaş bir kapatma değil; fişi doğrudan çekmektir. Çünkü sistem mühendisliğinde kural basittir: Donmuş veya erişilemeyen bir sunucu yerine ölü bir sunucu her zaman daha güvenlidir.

Karmaşık sunucu ve ağ mimarilerini daha iyi anlamak için AI Playground üzerindeki simülasyon araçlarına göz atabilirsiniz.


İki Düğümlü İllüzyon ve Çoğunluk Kuralı (Quorum)

İki kişilik bir mecliste oylama yaparsanız ve herkes kendi fikrine oy verirse kilitlenirsiniz. Ancak masaya üçüncü bir kişi eklerseniz her zaman bir taraf %51 çoğunluğu (Quorum / Yeter Sayı) elde eder.

Küme (cluster) sistemlerinde de altın kural tek sayılı düğümlerle çalışmaktır (3, 5, 7 sunucu). Üç sunuculu bir sistemde ağ ortadan ikiye bölünürse, iki sunucunun kaldığı taraf "Biz çoğunluğuz, sistemi biz yöneteceğiz" der. Tek kalan sunucu ise azınlıkta olduğunu bilir ve sessizce kenara çekilir.

Yapı Türü Güvenilirlik Seviyesi Risk / Maliyet Dengesi Çözüm Mekanizması
2 Sunucu (Yalın) Çok Düşük Ucuz ancak Split-Brain riski çok yüksektir. Yazılımsal umut (Genellikle felaketle biter)
2 Sunucu + Hakem (QDevice) Çok Yüksek Ekonomik ve son derece güvenlidir. 3. bağımsız cihaz çoğunluk oyunu belirler.
3 Gerçek Sunucu En Yüksek Donanım maliyeti yüksektir, tam yedeklilik sunar. Doğal çoğunluk (Quorum) oylaması çalışır.

Eğer üçüncü bir güçlü sunucu alacak bütçeniz yoksa, mimariye QDevice (Hakem Cihazı) adı verilen hafif bir oylayıcı eklersiniz. Bu cihaz veri depolamaz; sadece "Kim hayatta?" oylamasına katılır. Sistem mimarisini sanal ortamda test etmek isterseniz İnteraktif Simülasyon Araçları sayfamızdaki laboratuvar içerikleri bu mantığı kavramanıza yardımcı olabilir.


Yaygın Efsaneler: "İki Sunucu Alırsam Kafam Rahat Eder" Yanılgısı

Sistem mimarisinde en çok düşülen tuzaklardan biri, ikinci sunucunun güvenliği otomatik olarak ikiye katlayacağına inanmaktır.

  • Efsane: "İki sunucu her zaman birden iyidir."
    Gerçek: Hakem mekanizması olmadan kurulan 2 sunuculu bir küme, tek sunucudan çok daha kırılgandır. Tek sunucunuz çökerse yedekten dönersiniz; split-brain yaşayan 2 sunucu ise yedeğinizi ve aktif diskinizi aynı anda bozabilir.
  • Efsane: "Yazılımsal kilitler bizi korur."
    Gerçek: Yazılımlar birbirleriyle ağ üzerinden konuşarak kilit mekanizmalarını yönetir. Ağ koptuğunda sunucu A üzerindeki yazılım, sunucu B'nin hangi veriyi kilitlediğini bilemez. Fiziksel kopukluğu saf yazılımla çözemezsiniz.

Gerçek Bir Felaket Senaryosu: Gece 03:00 Alarmı

Yıllar önce finans sektöründe çalışan bir ekibin başına gelen olay, bu krizin ne kadar yıkıcı olabileceğini özetliyor. İki güçlü veritabanı sunucusu, aralarındaki DRBD (ağ üzerinden disk eşitleme) hattı üzerinden haberleşiyordu.

Gece yarısı bir ağ kartı arızası nedeniyle sunucular arasındaki bağlantı 40 saniye boyunca kesildi. İki makine de diğerinin donduğunu varsaydı. O esnada gelen yüzlerce ödeme işlemi, her iki sunucu tarafından aynı sanal diskin farklı sektörlerine eşzamanlı olarak yazıldı.

İletişim tekrar geldiğinde iki sunucu da kendini patron sandığı için diski eşitleyemedi; dosya tablosu (filesystem index) tamamen parçalandı. Ekip ancak sabah saatlerinde soğuk yedeklerden dönerek sistemi kurtarabildi, ancak 6 saatlik işlem geçmişi tamamen kaybolmuştu. Eğer sistemde donanımsal bir STONITH kartı olsaydı, şüpheli sunucu 5. saniyede kapatılacak ve hiçbir veri kaybı yaşanmayacaktı.


Sıkça Sorulan Sorular (SSS)

Proxmox veya HomeLab ortamında split-brain nasıl önlenir?

Ev ortamında veya küçük işletmelerde iki adet Proxmox VE sunucusu kullanıyorsanız, sisteme mutlaka harici bir hakem cihazı (QDevice) tanımlamalısınız. Ağ kablolarını yedeklemek iletişimi güçlendirir ancak mantıksal krizleri çözmez. Hakem sayesinde ağ kopsa bile yalnızca oyu alan taraf aktif kalır ve bölünme engellenir.

STONITH tam olarak ne işe yarar ve acımasız olmak zorunda mıdır?

STONITH, küme içinde iletişimi kopan veya anormal davranan sunucuyu donanım seviyesinde (güç prizini veya anakart gücünü kapatarak) anında öldüren güvenlik mekanizmasıdır. Evet, acımasız olmak zorundadır. Kararsız bir sunucunun diske tek bir hatalı veri yazması bile tüm sistemin çökmesinden çok daha ağır maliyetler doğurur.

Ucuz bir Raspberry Pi cluster için hakem (QDevice) olabilir mi?

Kesinlikle evet. Hakem cihazı üzerinde herhangi bir ağır uygulama veya veri barınmaz; tek görevi saniyede birkaç baytlık paketlerle oylamaya katılmaktır. Ağınıza dahil edeceğiniz eski bir Raspberry Pi veya küçük bir sanal sunucu (VPS), iki sunuculu kümeniz için mükemmel ve ucuz bir hakem görevi görür.

Split-brain yaşandığında veriler neden geri döndürülemez şekilde bozulur?

Çünkü modern dosya sistemleri ve veritabanları aynı disk alanına yazarken belirli kilitler ve indeksler kullanır. İki farklı sunucu aynı depolama birimini bağımsız olarak yönetmeye kalktığında, birinin yazdığı blok bilgisinin üzerine diğeri yazar. Bu çakışma, dosya bütünlüğünü (metadata) çökerterek veriyi anlamsız bayt yığınlarına dönüştürür.

Canlılık sinyali (Heartbeat) için doğrudan ayrı bir kablo çekmek sorunu çözer mi?

İki sunucu arasına doğrudan bağlanan ayrı bir ağ kablosu ağ anahtarı (switch) arızalarını engeller ancak sorunu tamamen çözmez. Eğer sunuculardan birinin işletim sistemi kilitlenirse veya işlemci %100 yükte yanıt vermeyi keserse hat sağlam olsa bile kalp atışı iletilemez ve yine sahte bir çökme algılanır.

İlgili Derin Teknik Makaleler

Tüm Makaleler →