Bu makalede mssql server üzerinde ikinci bir AG oluşturma konusuna değinmiş olacağız. Bu yapıya gerek duymamızın sebebi bazen tek AG altında bulunan veritabanı sayısının fazlalığından dolayı AG ve Failover cluster bazında sıkıntıya sebebiyet vermektedir. AG altında bulunan veritabanlarımızı bölerek veritabanlarının farklı sunucular üzerinde çalışılması sağlanır. Bu sayede tüm kullanıcıların aynı sunucu üzerine yük bindirmeyip yük devretme işlemini farklı sunucular üzerine yaymış olacağız.
Çoklu AG Yapısının Faydaları: Her AG bağımsız worker thread pool kullanır. Her AG kendi worker thread pool’una sahiptir, CPU contention önlenir. AG’ler arası memory pressure riski azalır, predictable performance sağlanır. Log flush ve read işlemleri birbirini etkilemez. Kritik DB’ler için daha agresif sync commit kullanılabilir. Bir AG maintenance’de iken diğerleri servise devam eder. Donanım/network hatası sadece bir AG’yi etkiler. AG bazlı backup işlemleri yapılmaktadır.
Aşağıdaki komutlar ile küçük kontroller yapabiliriz. Running yerine suspended yazarsak suspended üzerindeki worker tread sayısını göstermektedir.
-- Max worker thread ayarları
SELECT max_workers_count FROM sys.dm_os_sys_info;
-- AG thread kullanımı
SELECT * FROM sys.dm_os_workers
WHERE state = 'RUNNING' AND task_address IN (
SELECT task_address FROM sys.dm_hadr_availability_replica_states
);
--WHERE state = 'runnable'
SSMS üzerinde Availability Groups üzerine sağ tıklayıp New Availability Group.. diyiyoruz. Neden ilk seçeneği seçmedik çünkü ilk seçeneği seçersek AG kurulumu daha detaylı bir şekilde gerçekleşir. Biz sadece bir AG oluşturmak istediğimiz için herhangi bir veritabanı ekleme işlemi yapılıp yapılması tercihimize bırakılır. Wizard seçeneği seçilmişse veritabanı eklemek zorunludur. Detaylı bir şekilde kurulum yapmak isterseniz sayfamızda bulunan Alwayson makalesi okunabilir.

Gelen ekranda Availability group name kısmında yeni oluşturacağımız AG yapımıza bir isim veriyoruz. Diğer tüm bölümleri sayfamızda Always on makalelerinde detaylı bir şekilde görebiliriz.
Not: New Availability Group.. kısmında eklenen nodların endpoint kısmı farklı olabilir. Dikkat edilmesi gerekmektedir.

Yukarıdaki dikkat ederseniz Availability Databases kısmında veritabanı ekleme işlemi yapılabilir. Bu tamamen bizim tercihimize bırakılmış bir yapı olduğunu görmüş oluyoruz.
Yukarıdaki işlemleri tamamladıktan sonra oluşturulan AG altında Availability Replicas kısmında seconary olan nodun üzerinde çarpı işareti görünürse ilgili replicanın join edilmesi gerekmektedir.

Yük dağılımı yapılması için ilgili AG altında yeni bir listener yapısının eklenmesi gerekmektedir. Oluşturulan bu listener Active directory’de ilgili OU altına taşınır. Listener properties ekranından Clusterın ve sql server servisinin ilgili listener altında Full control yetkisi verilmesi gerekmektedir.

Yukarıdaki tüm adımları yaptıktan sonra AG23 altında bulunan TEST1 veritabanının yeni oluşturduğumuz AGTEST availability groups üzerine dahil edilmesi gerekmektedir.

Test1 veritabanına sağ tıklayıp Remove Database from Availability Group.. diyerek İlgili veritabanını AG altından çıkarıp yeni oluşturduğumuz AG altına ekleme işlemlerini yapıyoruz.

Daha sonra yeni AG altında Availability Databases sekmesinde Add Database.. diyiyoruz..

İlgili veritabanı seçildikten sonra hedef sunucuya bağlanıp veritabanımız hedef sunucuda bulunduğu için Join only veya Skip intial data sysnchronization seçenekleriyle ekleyebiliriz.


Secondary sunucusunda veritabanı hemen dahil olmuş oldu. Join only dersek veritabanı hemen dahil olur. Skip intial data sysnchronization seçeneği seçilirse manuel join işleminin yapılması gerekmektedir.

Daha sonra Failover işlemi yaptıktan sonra artık veritabanın hepsi tek bir sunucu üzerine gelmeyip birden fazla AG üzerine dağılmasını sağlayacaktır.

Primary üzerinde olan ag altından veritabanı çıkarılır. Yeni ag altına skip veya join only ile seçilip eklenir. Listener eklenmesine gerek yoktur. Sadece failover işlemi listener olmadığı için manuel yapılması gerekmektedir. Büyük veritabanların biraz beklenmesi gerekmektedir. Çünkü veritabanının secondary sunucularında restoring moduna düşmediğinden join only hata verir. Script ile AG üzerine bir database eklendiğinde default olarak auto seeding ile eklenir. Database secondary sunucusunda olduğu için hataya sebep verir. Dikkat edilmesi gerekir.
Not: Sql serverda AG yapısının çalışıp çalışmadığını anlamak için AG yapımıza boş bir veritabanı eklenir. Eğer ekleniyorsa AG yapımız çalışıyor demektir. Bu yapı aslında ag altında bulunan diğer veritabanlarının check edilmesine sebebiyet verecek. Kendi içerisinde check yapar. Diğer db lerde not sync den syncing veya end takısına geçer.
Ola hallengrenn scriptleri kullanıyorsa yeni oluşturduğunuz ag içinde backupları doğru şekilde alacaktır. Joblarımızda Ag kontrol şartının kaldırılması gerekmektedir. Yeni oluşturulan ag altındaki veritabanlarına son kullanıcının secondary sunucuna gitmesi isteniyorsa ag propertiesdan readable read ifadesinin açılması gerekmekte. İnstance altında bulunan başka ag nin read only routing yönlendirme ekranını kullanır. Yeni oluşturulan Ag altında bu yapının oluşturulmasına gerek yoktur. Ayrıca backup için ag properties den backup refences bölümünde ayarlanması gerekmektedir.
Bu makalede ikinci bir Availability Group oluşturup veritabanların tek AG üzerinden çalışmasını önüne geçmiş olacağız. Ayrıca AG yapıların primary sunucuların farklı olması sunucuların daha verimli kullanılmasını sağlamaktadır.
Başka makalede görüşmek dileğiyle..
“ Eğer anne baban, hakkında bilgin olmayan bir şeyi bana ortak koşman için seni zorlarlarsa bu durumda onlara uyma ama yine de onlara dünyada iyi davran; yüzünü ve özünü bana çevirenlerin yolunu izle. Sonunda dönüşünüz yalnız banadır. O zaman yapıp ettiklerinizin sonucunu size bildireceğim.”Lokman-15