Bu makalede mevcut Failover Cluster yapısı kurulu olan bir sistemde File Shared Witness ekleme işlemini ele alacağız. Bu kuruluma geçmeden önce File Shared Witness yapısının ne olduğunu deyinip uygulamalı bir şekilde örneğimizi yapmış olalım.
Bir Failover Cluster yapısının hayatta kalması, sunucuların (node) birbirleriyle olan iletişimine ve “çoğunluk” kararına bağlıdır. Bu karar mekanizmasına Quorum denir. Quorum yapısının en kritik bileşenlerinden biri, özellikle coğrafi olarak dağıtık yapılarda kullanılan File Share Witness özelliğidir.
File Share Witness, cluster düğümlerinin (node) oy kullanabileceği, ağ üzerinde paylaşılan bir klasördür (SMB share). Disk Witness’tan en büyük farkı, ortak bir depolama birimine (SAN/LUN) ihtiyaç duymamasıdır.
- Temel Görevi: Cluster içindeki düğüm sayısı çift olduğunda (örneğin 2 veya 4 node), “artı bir oy” sağlayarak kilitlenmeleri önlemek.
- Veri Tutarlılığı: Bu paylaşım alanı içinde witness.log adlı bir dosya bulunur. Bu dosya, cluster konfigürasyonunun en güncel versiyon numarasını (sequence number) tutar.
Normal şartlarda bir sunucu çöktüğünde diğeri ayağa kalkar. Ancak asıl risk, “Partition-in-Time” veya “Split-Brain” durumudur.
- İki sunucu aynı anda kapandı ve aynı milisaniyede geri açılmaya çalışıyor. Eğer bir “hakem” (Witness) olmazsa, her iki sunucu da “Lider benim” diyerek diskleri kilitleyebilir veya veri tutarsızlığına yol açarak sistemi tamamen durdurabilir.
- Disk Witness, iki farklı lokasyon arasındaki disk senkronizasyonu nedeniyle riskli olabilir. FSW ise sadece bir ağ paylaşımı olduğu için, üçüncü bir lokasyona (örneğin Azure veya farklı bir ofis) konumlandırılarak gerçek bir felaket kurtarma senaryosu sağlar.
Cluster’ın “Online” kalabilmesi için toplam oyların yarısından bir fazlasına ihtiyacı vardır.
- Senaryo (2 Node + FSW):
- Toplam Oy: 3 (Node1 + Node2 + FSW)
- Gerekli Oy: 2
- Durum: Node1 çökerse; Node2 ve FSW toplam 2 oy ile çoğunluğu sağlar ve sistem kesintisiz devam eder.
- Durum: Bağlantı koptuğunda; FSW’ye ilk ulaşan node oyu kapar ve lider olur, diğeri kendini kapatır.
Bir FSW yapılandırırken dikkat edilmesi gereken teknik detaylar şunlardır:
- Erişilebilirlik: Paylaşım klasörü, cluster düğümlerinin her ikisinden de bağımsız bir sunucuda olmalıdır.
- Protokol: SMB 2.0 veya üzeri bir paylaşım kullanılmalıdır.
- İzinler: Cluster Name Object (CNO) yani cluster’ın ismi, paylaşılan klasör üzerinde Full Control yetkisine sahip olmalıdır.
- Lokasyon: En ideal senaryoda, FSW üçüncü bir fiziksel lokasyonda tutulmalıdır. Eğer Node A ve Node B farklı şehirlerdeyse, FSW her iki şehre de eşit uzaklıkta veya üçüncü bir veri merkezinde olmalıdır.
| Senaryo | Disk Witness | File Share Witness |
| Depolama | Ortak paylaşılan disk (LUN) gerekir. | Sadece bir dosya paylaşımı yeterlidir. |
| Bağlantı Türü | iSCSI / Fibre Channel | Standart Ethernet (SMB) |
| En İyi Kullanım | Yerel, tek merkezli clusterlar. | Multi-site (DR) ve Cloud clusterlar. |
Bu teori bilgilerden sonra şimdi uygulamalı bir şekilde File Shared Witness yapımızı oluşturalım.
Kuruluma geçmeden önce kurulu olan ortamımdan bahsedeyim. 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 dosya oluşturup bunu File Share Witness ile clusterımıza eklemek olacak.
Kuruluma AD sunucum üzerinde Clusterımızın full kontrol yetkisi olan bir klasör oluşturmak.
AD sunucum üzerinde bir klasör oluşturuyorum sağ tıklayıp properties’e tıkladıktan sonra Sharing kısmına geliyorum. Alt bölümde bulunan Advanced Sharing kısmına tıklıyorum.

Gelen ekranda Share this folder tikini işaretliyorum ve alt tarafta bulunan Permissions bölümüne tıklıyorum.

Gelen ekranda add kısmına tıklıyorum.

Gelen ekranda cluster ismimizi yazdıktan sonra OK diyiyorum.

Cluster ismimize full kontrol yetkisi verip Apply deyip işlemlerimi sonlandırıyorum.

Paylaşım klasörümüzü oluşturmuş oldum.

AD sunucumuz üzerinde paylaşım klasörünü tanımladıktan sonra şimdi ise S1 ve S3 sunucularımızda bu paylaşım klasörüne ulaşabiliyormuyuz bunu kontrol edelim.

Bağlantımızı başarılı bir şekilde yapmış olduk.

Buda şunu gösteriyor aynı cluster altında sunuculara ekstradan yetki vermemize gerek yoktur. Eğer bağlantı sağlayamasaydık klasör altında sunucularımızada cluster gibi full kontrol yetkisi vermemiz gerekmekteydi.
Şimdi gelelim oluşturduğumuz bu paylaşım klasörünü cluster üzerinde File Shared Witness olarak yapma işlemine.
File Shared Witness 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.

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

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

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.

File Shared Witness kuracağım için Configure a File Shared Witness seçeneği seçilir.

Next dedikten sonra gelen ekranda belirlemiş olduğumuz paylaşım dosyasını yazıyoruz. Yazmayıp uzun yoldan yapalım. Browse sekmesine tıklanır.
Not: Bir sunucu üzerinde witness tanımlamak sıkıntı olabileceği için yeni ortamlardaki witness kurulumu azure üzerinden yapılmaktadır. Çünkü witness’ın bulunduğu sunucunun çökmesi büyük sıkıntılara sebebiyet verecektir.

Gelen ekranda server kısmına paylaşıma açtığımız klasörün sunucu ismini yazdıktan sonra paylaşım klasörümüz aşağıda gözükmektedir. Bu klasörü seçip ok diyiyoruz.

Gelen ekranda next deyip bir sonraki aşamaya geçiyoruz.

Next dedikten sonra gelen ekranda next ve sonra finish diyerek işlemlerimi tamamlıyorum.

Başarılı bir şekilde File Share Witness işlemimizi gerçekleştirmiş olduk. Şimdi failover cluster ekranından yapılan işlemin doğru olup olmadığını teyit edelim.


Not: File Shared Witness oluşturmak için oluşturduğumuz share farklı bir ortamda olması gerekmektedir. Cluster altında bulunan Node’larda oluşturduğu zaman hata almamıza sebebiyet verecektir.
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.
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

Bu makalemizde sıfırdan farklı bir sunucu üzerinde paylaşım klasörü oluşturup bunu failover cluster üzerinde witness olan bir yapıya dönüştürmüş olduk.
Bir sonraki makalede görüşmek üzere..
“De ki: Hiç bilenlerle bilmeyenler bir olur mu?”Zümer sûresi-9
