SQL Server Yüksek Erişilebilirlik (High Availability)

SQL Server, Oracle gibi büyük ölçekli veri tabanı sistemlerinin özellikle kurumsal uygulamalarda tercih edilme nedenlerinden biri daha fazla yüksek erişilebilirlik(High Availability) sunmalarıdır. Yüksek erişilebilirlik, 7×24 çalışan sistemlerin gerek otomatik gerekse manual sebeplerden dolayı yazılım veya donanımdan kaynaklanacak kesintilere uğramaksızın hizmet vermesidir. Internet gibi dağıtık ortamlarda hizmet veren sistemlerin kısa da sürse kesintiye uğraması önemsenecek maddi kayıplara neden olabilmektedir. Büyük yazılım firmaları sistemlerin 7×24×365 hizmet vermesini garanti etmek için çeşitli çözümler sunmaktadır. Kurumların fiyat-performans ikilisini gözönünde bulundurarak bu çözümlerden birini uygulaması gerekir.
SQL Server Yüksek Erişilebilirlik Çözümleri

1 – Failover Clustering (Yedekli Kümeleme )
“Kümelenme” olarak türçeleştirilen clustering ifadesi, birden fazla sunucun aynı amaç için birbirine bağlanması, bir araya getirilmesi olarak tanımlanabilir. İhtiyaca göre bu sunucular beraber veya sırayla çalıştırılır. Kümedeki her sunucuya node(düğüm) denilir. İşletim sisteminin sürümüne bağlı olarak farklı sayıda düğüm desteklenir. Windows işletim sisteminin Enterprise ve Data Center sürümleri cluster yapılarını destekler. SQL Server uygulaması da aynı işlemler için farklı sunucular üzerinde koşabilir yani cluster işlemini destekler.

Failover Cluster, bir veya daha fazla sunucunun bir veya daha fazla diski paylaşımlı kullanmasından oluşur. Bu senaryoda SQL Server, Microsoft Cluster Service (MSCS) üzerine kurulur. Sunucuların kendi yerel diskleri bulunmakla birlikte veritabanı dosyaları ve cluster ile ilgili log dosyalarının tutulduğu Quorum Disk olarak tanımlanan paylaşımlı bir kaynak (disk / Storage Area Network(SAN)) oluşturulur. MSCS sunucuların, quorum disk’e ortak erişim imkanı sağlar. Sunucular üzerindeki fiziksel kaynak ve servisler MSCS içinde Resource ve Resource Group olarak tanımlanır. Bu sunuculardan birinin çökmesi durumunda SQL Server servisleri otomatik olarak diğer sunucuya taşınır (failover). Servise ait veriler çöken sunucudan bağımsız bir aygıtta olduğu için servis kaldığı yerden veri kaybetmeksizin çalışmaya devam eder. Tabi servislerin diğer sunucuya geçmesi biraz zaman alabilir.

Failover Cluster modelinde sunucular arasında özel bir network kurulur ve bu network üzerinde heartbeat (kalp atışı) denilen işlem aracılığıyla hem işletim sistemi hem de SQL Server seviyesinde birbirlerinin yaşamlarını kontrol ederler. Sistemde hangi düğümün aktif hangisinin pasif olduğu bilgisi quorum disk üzerinde tutulur. Sadece bir sunucunun aktif diğerlerinin pasif olduğu (sadece arıza durumunda aktif olduğu) kümelemelere Active/Passive Clustering, sunucuların aynı anda çalıştırıldığı kümelemelere Active/Active Clustering denilir.
Active/Passive Cluster yönteminde iki sunucu aynı anda paylaşımlı diske erişemez. İkinci sunucu ancak birinci sunucu çöktüğü zaman veya sistem yöneticisi tarafından servislerin sahibi yapıldığı zaman disk erişmeye başlar.
Kısaca, failover cluster’da veri kaynağı sunuculardan bağımsız olarak genellikle SCSI disklerden oluşan depolama biriminde (storage) tutularak bunun birden fazla sunucu tarafından yönetilmesi sağlanır. Bu model servislerin sürekliliğini sağlar yoksa verilerin bulunduğu disklerin çökmesi durumunda felaket önleyici, yıkım onarımı (disaster recovery) sunmaz. Bu tür durumlar için yedek tutulması tavsiye edilir (redundancy).
SQL Server failover clustering, cluster işlemini destekleyen işletim sistemleri üzerinde yapılabilir bunlar da Windows Server 2003 Enterprise Edition veya Datacenter Edition, ve Windows 2000 Advanced Server veya Datacenter sistemleridir. Cluster işlemi yalnızca SQL Server 2000 Enterprise Edition’da uygulanabilir. Buna karşılık SQL Server 2005’in Enterprise Edition, Standard Edition ve Developer Edition sürümlerinde cluster işlemi gerçekleştirilebilir.
Aşağıdaki şekilde bir failover clustering modeli gösterilmiştir.

