Failover Cluster Yapısına Quorum Disk Witness Ekleme

Bu makalede mevcut Failover Cluster yapısı kurulu olan bir sistemde Quorum Disk Witness ekleme işlemini ele alacağız. Quorum disk kurulumuna geçmeden önce Quorum yapısını ne olduğundan bahsedeyim.

Failover Cluster çözümlerinde en kritik bileşenlerden biri Quorum (Nisap/Çoğunluk) mekanizmasıdır. Bu yapı, küme (cluster) içerisindeki sunucuların hangilerinin aktif kalacağını, hangilerinin servis dışı kalması gerektiğini belirleyen bir karar sistemidir.

Quorum, bir cluster yapısının “sağlıklı” kabul edilebilmesi için sahip olması gereken minimum oy sayısını ifade eder. Temel amacı, sunucular arasındaki iletişim koptuğunda (Network Partitioning) her iki tarafın da aynı anda “ben asıl sunucuyum” diyerek verilere zarar vermesini (Split-Brain) engellemektir.

Failover Cluster’da her bir node (sunucu) 1 oy hakkına sahiptir. Sistemin ayakta kalabilmesi için toplam oyların salt çoğunluğuna ($n/2 + 1$) ihtiyaç vardır.

  • Çift Sayıda Node (Örn: 2 Node): Toplam oy sayısı 2’dir. Çoğunluk için 2 oy gerekir (N/2 + 1 = 2$). Eğer bir sunucu düşerse kalan sunucu 1 oyda kalır ve çoğunluğu sağlayamadığı için tüm cluster servislerini durdurur. İşte bu noktada Witness (Tanık) devreye girerek fazladan +1 oy sağlar.
  • Tek Sayıda Node (Örn: 3 Node): Toplam oy sayısı 3’tür. Çoğunluk için 2 oy yeterlidir. Bir sunucu düşse bile kalan iki sunucu çoğunluğu korur ve sistem çalışmaya devam eder.

Cluster yapısındaki oy dengesini sağlamak için kullanılan üç temel Witness modeli bulunmaktadır:

1. Disk Witness (Disk Tanığı)

Küme içerisindeki tüm sunucuların görebildiği, ortak bir depolama alanından (iSCSI, Fibre Channel vb.) ayrılan küçük bir disk bölümüdür.

  • Cluster veritabanının bir kopyasını üzerinde tutar.
  • Teknik olarak 512 MB yeterlidir, ancak modern sistemlerde standart olarak 1 GB veya performans/garanti amaçlı 5 GB ayrılması yaygındır.
  • Aynı anda sadece aktif olan (Owner) node bu diske yazabilir; diğer node’lar diski “Reserved” modunda görür.

2. File Share Witness (Dosya Paylaşımı Tanığı)

Ortak bir disk alanı yerine, network üzerindeki bir dosya paylaşım yolunun (SMB) kullanılmasıdır.

  • Genellikle farklı lokasyonlarda bulunan (Multi-site) cluster yapılarında, lokasyonlar arası dengeyi sağlamak için üçüncü bir lokasyona kurulur.

3. Cloud Witness (Bulut Tanığı)

Microsoft Azure üzerinde bir Storage Account kullanılarak oluşturulan tanık modelidir. Fiziksel bir üçüncü lokasyona ihtiyaç duymadan, internet üzerinden oy hakkı sağlar.

Disk Witness Yapılandırmasının Teknik Detayları

Eğer sisteminizde paylaşılan ortak bir depolama birimi (SAN/iSCSI) varsa ve bu diskler cluster’a eklenmişse; Windows Failover Cluster mimarisi, node sayısına göre en küçük boyutlu diski otomatik olarak Disk Witness olarak atayabilir.

  • İki sunucu aynı milisaniyede ayağa kalkmaya çalışırsa, Quorum diskine ilk “SCSI Reservation” kilidini koyan sunucu liderliğini ilan eder ve servisleri üzerine alır.
  • Quorum yapılandırılmamış bir 2-node cluster’da, network hatası yaşandığında sistem “Split-Brain” riskine girmemek için kendini kapatır. Quorum bu riskin panzehiridir.

Witness, sunucuların (Node) kendi içindeki donanımsal çalışmasıyla değil, Cluster Servisi’nin (clussvc.exe) karar verme mekanizmasıyla ilgilidir.

