Contained Availibility Group – SQL Server 2022 Feature
Bu Yazımızda SQL Server 2022’nin Feature’larından olan Contained Availablity Group’tan bahsedeceğiz.
SQL Server Always on ile birlikte birçok kullanıcı oluşturdukları Agent Job ve User’larda zaman zaman problemler ile karşılaşmaktadır. Özellikle hangi job’un primary’de hangi Job’un secondary’de çalışacağı konusu zaman zaman problemler yaratmaktadır. Tamda bu noktada SQL Server 2022 Contained AG özelliği ile bu probleme çözüm getirmek için hayatımıza girdi.
Yazımızda adım adım nasıl Contained AG oluştrulur ve oluştururken nelere dikkat etmeliyiz bunları tek tek ele alacağız.
1.Adım: Yeni bir Availablity Group Wizard oluşturuyoruz.
Görsel 1: New Availability Group Wizard
2.Adım: Yeni bir AG oluşturuyoruz. Burada önemli nokta Contained seçeneğinin seçilmesi. Reuse seçeneğini yeni oluşturduğumuz Contained AG’de seçmiyoruz Reuse’un kullanımı ile alakalı yazı içerisinde detaylı olarak paylaşacağız.
Görsel 2: New Availability Group as Contained
3.Adım: Hangi database’in Contained AG içerisinde olacağını belirliyoruz. Biz örneğimizde ContainedDB’yi örnek olarak ele alacağız.
Görsel 3: Select Databases for AG
4.Adım: Biz 2 node’lu bir ortamda bu işlemleri ele alıyoruz. Alwaysonn1 ve Alwaysonn2. Contanined AG içerisinde olmasını istediğimiz replicalar bunlar ve Database’leri bu Node’lar altında HADR olarak tutacağız.
Görsel 4: Select Replicas for AG
5.Adım: Örnek olarak oluşturduğum (ContainedDB) database küçük olduğu için Automatic Seeding seçeneği ile secondary replicaya restore etmesini istiyorum. Siz multisubnet ve büyük db’lerde farklı yöntemler ile ilerleyebilirsiniz.
Görsel 5a: Automatic Seeding
Görsel 5b: Automatic Seeding
Görsel 5c: Automatic Seeding
Görsel 5d: Automatic Seeding
6.Adım: Contained AG oluşturulduktan sonra Primary ve Secondary Node üzerinde oluşup oluşmadığını kontrol ediyoruz. Aynı şekilde replica ve database’leride kontrol ediyoruz. Sorunsuz olarak kurulduğunu görmemiz gerekmektedir. Normal AG ile Contained AG arasındaki farkı ikonlarından da farkedebilirsiniz.
Ayrıca ilgili database’in yanında kullanıcıların tutulacağı ayrı bir master ve jobların tutulduğu ayrı bir msdb database’nin oluştuğunu görmemiz gerekmetedir.
Görsel 6: Contained Availability Group
7.Adım: Availabiliity Group’u(AG) sorunsuz kurduktan sonra Contained AG yapısının püf noktası olan Listener objesini create etmemiz gerekiyor.
Görsel 7a: Listener Object Create
Görsel 7b: Listener Object Create
Görsel 7c: Listener Object Create
8.Adım: Listener Objesini sorunsuz olarak create ettikten sonra listener ismi ile connect oluyor ve server’dan farklı olarak sadece ilgili ag altındaki database’i görüyoruz. Bunun sebebi ise. Contained_AG_Master ve Contained_AG_Msdb database’lerin okuduğu için sadece o database’i sys.master_files ve sys.databases altından okumasından kaynaklanıyor.
Görsel 8: Listener Object Connect
9.adım: Listener objesini oluşturduktan sonra aşağıda hem server üzerinden hemde listener üzerinden job ve kullanıcılar oluşturacağız. Burada oluşturmuş olduğumuz kullanıcı ve job’un farklı master ve msdb altında oluştuğunu göreceğiz.
Aynı zamanda Primary Node altında oluşturduğumuz jobun kendi msdb’sinde Listener altında oluşturduğumuz job’un ise contanined msdb database’inde oluştuğunu göreceğiz.
Note: Hem server’da hem listener’da aynı işlemi yapan job oluşturulması soruna yol açabilir. Bu işlemleri lütfen kontrollü şekilde yapınız.
Görsel 9: Primary Node and Listener Job Create
10.adım: Yukarıdaki örneğe benzer şekilde kullanıcılarıda Primary Node ve Listener üzerinde oluştuduğumuzun farklı olduğunu bu yüzden kullanıcıları oluştururken dikkat edilmesi gerekmektedir. Kullanıcı kaynaklı erişim sıkıntılarına neden olabilir.
Görsel 10: Primary Node Login (UserServer)
Görsel 11: Secondary Node Login
Görsel 12: Listener Login (UserListen)
11.Adım: Bu adımda failover sonrasında jobların secondary Node üzerine gidip gitmediğini kontrol edeceğiz.
Görsel 13: Failover Process
Failover sonrası secondary node kontrol ettiğimizde hiçbir kullanıcı ve job’un gelmediğini fakat listener üzerinden bağlandığında tüm kullanıcıları ve jobları göreceğiz. Sebebi ise tüm bilgiler contained_ag_master ve contained_ag_msdb altında tutulmaktadır. Listener her zaman primary çözer ve yeni primary’imiz alwaysonn2 olmuştur.
Contained AlwaysOn Reuse Kullanımı
Adından da anlaşılacağı üzere, Contained AG için otomatik oluşan ag_master ve ag_msdb database’lerinin tekrar kullanımı ile alakalıdır.
Biz bu database’leri contained ag oluştururken yeniden oluşturmasın varolanları kullanmasını istiyorsak bu ilgili database için bu seçeneği seçerek ilerleyebiliriz. Aşağıda konuya ilişkin örneği inceleyebilirsiniz.
Ortamda daha önce kurduğumuz ContainedDB ve Contained AG’ye bağlı Contained_AG_master ve Contained_AG_msdb database’lerimiz var. Contained_AG_master ve Contained_AG_msdb database’lerimizi tekrar kullanmak aşağıdaki adımları izleyerek devam edeceğiz.
1.Adım: AG’yi primary node üzerinden siliyoruz. Bu adım reuse seçeneğinin kullanımını göstermek için yapılmıştır. Siz bu işlemi production ortamda denemeyiniz.
Görsel 14: Contained AG Drop
2.Adım: Secondary ortamda ContainedDB ve Contained AG’ye bağlı Contained_AG_master ve Contained_AG_msdb database’lerimizin Restoring mode’a geçtiğinden emin oluyoruz.
Görsel 15: Secondary Node Databases
3.Adım: master ve model database’lerimizin oluştuğu isim ile aynı olacak şekilde AG’mizi oluşturuyoruz. Eğer AG ismini farklı yaparsanız database ve ilgili db’ye ait master, msdb database’lerini AG’ye ekleyemezsiniz.
Görsel 16: Contained AG and Reuse System Databases
4.Adım: Sadece Eklemek istediğimiz database’i seçiyoruz. Özellikle ilgili AG için master ve msdb database’lerini seçmiyoruz.
Görsel 17: Contained AG Database
5.Adım: İlgili Replicayı ekledikten sonra Join Only diyerek AG’ye dahil etmesini istiyorum.
Görsel 18: Contained Database Join
6.Adım: Finish dedikten sonra ekleme işlemini gerçekleştiriyoruz. Eğer eklemez ise ilgili database’lerden log backup alıp restore ettikten sonra ekleyecektir.
Görsel 19: Contained Database Join
Görsel 20: Contained Database Join
0 Yorum