Clustering yönteminde Network Load Balancing cluster (NLB) modeli de bir alternatif olarak değerlendirilebilir. Load Balancing (Yük Dengeleme) gelen trafiğin birden fazla sunucu arasında dağıtılmasıdır. Bu modelde sunucular birbirinden bağımsız çalışır ve herhangi bir disk veya başka kaynakları paylaşmazlar.

2 – Log Shipping (Günlük Gönderme)
Bu çözümde aktif SQL Server sunucusunun bir kopyası başka bir sunucuda tutulur. Bunun için öncelikle aktif olarak kullanılan birinci veri tabanı sunucusunun full backup’ı alınıp ikinci sunucuya aktarılır ardından belli aralıklarla aktif sunucunun transaction log dosyası ikinci sunucuya kopyalanır. Log Shipping, aşağıdaki SQL Server sürümlerinde uygulanabilir;

  • SQL Server 2000 Developer Edition
  • SQL Server 2000 Enterprise Edition
  • SQL Server 2005 Standard Edition
  • SQL Server 2005 Workgroup Edition
  • SQL Server 2005 Enterprise Edition

Fakat işin mantığı birincil sunucudan yedekleri alıp ikinci sunucuya aktarmak olduğu için herhangi bir SQL Server sürümü üzerinde programcı tarafından kendi scriptlerini yazarak ta Log Shipping işlemi yapılabilir.
Log Shipping, “Database Maintenance Plan” aracılığıyla düzenlenir ve SQL job tarafından peryodik olarak çalıştırılır. Aşağıdaki şekilde Log Shipping modeli çizilmiştir.

Log Shipping, failover clustering yöntemine göre daha ucuz bir yöntemdir ancak failover cluster modelinde olduğu gibi automatic failover (otomatik devreye girme) özelliği bulunmamaktadır. SQL Server üzerinde Log Shipping modelinin nasıl oluşturulacağı bu linkte detaylı anlatılmıştır.
3 – Data Replication (Veri Yineleme)
Replication, aynı veya farklı sunucular üzerindeki veritabanları arasında veri kopyalama işlemidir. SQL Server replication modelinde publisher (yayıncı), distributor (dağıtıcı) ve subscriber (abone) olmak üzere üç temel üye mevcuttur. Yayıncı, sahip olduğu verileri başka sunucu veya veritabanına gönderen merkezi sunucu veya veritabanıdır. Yayıncının sahip olduğu table, stored procedure, view gibi nesneler article (makale) olarak tanımlanır. Replikasyondaki yayın (publication), makale bazında gerçekleşir. Abone, merkezi sunucudan veri alan üye sunucudur. Dağıtıcı, replikasyon işlemini yöneten, süreci takip eden bağımsız bir sunucu olup < ı>distribution database içerir.. Replikasyonda push ve pull olmak üzere iki tür abonelik mevcuttur. Push subscription (Abonelik gönderme/itme), yayıncının aboneye bağlanarak verileri ona göndermesidir. Pull subscription (Abonelik çekme) ise abonenin yayıncıya bağlanarak verileri çekmesidir.
Aşağıdaki şekilde SQL Server replikasyon modelinin temel katmanları (yayıncı, dağıtıcı ve aboneyi) gösterilmiştir.

SQL Server sisteminde üç temel replikasyon türü bulunmaktadır;
Snapshot Daha önce abonelere hangi verilerin gönderildiğine bakılmaksızın her defasında merkezi veritabanındaki tüm verileri toplu bir şekilde abonelere yükler.
Transactional Merkezi veritabanının tümünü değil sadece değişiklikleri abonelere yansıtır.
Merge Hem merkezdeki değişiklikleri üyelere yansıtır hem de üyelerdeki değişikliği merkeze yansıtır yani çift taraflı replikasyon gerçekleştirir.
SQL Server 2000 replikasyon işlemini aşağıdaki agentler aracılığıyla çalıştırır.
Snapshot Agent (snapshot.exe): Yedek veritabanını hazırlamak için kaynak veritabanının fotoğrafını çeker. Bu fotoğrafları distributor veritabanına kaydeder.
Distribution Agent (distrib.exe): Önceki agent’in çektiği fotoğrafları abonelere yansıtır. Bu agent’in hangi katmanda çalışacağı veri aktarma şekline bağlıdır. Eğer pull yöntemini kullanılıyorsa bu agent, distributor üzerinde, push yöntemi kullanılıyorsa subscriber üzerinde yaşar. Snapshot ve transactional replication bu agent’i kullanır.
Log Reader Agent (logread.exe): Yayıncı üzerindeki replike edilmek üzere işaretlenmiş transactional logları dağıtıcıya aktarır. Bu agent sadece transactional replication’da kullanılır.
Queue Reader Agent (qrdrsvc.exe): Aboneler tarafında sırada bekleyen güncellemeleri yayıncıya aktarır. Transactional replication’da seçmeli olarak kullanılır.
Merge Agent (replmerg.exe): Merge replication, distribution agent’a ihtiyaç duymaz bunun yerine distribution agent ile aynı görevde olan merge agent’i kullanır.
SQL Replication’nın en önemli avantajı tüm SQL Server sürümlerinde kullanılması fakat log shipping kadar kolay olmaması da bir yönetim sorunu olarak karşımıza çıkabilir. SQL Server üzerinde replikasyon işleminin nasıl yapılandırılacağı bu linkte detaylı anlatılmıştır.
4 – Database Mirroring (Veritabanı Aynalama) [SQL Server 2005]
SQL Server 2005’e Service Pack 1 ile eklenmiş olan bu yöntem iki sunucu/veritabanı arasında transaction logları taşıyarak iki sistemin eşleşmesini sağlar. Database mirroring, Standard, Enterprise veya Developer sürümleri tarafından desteklenir. Bu modelde birinci sunucu principal ikinci sunucu mirror olarak tanımlanır. Principal, canlı veritabanını, mirror ise bu veritabanının standby kopyasını temsil eder. Birincil ve kopya sunucu arasındaki aktarıma şahitlik yapmak amacıyla witness isimli üçüncü bir sunucu da kurulabilir.