Cluster servisi, her bir node üzerinde çalışan bir orkestra şefi gibidir. Bu şefin elindeki en büyük kural şudur: “Eğer toplam oyların yarısından fazlasına sahip değilsem, servisi durdurmalıyım.”

  • Witness Yoksa: 2 node’lu bir yapıda iletişim koptuğunda, her iki sunucudaki cluster servisi de “Bende 1 oy var, toplam 2 oy içinden çoğunluk değilim” der ve kendini kapatır (Stop-Service).
  • Witness Varsa: Sunuculardan biri giderse, kalan sunucu kendi 1 oyunu alır, Witness üzerindeki +1 oyu da “kilitler” (lock koyar). Toplamda 2/3 oya sahip olduğu için Cluster Servisi açık kalmaya devam eder.

Cluster servisinin açık kalması demek, üzerinde koşan SQL Server, File Server veya Sanal Makinelerin (VM) de hizmet vermeye devam etmesi demektir. Eğer servis “Quorum kaybedildi” diyerek kapanırsa, bu kaynakların hepsi “Off-line” durumuna düşer. Yani Witness aslında servislerin kapanmasını engelleyen bir emniyet kemeridir.

Sizin de belirttiğiniz gibi, Witness sunucuyu değil, Cluster’ın mantıksal bütünlüğünü korur. Sunucu Windows olarak açık kalsa bile, cluster servisi kapandığında o sunucu artık kümenin bir parçası değildir ve hiçbir cluster kaynağını yönetemez.

Diyelim ki iki sunucu da fiziksel olarak açık ve sapasağlam çalışıyor (CPU, RAM ok). Ancak aralarındaki Heartbeat (kalp atışı) kablosu koptu.

  • Bu durumda iki sunucu da “diğer sunucu öldü” sanır.
  • Eğer Witness olmasaydı, hangisinin “haklı” olduğunu kimse bilemezdi.
  • Witness (disk veya file share) sayesinde, bu kaynağa ilk erişen sunucu cluster servisini ayakta tutar, diğeri ise “ben geç kaldım, çoğunluk onda” diyerek cluster servisini otomatik olarak kapatır.

Bu teori bilgilerden sonra şimdi uygulamalı bir şekilde Disk Witness yapımızı oluşturalım.

Benim elimde 3 sunucu bulunmaktadır. Bunlar active directory kurulu olan AD sunucusu, Sql Server ve AlwaysOn yapımızın olduğu S1 ve S3 sunucumuz bulunmaktadır. Bu 3 sunucum aynı domain içerisinde olan bir yapı. S1 ve S3 sunucum aynı cluster içerisinde birbirleriyle senkron bir şekilde çalışan bir yapı. Ayrı bir disk sunucusu tanımlamayıp AD sunucusu üzerinde bir 5 GB’lık boş bir disk yapılandırarak iSCSI yapısıyla sunucularımın bağlanmasını sağlayacağım. 3 sunucumunda birbirleriyle disk haberleşmesi için kullanacağı  farklı bir Ethernet bağlayacağım. Bu yapıların nasıl oluşturulacağı ile ilgili herhangi bir bilgi sahibi değilseniz FAILOVER CLUSTER KURULUM makalelerini baştan sonra  okumanızı  tavsiye ederim.

İlk başta 3 sunucuma farklı bir isimde Ethernet yapımı oluşturmuş oldum.

3 sunucum DISK_ETHERNET üzerinden aynı ip bloğundan haberleştiğini test etmiş oldum. Dikkat ederseniz aşağıdaki resimde görülen ip’lerin sunucu ip bloğundan farklı olduğunu görmekteyiz. (10’lu blok)

Bu haberleşmenin testini yaptıktan sonra AD sunucum üzerine tanımlamış olduğum 5 GB’lık null alanı tanımlayalım.

AD sunucumda run kısmına diskmgmt.msc yazıp disk management ekranımı açıyorum.

Gelen ekranda tanımlamış olduğum 5 GB’lık boş alanın geldiğini görmüş oluyorum. Tanımlanan bu alanı yapılandırma işlemine geçelim.

Offline üzerine sağ tıklayıp online yapısına alıyoruz.

Online yapısına aldıktan sonra Not Initialized üzerine sağ tıklayıp Initialize Disk yapıyoruz.

Gelen ekranda GPT seçiyoruz.

Daha sonra Unallocated alanına sağ tıklayıp New Simple Volume diyiyoruz.

Gelen ekranda next deyip bir sonraki adıma geçiyoruz.

Boş tanımladığımız 5 GB’lık alanda bir değişiklik yapmayıp next diyiyoruz.

Diskimize herhangi bir harf belirliyoruz.

