Forum
Mesut Bey'in 2 sunumuna da katıldım fakat son sunum sonrası kafam karıştı biraz.
Şimdi Mirroring ile aktif / pasif çalışıyor sunucular. Witness server, Principal ile Mirror server'ı sürekli kontrol ediyor, Principal server down olursa, Mirror server'ı up ederek, Principal olmasını sağlıyor.
Replication'da ise aktif / aktif çalışıyor sunucular. Bir tane distributor var, diğerleri ise subscriber server olarak çalışıyorlar. Kayıtların Distributor'e girilmesi ve sorguların load balanced şekilde 2 sunucunun üzerinden yapılması, performansı arttırıyor.
Bu noktada sormak istediğim, neden Mirroring kullanıldığı? Yani baktığınızda replication'ın çok avantajı var. Bir kere 2 sunucu yetiyor. İkincisi ikisi de aktif / aktif çalışabiliyor ki performans için çok önemli bir nokta. Mirroring'de bir tane sunucuyu sürekli down olarak bekletiyorsunuz aslında. Sürekli bekleyen ve zaten belirli bir ram ve kaynak kullanan sunucu varken, bunu subscriber şeklinde, sorguları yapabileceğimiz bir sunucu olarak kullanmak çok daha mantıklı geliyor kulağa. Bir de en önemlisi, Merge Replication. Yani Subscriber'a girilen kayıtlar Distributor'e de gönderilebiliyor ki bu da aktif / aktif çalışan 2 primary server demek. Böyle bir şey mümkün olduktan sonra neden Mirroring ihtiyacı oluyor, düşündükçe anlam veremiyorum.
İnternette özellikle üzerinde durulan Mirroring'in high availability sağlaması. Yalnız bu da cluster gibi değil tabi, gördüğüm üzere connection string üzerinden sağlanabiliyor. Peki aynı tip connection stringler, replication durumundaki database'ler için de mevcut değil mi? Replicated durumdaki ana sunucu down olduğunda, connection string'i manual mi değiştirmem gerekiyor?
"Server=Partner_A; Failover_Partner=Partner_B; Database=AdventureWorks2008R2; Network=dbmssocn"
Bu connection string'i replicated database'ler için de uygulamam mümkün mü? Ayrıca son sorum, bazı yapılarda hem mirroring, hem de replication kullanılıyormuş. Bunun nedeni nedir? Ne için mirroring kullanılıyor ve ne için replication kullanılıyor?
Teşekkürler..
Merhaba,
Sunumlara katılmadığım için hangi detaylanırın konuşulduğunubilmiyorum. Ben kendi tecrübelerime dayanarak sorularınızı yanıtlamayaçalışayım.
Bu arada aşağıdaki yorumlarımı SQL Server 2008’de Mirroringve Replication için yapıyor olacağım. Fakat R2 gerçek bir release olmadığı içinmirroring ve replication’da önemli değişiklik olmadığını düşünüyorum.
"Şimdi Mirroring ile aktif /pasif çalışıyor sunucular. Witness server, Principal ile Mirror server'ısürekli kontrol ediyor, Principal server down olursa, Mirror server'ı upederek, Principal olmasını sağlıyor."
İlk olarak şu konuyu açıklık getirmek lazım. Evet mirroring transactionaçısından aktif/pasif bir çözümdür. Principal sunucu Transaction’a açıkposizyondayken secondary yani mirroring sunuculardaki DB’lere ulaşılmaz. Fakat secondaryserver’daki DB’lerin snapshot’ları alınırsa bu DB’ler readonly olarak reportingamaçlı kullanılabilir. Hatta bu konuda zamanında çok güzel bir white paper vardı.Mirroring yapılan sunucularda Sysnonyms ler kullanılarak secondary server deotomatik snapshot’lar oluşturuluyor, her gelen yeni istek en son oluşturulmuşyani en güncel snapshot’a yönlendiriliyor, diğer snapshot’lardaki connection’larbitene kadar bunları dokunulmuyor ve bittikten sonra bu snapshot’lar deleteediliyor. Bu white paper’a internetten ulaşabilirsiniz.
Yani konuyu toparlayalım. Mirroring reporting gözüylebakıldığında Aktif/Aktif birçözümdür. Principal sunucu transaction’ları yaparken secondary server reportingamacıyla kullanılabilir.
Replication'daise aktif / aktif çalışıyor sunucular. Bir tane distributor var,diğerleri ise subscriber server olarak çalışıyorlar. Kayıtların Distributor'egirilmesi ve sorguların load balanced şekilde 2 sunucunun üzerinden yapılması,performansı arttırıyor.
Buradaki kastınız gene ana sunucu transactional diğer sunucureporting amacıyla kullanılacak ise evet haklısınız. Lakin burada direk birload balancing mantığı olduğunu söylenemez. Hangi sunucuya hangi uygulama ilebağlanacağınızı sizin vermeniz lazım. Gelen isteklerimin bir kısmı a sunucusunabir kısmı b sunucusuna gitsin diye otomatik bir yönlendirme söz konusudeğildir. Ve amaç secondary server ı reporting amaçlı kullanmak ise bunu mirroring’lede yapabildiğimizi bir önceki paragrafta belirtmiştim.
"Bu noktada sormak istediğim,neden Mirroring kullanıldığı? Yani baktığınızda replication'ın çok avantajıvar. Bir kere 2 sunucu yetiyor. İkincisi ikisi de aktif / aktif çalışabiliyorki performans için çok önemli bir nokta. Mirroring'de bir tane sunucuyu süreklidown olarak bekletiyorsunuz aslında. Sürekli bekleyen ve zaten belirli bir ramve kaynak kullanan sunucu varken, bunu subscriber şeklinde, sorgularıyapabileceğimiz bir sunucu olarak kullanmak çok daha mantıklı geliyor kulağa.Bir de en önemlisi, Merge Replication. Yani Subscriber'a girilen kayıtlarDistributor'e de gönderilebiliyor ki bu da aktif / aktif çalışan 2 primaryserver demek. Böyle bir şey mümkün olduktan sonra neden Mirroring ihtiyacıoluyor, düşündükçe anlam veremiyorum."
Bu paragrafın ilk 2-3 cümlesini yanıtladığımızı düşünüyorum.Gelelim merge replication’a. Merge replication replication tiplerindenbirisidir ve replication’a dahil olan node’ların hepsinin hem publisher hemsubscriber olmasını sağlar. Yani her sunucu hem bilgi gönderir hem bilgi alır.Yalnız burada çok önemli bir kısıtlama vardır. Merge replication yapılacaktable’larda Primary Key bulunması zorunludur. Onun dışında aktif/aktif çalıştırma gene loadbalancing mantığında değildir. Hangi uygulamanın yada hangi prosess’in hangisunucuya gideceğini kendiniz belirtmeniz gerekmektedir.
Bir noktaya daha açıklık getirelim, mirroring yapıda witnesssunucu kullanılması zorunlu değildir. Kullanılmazsa otomatik failover olmazsadece. Dolayısıyla 2 sunucu yeterlidir. Ayrıca witness server kullanılacaksadahi bunun ayrı bir server olma zorunluluğu yoktur. Primary yada secondarysunucu da ayrı bir instance ve Express edition bile olabilir.Dolayısıyla mirroring yapıyı da 2 sunucuyla kurmanız mümkündür.
"İnternette özellikle üzerindedurulan Mirroring'in high availability sağlaması. Yalnız bu da cluster gibideğil tabi, gördüğüm üzere connection string üzerinden sağlanabiliyor. Pekiaynı tip connection stringler, replication durumundaki database'ler için demevcut değil mi? Replicated durumdaki ana sunucu down olduğunda, connectionstring'i manual mi değiştirmem gerekiyor?"
Evet en can alıcı noktaya siz zaten değinmişsiniz. Mirroing gerçekbir high availability çözümüdür. Connection string’e yazılacak bir mirroingkeyword’ü ile failover gerçekleştiğinde application’da hiç bir değişiklikyapmadan artık yeni server’a yönlenme sağlanmış olacaktır. Replication’da iseböyle bir durum yoktur. Application’larınızda sizin değişiklik yapıp yeniserver bilgilerini kullanmanız gerekmektedir.
Bir başka noktaya değinecek olursak. Diyelimki A sunucusuprimary, B sunucusu secondary olsun. Bizde mirroing ve replication failoverlarını karşılaştırıyoruz. Mirroing yapıda failover yapıldığı anda rollerdeğişir. Bu sefer B primary olur ve A secondary olur ve mirroring aynenyapılmaya devam eder. Tekrar failover yapıldığında tekrar görevler değişir amasizin mirroring yapısında herhangi bir ayarlama yapmanıza gerek yoktur.
Bu konuya replication gözünden bakarsak; A sunucusu downolduğunda B ye yönlendiniz diyelim. Bu durumda artık B publisher A subscriber,Sizin replication modellerinizi tekrar tanımlamanız gerekmektedir.
Son olarak kısa kısa cümlelerle 2 yapıyı karşılaştıralım.
· Mirroring’de witness sunucu ile beraberautomatic failover şansı vardır. Replication’da yoktur.
· Mirroring’de failover olduğunda programda birdeğişiklik yapmanıza gerek yoktur. Replication’da programınızda değişiklikyapmanız gerekir.
· Mirroring’de failover olduğunda roller otomatikdeğişir mirroring yaşamaya devam eder, replication’da yönlenme sonrası rolleritekrar tanımlamanız gerekir.
· Mirroing de high safety mode’u kullanırsanız eğerveri kaybı sıfırdır. Bu modda principal server’da bir değişiklikyapılmak istendiğinde secondary serverda commit edildiği bilgisi geldiktensonra primary de değiştirilir. Bu da her 2 database’in eşit gitmesini sağlar.Replication’da ise veri kaybı ihtimali her daim mevcuttur.
· Mirroring yapıda secondary server snapshot’larile reporting amaçlı kullanılabilir.
· Mirroring DB seviyesindedir. Yani DB’nin tamamımirroring yapılır. Replication’da ise bir table, hatta bir kolon mu repliceedilebilir.
· Replication’ı bir ftp side ını yada farklı birveritabanı(oracle vs) ile yapmak mümkündür. Mirroring ise SQL Server DB leriarasında yapılır. Hatta major versiyonlar arasında yapılan mirroring’lerde bilesıkıntı oluşmaktadır. Bu da mirroring’in dev avantajı sayılabilir.
İlk bakışta aklıma gelenler bunlar. Eğer kafanıza takılan /daha derin anlatmamı istediğiniz bir nokta varsa belirtin lütfen.
Mesut Beyin webcast ve makalesi ile ilgi dökümanlarda anlatıldığı gibi kendi sistemime uyguluyorum.
2 ayrı lokasyonda sunucum war . Bunlardan uzak olan sunucuyu , mirroring yapmak istiyorum. TCP:/........ kısmını ve pinicipal , mirroring kısımlarını set etmeme rağmen hata alıyorum. 5001 VE 5022 portlarını her iki modeme açmama rağmen hata alıyorum.
Sunucularımın her 2 side sql server authentication modda giriş yapıyor ve herhangi bir domaine dahil değiiler.
Örnek bir tcp yapılandırması yazabilirmisiniz rica etsem ?
Services account for following instances kısmında ise ne yazmam gerekiyor.
Pirincipal :
Mirror :
sql server authentication modla giriş yapılan sunucularda connection security ayarlarini nasil setlemem gerekiyor. Örnek yazarsanız işimi görücem.
Not: Witness server kullanmıyorum.