“Docker Nedir?” yazımda “Docker’ı öğrendikten sonra sonraki adım Docker Swarm öğrenmek olacaktır” demiştim. Bu yazıda kısaca Docker Swarm’dan bahsetmek istiyorum.
Eğer Docker adını ilk defa duyuyorsanız veya daha detaylı bilgi edinmek istiyorsanız önce “Docker Nedir?” başlıklı yazımı okumanızı öneririm.
Docker Swarm Nedir?
Docker Swarm, fiziksel veya sanal sunucuların bir küme halinde Docker uygulamalarını çalıştırabildikleri sunucu tarlasına Docker’ın verdiği isim. Bu makineleri bir küme haline getirdikten sonra konteynerlerinizi Docker’da alıştığınız gibi, ama sadece tek bir makine değil bütün bu makine kümesi üzerinde kullanabilecekseniz.
Swarm’ın sağladıkları tabi ki bu kadarla sınırlı değil. Swarm ile Hangi konteyner hangi makinede çalışacak? Hangi konteyner’den kaç kopya çalışacak? Makinelerden biri düştüğünde onun çalıştırdığı konteynerler nerede tekrar ayağa kaldırılacak? gibi soruların cevaplarını belirleyip kararlarıızı Swarm’a anlatırsanız o gerisini halledecektir.
Docker Swarm ile yoğun sunucu yüklerini istediğiniz şekilde dağıtan, bir sorun olması halinde sistemin sürekli çalışır halde kalmasını sağlayan bir alt yapı oluşturmuş olacaksınız.
Docker Swarm Ne için Kullanılır?
Docker Swarm bir konteyner orkestrasyon aracı. Orkestrasyon kelimesi ilk duyulduğunda pek anlam ifade etmese de, farklı boyutlar, işlevler ve fiziksel özelliklerdeki enstrümanlar ve sanatçılardan oluşan bir orkestranın uyum içinde ve kusursuz performans göstermesini sağlayan bir orkestra şefini hayal ettiğinizde Swarm’ın işlevini daha rahat anlayabilirsiniz.
Docker Swarm size şu avantajları sağlayacak
- High Availability (Yüksek kullanılabilirlik)
Sunuclarınızdan veya konteynerlerinizden biri çökerse yerini hemen bir başkası devralacaktır. - Yük dağılımı
Yük birden fazla sunucuya bir uyum içerisinde dağıtılacaktır.
Docker Swarm kurulumu için neye ihtiyacım var?
Swarm’da makinelerin temel olarak iki rolü var, İşçi ve Yönetici. Ben bu yazıda Yönetici ve İşçi yerine orijinal terimler olan Manager (Yönetici) ve Worker (İşçi) terimlerini kullanacağım.
Swarm’da temel olarak istediğiniz kadar Worker node’unuz ve an az bir Manager node’unuz olması gerekir. Tek bir manager sadece test amaçlı kabul edilebilir çünkü tek manager’lı bir sistem yüksek kullanılabilirlik (high availability) özelliğine sahip olmaz. Manager node çökerse sistem sahipsiz kalır, mevcut çalışan görevler çalışmaya devam eder ama yeni node’lar ve görevler eklenemez veya çıkartılamaz. Sistemin çalışmaya devam etmesi için en az 3 Manager Node olması gerekir.
Peki neden 2 değil 3 yönetici?
RAFT Konsensus nedir?
Hata toleranslı dağıtık sistemlerdeki en temel sorun konsensusa varmaktır. Konsensus kısaca birden çok sunucunun bir değer konusunda mutabık olmasıdır. Hangi değerin doğru olduğuna karar verdiklerinde o karar son karar olarak kabul edilir. Konsensus algoritmaları temel olarak sunucuların çoğunun ulaşılabilir durumda olmasını dayanır. Eğer çoğunluk yoksa sistem kitlenir ama hiç bir zaman yanlış bir cevap vermemiş olur.
Tam olarak bu örnekteki gibi olmasa da anlaşılmayı kolaylaştırmak için örnek bir senaryo oluşturalım.
Örneğin 3 Manager Node’unuz var, lider node’unuz düştü, o anda sistemin görüntüsüne “A” diyelim. Diğer iki manager sistemi çalıştırmaya devam etti, sistemin durumu değişti, yeni görevler başlatıldı, çöken manager’da çalışan işler dağıtıldı vs. Yeni durumuz oldu “B”. Daha sonra çöken sunucu kendine geldi ve ona göre durum “A” ama çoğunluk “B” dediği için B’den devam edilir.
Peki ya 2 yönetici olsaydı? Biri A derken, diğeri B diyecekti. Hangisini doğru kabul edecektik. İşte bu nedenle hata toleranslı bir sistem oluşturmak için en az 3 manager node’umuz olması gerekir.
Peki 3 değil 4 manager olsa bize ekstra bir avantaj sağlar mıydı?
Hayır.
Peki ya 5?
Kesinlikle evet.
4 Manager ile 5 Manager’ın farkı nedir?
5 Manager’ımız olursa bunlardan ikisi aynı anda çökerse, diğer 3’ü çoğunluk sağlamaya devam eder. 4 yöneticimiz varsa 2’si çöktüğünde diğer ikisi çoğunluğu sağlayamazlar. Yani 3 yönetici’de olsa, 4 yönetici’de olsa en fazla birini kaybedebiliriz. Ama 5 yöneticiye çıkarsak, ikisi gitse bile sistem doğru şekilde çalışmaya devam eder.
Yine hayali örneğimize gelirsek, 4 sunucu’dan 2’si gitti, daha sonra 1’i geri geldiğinde o “A” derken diğerleri “B” durumundayız diyecekler. Bu çoğunluk değil mi? Hayır değil, çünkü çöken diğer sunucu’nun ne diyeceğini bilmiyorlar, eğer o da “B” diyecekse tamam, ama ya “A” diyecekse?
Özetle hata toleransı açısından baktığımızda tek sayılarda manager node olması yeterli. Kural 1: Manager node’larımız tek sayıda olacak
Kural 2: N node’dan oluşan bir swarm en fazla (N-1)/2 adet manager node’un çökmesini tolere edebilir, planımızı buna göre yapmalıyız.
Kural 3: Aslında katı bir kural değil ama Doker bir swarm için en fazla 7 manager olmasını tavsiye ediyor.
Docker Swarm Nasıl Kurulur?
Docker Swarm kurulumu inanılmaz kolay! Hatta kurulum denemez bile! İlgili makinelere Docker kuruyor, birinde Swarm’ı başlatıyor, ve diğer node’ları ona ekliyorsunuz.
#Lider Manager node'umuzda şu komutu çalıştırıyoruz
$ docker swarm init --advertise-addr 192.168.99.121
İlk node’umuzda yukarıdaki kodu çalıştırdıktan sonra diğer node’ları bu swarm’a eklemek için çalıştırmamız gereken komutu çıktı olarak verecektir. (Kaybederseniz daha sonra ekrana tekrar bastırabilirsiniz.).
İlgili komutu worker node’lara yapıştırdığımızda o makineler de swarm’a katılmış oluyorlar.
Denemek için yerel makinenizde 3 sanal makine (Docker’ın bu işi kolayulaştıran Docker Machine aracı var), veya bulutta çalıştıracaınız 3 sanal makine üzerine kurabilirsiniz. Fiziksel makinelerde kullanım mantık olarak tamamen aynı olsa da çok özel durumlar dışında sanal makineler işimize görüyor. Açıkçası ben hiç fiziksel docker swarm’u kurmadım. (Bu iş için ayıracak 3 ekstra makinem de yok 🙂 )
Docker Swarm hakkında genel bilgi edindik, swarm’umuzu kurduk. Swarm’la ilgili ince ayarlar ve swarm yönetimi için çok pratik bir araç olan Portainer ‘ı ise bir başka yazıya bırakıyorum.
Bu Yazıda Yapılan Değişiklikler
- 11.05.2022: Yazı özeti düzenlendi.