NTFS ve 64K seçtikten sonra diskimize bir isim veriyoruz. Allocation unit size’da sql server için tavsiye edilen best practice 64K’dır. Biz burada quorum’u konfigure ediyoruz ama yine de 64 olmasında bir sakınca yok.

Next deyip gelen ekranda finish dedikten sonra işlemlerimi sonladırıyorum.

Disk Management ekranından diskimizin yapılandırıldığını görmüş oluyoruz.

Sırada S1 ve S3 sunucularımızın AD sunucusu üzerinde tanımlanmış olan disk yapısını görme işlemini yapmış olacağız.

İlk başta Cluster Node’ları hazır hale getirelim. S1 sunucusuna giriyorum.

Tools bölümünden iSCI Initiator kısmına tıklanıp bu servis aktif hale getirilir.

Açılan ekranda en sağda Configuration kısmından Initiator Name kısmını kontrol ediyoruz sunucu isminde  herhangi bir sıkıntı var mı.

Yukarıda S1 sunucusunda bu servisi çalıştırdıktan sonra şimdi sıra S3 sunucusunda bu işlemleri yapmakta.

Tools bölümünden iSCI Initiator kısmına tıklanıp bu servis aktif hale getirilir.

Açılan ekranda en sağda  Configuration kısmından Initiator Name kısmını kontrol ediyoruz sunucu isminde  herhangi bir sıkıntı var mı.

Şimdi ise bir iSCSI hedefi oluşturmaya çalışacağız. İlk başta yapacağımız iSCSI target server compunent yapısını oluşturmak bunun için server manager ekranından yeni bir role ekliyoruz.

AD sunucumun üzerinde bu ayarlamaları yapıyorum.

Gelen ekranda iSCI Target Server ve iSCI Target Storage Provider yapısını seçmek gerekiyor.

Next deyip gelen ekranda Yes’e tıkladıktan sonra install deyip kurulum işlemlerini yapıyorum.

Kurulum işlemi başarılı bir şekilde tanımlanmış olur. Target compunent’lerimiz yüklendi. Server Manager>File and Storage Services> iSCSI kısmına girilir. Bu işlemleri hatırlatmak adına AD sunucumda yapıyorum.

To create an iSCI virtual disk… bölümüne tıklandığında aşağıdaki ekran görüntüsü karşımıza gelmektedir. Burada Quorum olarak tanımladığımız disk karşımıza gelmiş bulunmakta. Tanımlamış olduğum E diskimi seçip Next deyip bir sonraki aşamaya geçiyorum.

Gelen ekranda sanal diskime bir isim veriyorum.

Normalde fixed size seçilmesi gerekmektedir. Test ortamım olduğu için Dynamically expanding yapısını seçiyorum.

Gelen ekranda yeni bir yapılanma oluşturacağım için  new iSCS target kısmını seçip next diyiyorum.

Gelen ekranda bir isim verdikten sonra next deyip bir sonraki aşamaya geçiyorum.

Hedefteki sunucularımı eklemek için add kısmına tıklıyorum.

Enter a value for the selected type kısmını seçtikten sonra type kısmından ip,iqn,dnsname,mac adress kısımlarını seçebiliriz. Bunlar hedefteki sunucularımızı ne olarak tanımlamak istiyorum ekranı. Örneğin ip seçilip S1 ve S3 sunucularının ip adres’leride girilebilir. Girilecek ip adresi DISK_ETHERNET ip adresi.

Bu ekranda bizden IQN isimlerimizi teker teker istiyor. Çünkü türünü böyle seçtik. Bunun için S1 ve S3 sunucusunda iscsi initiator kısmına girip oradan almış olduğumu kısımları buradan ekliyoruz.

S1 sunusunda server manager>tools bölümünden iscsi initiator kısmına tıkladığımızda configuration bölümünden Initiator Name kısmındaki değeri alıp yukarıdaki Value kısmına yapıştırıyoruz.

İnitiator name kısmından ilgili yeri kopyalayıp aşağıdaki value bölümüne  yapıştırıyoruz.

Aynı işlemleri ikinci sunucu içinde yapıyoruz.

Gelen ekranda herhangi bir işlem yapmadan bir sonraki aşamaya geçiyoruz.

Gerekli kontrolleri yaptıktan sonra create deyip işlemleri tamamlıyoruz.

Başarılı bir şekilde işlemlerin gerçekleşmiş oldu.

AD sunucumda başarılı bir şekilde kurulum yaptıktan sonra şimdi sıra geldi S1 ve S3 sunucu konfigürasyonda.