Model olarak Log Shipping’e benzeyen bu yöntemin farklı birinci sunucudaki işlemleri anlık olarak ikinci sunucuya yansıtmasıdır. Burada da Log Shipping’de olduğu gibi aktarılacak veritabanının Full Recovery moduna sahip olması gerekir. SQL Server 2005 üzerinde bu modelin nasıl kurulacağı bu linkte detaylı anlatılmıştır.
5 – Database Snapshot (Veritabanı Görüntüsü Alma) [SQL Server 2005]
SQL Server 2005 ile gelen yeniliklerden biri olan “database snapshot”, veritabanının herhangi bir andaki salt-okunur kopyasını temsil eder. Database snapshot’un normal database kopyalamadan farkı snapshot yaratılırken verilerin fiziksel olarak kopyası alınmak yerine sadece orijinal kayıt üzerinde değişiklik yapılacağı zaman kaydın orijinal hali snapshot dosyasına yazılır. Bir veritabanına ait birden fazla snapshot alınabilir. Orijinal database üzerinde bir değişiklik yapıldığı zaman o kaydın değişmeden önceki durumu snapshot’a aktarılır. Snapshot ile ilgili detayı bu linkte okuyabilirsiniz.
Son olarak aşağıdaki tabloda SQL Server’in sunduğu High-availability seçenekleri kıyaslanmıştır.

Kapsama Alanı Veri Kaybı Automatic failover Downtime
Failover clustering Sistem ve Database Yok Yok Veritabanının recovery olmasına ek olarak yaklaşık 10-20 saniye içinde sistem ayağa kalkar
Database mirroring Database Operasyon moduna bağlı Var Yaklaşık 5 sn’den önce sistem up olur
Peer-to-peer replication Table veya view Muhtemel Seçimli Değişken olmakla birlikte yok denecek kadar az sürede
Log shipping Database Muhtemel Yok Değişken
Database snapshots Table veya view Muhtemel Yok Değişken

SQL Server Yüksek Erişilebilirlik (High Availability)” üzerine 3 düşünce

  1. seyfi ozsoy

    Merhaba Hocam Yazınını okudum çok beğendim elinze sağlıkFailover Clustering yapmak istediğmizde 2 adet server 2008 enterpres üzerine kurulu uygulamamız için
    sql 2008 standart yeterli yeterli olurmu sql server 2008 enterpresmı almamız gerekli acaba
    ilgilenize şimdiden tşkr

    Cevapla
  2. Ahmet Kaymaz Yazar

    Seyfi,Failover Cluster’da önemli olan tüm nodelerin aynı sürüm ve platforma sahip olmasıdır. SQL Server standart edition kullanabilirsiniz. Bildiğim kadarıyla bu sürümün tek sorunu sadece 2 düğüm olarak kullanabiliyorsunuz.

    Cevapla
  3. Onur Gürbüz

    Ahmet Bey Merhaba,

    Sitenizi yeni keşfettim.Makaleleriniz çok güzel.

    Size bişey sormak istiyorum.
    Tıpkı IIS gibi SQL Serverda da balancing mantığı var mı ?
    Ya da bankalar bu işlemi nasıl yapıyorlar ?
    Yani benim sistemime 1 milyon kişinin girdiğini varsayalım. SQL Server’ın bulunduğu makine bunu kaldırmayacağını düşünelim.
    Birden fazla server kurup aynı database’i (birlikte) kullanabilir miyim ?
    Amacım 5 tane server kurup hepsine aynı Veritabanı kurup kullanıcıların yoğunluğuna göre 5 serverdan birine atması. Bununla ilgili bilgi ya da makale varsa verebilir misiniz ? Teşekkürler

    Cevapla

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Time limit is exhausted. Please reload CAPTCHA.