Mesajlar Etiketlendi ‘round robin load balancing’


Herkese merhaba. Bu yazımda sizlere SQL Server 2016 ile birlikte AlwaysOn High Availability yapısında bulunan replikalar için gelen yeniliklerden biri olan Round-Robin Load Balancing özelliğinden bahsedeceğim.

Microsoft, SQL Server 2016 ile birlikte Security, Performans ve Yüksek Erişilebilirlik gibi alanlarda çok önemli ve etkili yenilikler getirdi. Henüz SQL Server CTP 2.4 sürümü yayınlanmış olduğunu düşünürsek eğer, SQL Server 2016 release olana kadar geliştirmelerin devam edeceğini düşünmekteyim.

Bildiğiniz üzere SQL Server 2012 ile birlikte gelen AlwaysOn yapısıyla SQL Server da replikalar arasında yüksek erişilebilirlik sağlanmış olup, bir felaket anında production olarak çalışan sunucu fail olduğu anda otomatik failover olarak ikincil sunucu aktif hale geçip Primary mod da çalışmaya devam ederek sistemin aksamamasına neden oluyordu. Bildiğimiz gibi AlwaysOn yapısında otomatik failover node sayısı 2 iken SQL Server 2016 ile birlikte 3 olduğunu da belirtmek isterim.

Round-Robin Load Balancing yapısından bahsedecek olursak eğer, bildiğimiz gibi AlwaysOn High Availability yapısında 1 Primary + 8 Secondary olmak üzere toplam 9 Node kullanabiliyorduk. SQL Server 2016 ile birlikte gelen Round-Robin Load Balancing özelliğini kullanarak, Primary sunucumuza gelen READ işlemlerini Secondary sunucularımız üzerine sıralı bir şekilde dağıtabiliyoruz. Bu sayede Primary sunucumuzun üzerindeki read işlemlerini yönlendirerek production üzerindeki özellikle READ işlemlerinin yükünü azaltmış oluyoruz.

Round-Robin Load Balancing özelliğini kullanabilmemiz için AlwaysOn yapımızın ayakta ve sorunsuz bir şekilde çalışıyor olması gerekmektedir. Secondary sunucular üzerinde bu dağıtımı yapabilmemiz için Primary olarak çalışan SQL Server içerisindeki Master veritabanı üzerinde bir script çalıştırmamız gerekmektedir.  Bu script içerisinde,

  • Hangi Availability grup için kullanıldığını,
  • Hangi sunucuların Round-Robin Load Balancing işleminde kullanılacağını,
  • Kullanılacak sunucuların isimlerini,
  • Kullanılacak sunucuların endpoint adreslerini,
  • Tanımlanmış sunucuların Round-Robin Load Balancing işlemi sırasındaki çalışma sırasının belirtilmesi,

gibi gerekli konfigürasyonlar barınmaktadır.


Şimdi sırası ile bu işlemlerin nasıl yapıldığını ve Round-Robin Load Balancing süreci ile çalışmaya başladıktan sonraki sonuçları görüntüleyeceğiz.

1

Yukarıda gördüğünüz gibi

  • AlwaysOn yapımız çalışır durumda,
  • AG adımız SQLNEXTAG1,
  • replika isimleri SQLVNEXT-NODE1, SQLVNEXT-NODE2 ve SQLVNEXT-NODE3,
  • Senkronize çalışan veritabanımızın adı TestAlwaysOn,
  • Listenerımızın adı VNEXTLISTENER

Şimdi sırası ile her node için script içerisinde kullanacağımız INSTANCE isimleri ve ENDPOINT URL’lerini kontrol edeceğiz. İlgili ekrana gelebilmek için her replikanın üzerine gelerek Properties sekmesinden ulaşıyoruz. Şimdi aşağıda 3 node için de tek tek properties bilgilerini listeleyeceğiz.

NODE-1 İÇİN PROPERTIES

2

NODE-2 İÇİN PROPERTIES

3

NODE-3 İÇİN PROPERTIES

4

Görmüş olduğumuz gibi Round-Robin Load Balancing yapabilmemiz için script içerisinde gerekli tüm bilgilerimiz mevcut. Şimdi scriptte bu bilgileri nasıl yazdığımızı ve gerekli konfigürasyonun nasıl yapıldığına bakalım.

5

Yukarıda yazılan script görüldüğü gibi sadece primary sunucumuz içindi. Burada görüldüğü gibi AG adını, hangi replika için yazıyorsak onun adını, READ_ONLY mod için gelen connectionları kabul edileceğini ve son olarak da nereden READ yapacağı ile ilgili gerekli URL bilgisini yani endpoint bilgisini giriyoruz.

Bu işlemi kaç NODE kullanacaksak eğer kullanacağınız her node için yapmanız gerekmektedir. Bizde 3 adet node olduğu için NODE-2 ve NODE-3 içinde aynı scripti yazmam gerekiyor.

Şimdi Read Only işlemlerin yapılacağı sunucular tanımlandıktan sonra bu sunucuların hangi sırayla çalışacaklarını da yazarak SQL Server’a bildirmemiz gerekiyor. Bunu da aşağıdaki şekilde yapıyoruz.

6

Burada gördüğünüz gibi her replikanın PRIMARY olma şartında tanımlanmış sıralama senaryoları mevcuttur. İlk olarak Primary mod’da NODE-1 olma durumuna göre sıralama belirtilmiştir. Yani burada parantez içerisini okuyacak olursak eğer, READ işlemlerini için gelen connectionları sırası ile Node-2 ve Node-3 üzerine yönlendirilmesi belirtiliyor. Parantez dışındaki Node-1 kısmı ise; eğer  Node-2 veya Node-3 üzerindeki READ işlemlerinde bir sorun olursa tekrar gelip read işlemlerini Node-1 üzerinden de devam ettirebilmesi anlamına gelmektedir.

Aynı şekilde Primary’nin diğer replikalar olma durumuna göre de gerekli read senaryolarının yazıldığını görebilirsiniz.

Round-Robin Load Balancing yapabilmek için gerekli scripti yazdıktan sonra en başta belirttiğim gibi Primary olarak çalışan replikanın Master veritabanının üzerinde scripti çalıştırıyoruz.

7

Yazmış olduğumuz script çalıştıktan sonra şimdi bunu kontrol edelim. Başlat sekmesinden CMD.exe yi RUN AS ADMINISTRATOR olarak çalıştırıyoruz. Command Prompt ekranın da;

  • sqlcmd –E –S VNEXTLISTENER –d TestAlwaysOn –Q “select @@SERVERNAME” –K READONLY

komudunu yazıyoruz. Bu komut her çalıştığında serverimize READONLY mod da bir connection gönderir ve o an hangi server’ın cevap verdiğini gösterecektir.

8

Yukarıda görmüş olduğunuz gibi komutu her çalıştırdığımızda farklı node’lar cevap vermektedir. Bu da bizim en baştan beri yapmak istediğimiz Round-Robin Load Balancing özelliğinin aktif olduğunu göstermektedir.

SQL Server 2016 ile birlikte High Availability alanında gelen Round-Robin Load Balancing özelliğini aktif hale getirerek kullanmış olduk. Umarım sizler içinde faydalı bir yazı olmuştur.


İletişim için;

E-mail : gokayakbal@hotmail.com

Telefon : 0535 395 56 43