AD sunucusunda bu işlemleri yaptıktan sonra  S1 ve S3 sunucusunda server manager bölümünde tools sekmesi altında bulunan iSCSI Initiator kısmına tıkladıktan sonra gelen ekranda Targets kısmında hedef sunucunun yani AD  sunucusunun  disk yapılanması için verdiğim ip adresi yazılmaktadır. Bu verilen ip ikinci oluşturduğum ethernetin ip bloğunda olan bir ip adresi.

İp adresi yazılıp quick connect denilir.

Gelen ekranda iscsi target seçilir done işlemine alınır.

Gelen ekranda bağlanmasına rağmen işlemimiz garanti olsun diye tekrardan connect yapısına tıklıyorum. Normalde Status kısmında inactive yazmaktadır.

Gelen connect to target kısımında advanced sekmesine tıklanır. Buranın bir kere açılması gerekmektedir. Bazen hata verebilir.

Önümüze gelen ekranda herhangi bir değişiklik yapmayıp ok tuşuna basıyoruz.

Enable multi-path kısmının seçilmesi gerekmektedir.

Bu şekilde işlemlerimi tamamlıyorum.

Aynı işlemleri ikinci sunucum içinde yapıyorum yukarıdaki yapının aynısı.

Bu adımlardan sonra şimdi ise bakalım S1 ve S3 sunucusuna disklerimiz lun olarak tanımlanmış durumda .

S1 sunucumdan disk yapılanmasını yapıyorum. Bunun için run kısmına diskmgmt.msc yazıyoruz.

Disk sunucumuzdan tanımlamış olduğumuz disk’in geldiğini görmüş oluyoruz.

Bu disk kurulumunu yapalım. Önceki makalelerde disk kurulumu yaptığım için direk sonucu paylaşmak istedim.

S3 sunucusunda disk yapılandırılmasını yapalım S1 sunucusunda kurduktan sonra ikinci sunucuda(S3) sadece online’a almak yeterlidir.

Böyle bir hata çıkar önemsenmemesi gerekmektedir. Ok dedikten sonra tekrar online dediğimizde  QUORUM diskimiz gelmiş olacak. E diski neden geldi çünkü DISK sunucumuzda bu E olarak tanımlanmış.

Failover cluster ekranından witnes olmadığını gözlemlemekteyiz.

Failover cluster ekranında DISK_ETHERNET ethernetinin geldiğini görmüş oluyoruz.(Cluster Only)

Şimdi disk ekleme işlemlerini yapacağız. Failover Cluster Manager’a gelip sağ tıklayarak aşağıdaki gibi Add Disk diyoruz.

Gelen ekranda oluşturmuş olduğumuz diski seçiyoruz.

Not: Şunu belirtmek gerekirsek Quorum Diskimiz değişebilir. Yeni bir quorum disk eklemek istediğimizde bu adımlar yapılıp yeni olan disk failover clusterımıza eklenir. Daha sonra More Actions> Configure Cluser Quorum Settings bölümünde yeni olan diskim quorum olarak seçilmektedir. Eski olan quorum diskim Available storage olarak gözükecektir.

Disk yapımız gelmiş oldu dikkat edersek assigned to kısmında available storage olarak gözükmektedir. Bu yapıyı witness’a geçirmek için aşağıdaki adımların yapılması gerekmektedir.

Quorum disk yapısına geçiş için clusterımızın üzerine sağ tıklanır. More Actions> Configure Cluser Quorum Settings kısmına tıklanır.

Not: Quorum için tanımlanan disk üzerinde ClusterNameObject’imize yani aşağıdaki resimde görülen windows clusterımız olan SQLCLS’ye full control yetkisi ve bu disk üzerinde işlem yaptığımız kullanıcıya da full control yetkisi verilmesi gerekmektedir. Bu işlem için Bilgisayarımda ilgili diske sağ tıklıyoruz ve properties diyoruz. Security Tab’ından Edit diyerek Add diyoruz. Object Types kısmında Computer’ı seçmezseniz CNO’yu yetkilendiremezsiniz. Bir makalede gördüğüm için genel makale akışı bozulmasın diye not olarak belirlemiş oldum. Cluster yetkisi için ilgili makale okunabilir.

Gelen ekranda next denilip bir sonraki aşamaya geçilir.

Yeni bir Quorum yapacağımız için Advanced quorum configuration bölümüne tıklanır.

Not: Farklı bir diskimizin Quorum disk olarak devam etmesini istiyorsak Select the quorum witness olarak seçilip yeni diskimizin set edilmesi gerekmektedir. bu seçildikten sonra ikinci gelen ekranda Configure a disk witness seçilerek yeni olan diskimiz seçilebilir.

