Bu makaleyi okumadan önce Always ON’un çalışma mantığını anlamak için “ SQL Server Always ON AG(Availability Group) Oluşturmak ” isimli makalemi okumanızı tavsiye ederim.
Always ON’da 3 tip network trafiği vardır.
Best Practice olarak Microsoft bu 3 network için 3 ayrı ethernet kartı tavsiye eder. Tabi her ethernet kartı kendi içinde teaming (aşağıda anlattım) ile yedekli olmalıdır ve ethernet omurgasına çıkarken de yedekli olmalıdır (aşağıda anlattım). Yani her sunucuda 3×4=12 tane ethernet portu olması gerekir.
Teaming Nedir?
Sunucu üzerindeki 2 tane ethernet portu üzerinden kurumunuzdaki network switch’e bağlandığınızı düşünün. Bu 2 ethernet portunu teaming yaparsanız biri bozulsa trafik diğerinden devam eder. 2 side çalışıyorsa trafik 10+10=20gbps hızda yapılabilir. Yani hem yedek hem de yapılabilecek trafiğin ikiye katlanması olarak düşünebilirsiniz.
Ethernet omurgasına çıkarken yedekli olmak nedir?
Teaming yaparken kurumunuzdaki network switch’inize(omurga olarak geçer) nasıl bağlanacağınızı yukarda anlattım. Peki bağlandığınız omurga genel olarak bozulursa ne olacak? Bu yüzden kurumlarda birbiri ile yedekli çalışabilen 2 tane network switch vardır. Biri bozulursa diğeri devreye girer. Bu şekilde Teaming ile 1 port 2 ye çıkarken, omurgada da yedekliliği sağlayabilmek için ihtiyacımız olan port 2 iken 4’e çıkar.
SQL Server kullanılacak bir sunucu alacaksanız sunucu üzerindeki ethernet port’larının sayısını ve kapasitesini yukardaki açıklamaları okuduktan sonra belirlemenizi tavsiye ederim.
Failover Cluster Manager’ı açarak sizin cluster’ınızdaki network konfigurasyonuna bakabilirsiniz. Aşağıdaki gibi Failover Cluster Manager üzerinden Networks sekmesine gelirseniz windows cluster’da tanımlı ethernet kartlarını görebilirsiniz. Bizim örneğimizde bir tanesi Cluster Only(heartbeat trafiği için), diğeri Cluster And Client(heartbeat,alwayson senkronizasyon ve client trafiği)
Cluster Only olana sağ tıklayıp properties derseniz aşağıdaki ekran gelecektir.
Normal şartlar altında Always On için farklı bir ethernet kartı ayarlamadıysanız always on’un senkronizasyon trafiği Cluster and Client olarak ayarladığınız ethernet kartı üzerinden yapılacaktır. Ama always on ‘un senkronizasyon trafiğini ayırmak bazı durumlarda daha faydalı olabilir.
SQL Server Always ON kullanan bir sunucunun örnek network bağlantı şekli nasıl olur?
2 sunucunuz var ve bu 2 sunucu üzerinde always on kullanıyorsunuz.
Heartbeat için her sunucu üzerinde 4 tane 1 gbps kapasitesinde port ayırdınız.(2 si teaming ile primary network switch’e gidiyor. Diğer ikiside teaming ile yedek network switch’e gidiyor.) Heartbeat bağlantısı için yukarda anlattığım gibi Cluster only yapmanız gerekiyor.
Heartbeat ve client trafiği için 4 tane 10 gbps kapasitesinde port ayırdınız.(2 si teaming ile primary network switch’e gidiyor. Diğer ikiside teaming ile yedek network switch’e gidiyor.) Bu ethernet kartı için hem heartbeat hemde client trafiği için Cluster and client yapmanız gerekiyor.
Always On senkronizasyon trafiği için 4 tane 10 gbps kapasitesinde port ayırdınız.(2 si teaming ile primary network switch’e gidiyor. Diğer ikiside teaming ile yedek network switch’e gidiyor.) Bu ethernet kartı için Do not allow cluster network communication on this network’ü seçebilirsiniz. Ama teaming ile verilen IP’yi always on endpoint’lerine göstermelisiniz.
Bu işlem için endpoint’i aşağıdaki script yardımıyla oluştururken LISTENER_IP = ALL kısmındaki ALL yerine teaming ile verilen IP’yi yazmanız gerekiyor. IP’yi yazarken parantez içinde yazmanız gerekiyor. Örnek-> (10.6.132.45)
USE [master] GO CREATE ENDPOINT [Hadr_endpoint] STATE=STARTED AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL) FOR DATA_MIRRORING (ROLE = ALL, AUTHENTICATION = WINDOWS NEGOTIATE , ENCRYPTION = REQUIRED ALGORITHM AES) GO
Eğer endpoint’inizi daha önce oluşturduysanız SSMS üzerinden aşağıdaki gibi endpoint’inizin create script’ini alarak Create ifadesi yerine ALTER yazarak ve ALL kısmına yukarda anlattığım şekilde IP girerek bu işlemi gerçekleştirebilirsiniz.
Eğer endpoint’inizin IP’sini drop create yöntemi ile değiştirirseniz bu işlemi yaptıktan sonra secondary veritabanınız not synchronizing mode’a düşecektir. Tekrar senkronize duruma geçmesi için secondary veritabanınızı aşağıdaki gibi önce suspend mode’a alıp,
Daha sonra da aşağıdaki gibi resume data movement demelisiniz,
Bu işlemleri always on’un primary ve secondary replikalarında yapmalısınız. Her sunucuda always on için tanımladığınız ethernet kartının IP’si neyse o sunucuda çalışacak endpoint için o IP’yi vermelisiniz.
Örneğin;
Primary olacak Test1 sunucunuzda always on için tanımlanan ethernet kartının teaming IP’si(teaming yapmadıysanız IP’si) 10.6.123. 41 Bu sunucudaki primary instance’ın endpoint’ini yukarda anlattığım şekilde alter ederken ALL kısmına (10.6.123.41) yazmalısınız.
Secondary olacak Test2 sunucunuzda always on için tanımlanan ethernet kartının teaming IP’si(teaming yapmadıysanız IP’si) 10.6.123. 42 Bu sunucudaki secondary instance’ın endpoint’ini yukarda anlattığım şekilde alter ederken ALL kısmına (10.6.123.42) yazmalısınız.
Bu makalede Ethernet Altyapısından bahsettim. “SQL Server Sunucuların Kullandığı SAN Altyapısı” makalemde de SQL Server Sunucuların storage’lar ile arasındaki SAN altyapısından bahsedeceğim.