Gelen ekranda belirli node’lar veya tüm nodelar üzerinde quorum yapısını oluştururuz. Ben tüm node’larım üzerinde yapmak istiyorum. Next deyip bir sonraki adıma geçilir.

Disk Witness kuracağım için Configure a disk witness seçeneği seçilir.

Next dedikten sonra gelen ekranda mevcut eklemiş olduğumuz disk yapısı seçilir.

Next finish deyip işlemlerimi bitiriyorum.

Failover Cluster Manager bölümünde Disks kısmına geldiğimizde Assigned To kısmında Disk Witness in Quorum olduğunu görmüş bulunmaktayız.

Quorum diski, Windows Gezgini’nde (Bu Bilgisayar / My Computer) veya Disk Yönetimi’nde (diskmgmt.msc) aynı anda her iki sunucuda aktif/erişilebilir olarak görünmez.

Primary (Active) Node: Disk harfi veya Mount Point atanmışsa, diski yalnızca o anki “Owner” (Sahip) olan sunucu üzerinde görebilir ve içerisine erişebilirsiniz.

Secondary (Passive) Node: Disk, Disk Yönetimi’nde görünür ancak durumu “Reserved” veya “Offline” olarak işaretlenmiştir. Bu sunucu üzerinden diske veri yazamaz veya içeriğini göremezsiniz.

Eğer aktif olan sunucu çökerse veya Cluster grubunu manuel olarak diğer düğüme taşırsanız:

  1. Disk eski sunucuda “Offline” konuma geçer.
  2. Yeni “Owner” olan sunucuda otomatik olarak “Online” olur ve görünür hale gelir.

SQL Server Always On Availability Groups (AG), paylaşımlı bir disk yapısı (Shared Storage) kullanmaz. Ancak alttaki Windows Cluster yapısının sağlıklı çalışması ve Quorum (çoğunluk) sağlayabilmesi için bu diske ihtiyaç vardır.

  • Quorum diski, SQL Server’ın veri dosyalarını tutmaz.
  • Sadece Cluster konfigürasyon verilerini ve “vote” (oy) bilgisini tutar.
  • Bu nedenle, SQL Server servisinin her iki tarafta çalışıyor olması, bu diskin her iki tarafta aynı anda “Online” olmasını gerektirmez.

S3 sunucusuna bağlantı sağlandığında disk yapımızı görmekteyiz.

Not: Bu yapıda bir sunucuda görünür diğer sunucuda görünmez demiştik. Görünmeyen sunucunun disk management bölümünden bakıldığında reserved edildiği görülmektedir. Sağ tıklayıp online’a alarak yeni diski belirtebiliriz.

Not: Quorum disk kesin olarak hangi node’da çalışacağıyla ilgili kesin bir kural yoktur. Failover cluster üzerinden kendimizde manuel olarak node seçebiliriz. Sunucu üzerinde büyük bakım işlemlerinde çalışma olmaktadır. Failover cluster ekranında disk bölümünde ilgili disk yapımızı seçtikten sonra Move available storage kısmında manuel seçim işlemi yapabiliriz.

Not: Bir sunucuda Windows Update veya donanım bakımı yapacaksanız, Quorum diskini ve diğer cluster kaynaklarını manuel olarak diğer node’a çekmek en sağlıklı yöntemdir.

Aşağıdaki komut ile Current vote değerini 1 veya 0 değerine çekebiliriz.

# Önce oy hakkını tamamen çekin
(Get-ClusterNode "SQL22").NodeWeight = 0

# Birkaç saniye bekledikten sonra tekrar oy hakkı verin
(Get-ClusterNode "SQL22").NodeWeight = 1

Aşağıdaki komut ile hangi sunucu üzerinde oy hakkı olup olmadığını görebiliriz.

Get-ClusterNode | fl Name, NodeWeight, DynamicWeight

Not: Quorum disk ile birlikte toplam 4 oy gibi görünen sistemlerde genellikle biz yukarıdaki scriptteki gibi 1 görsek bile witness yapısının oy hakkı olmadığını veya Dynamic Quorum’ın farklı bir modda çalıştığını göstermektedir.

Bu makalede baştan sona kadar Failover Cluster  yapımızda QUORUM disk yapımızı ele almış olduk.

Başka makalede görüşmek dileğiyle..

Göklerde ve yerde ne varsa hepsi Allah’ındır. Allah’ın ilmi ve kudreti her şeyi kuşatmıştır. Nisa-126

Author: Yunus YÜCEL

1 thought on “Failover Cluster Yapısına Quorum Disk Witness Ekleme

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir