SQL Server 2014 Database Mirroring Adım Adım Kurulum ve Temel Yapılandırma
SQL server 1989 yılınan beri hayatımızda olan ve Microsoft’ un en değerli ürün ailesinden birini oluşturmaktadır. Özellikle 2008 sürümünden sonra çok hızlı bir gelişim göstererek rakiplerine oranlar ciddi pazar payı kazanımı sağlamak ile beraber hangi büyüklükte olur ise olsun iş yüklerinin altından kalkmayı başarmaktadır.
Yıl |
Sürüm Adı |
1989 |
SQL Server 1.0 |
1991 |
SQL Server 1.1 |
1993 |
SQL Server 4.21 |
1995 |
SQL Server 6.0 |
1996 |
SQL Server 6.5 |
1998 |
SQL Server 7.0 |
1999 |
SQL Server 7.0 |
2000 |
SQL Server 2000 |
2003 |
SQL Server 2000 |
2005 |
SQL Server 2005 |
2008 |
SQL Server 2008 |
2010 |
SQL Azure |
2010 |
SQL Server 2008 R2 |
2012 |
SQL Server 2012 |
2014 |
SQL Server 2014 |
Biz makalemizde SQL 2014 serveri konu alacağımız için makalemizi SQL Server 2014 kapsamında genişleterek ele alacağız. Sql Server 2014 kullanılma ortamlarına göre aşağıdaki sürümler ile hayatımıza girdi.
Enterprise |
Business Intelligence |
Standard |
Web |
Developer |
Express |
Sql Server 2014 Lisanslama politikası da aşağıdaki gibidir.
SQL 2014 Versiyonları |
Lisanslama Modelleri |
Lisanslama Türleri |
Enterprise |
Per Core |
Volume Licensing, Hosting |
Business Intelligence |
Server + CAL |
Volume Licensing, Hosting |
Standard |
Per Core, Server + CAL |
Volume Licensing, Retail, Hosting |
Developer |
Per User Fee |
Volume Licensing, Retail |
Web |
SPLA |
Hosting |
Express |
Free |
Free |
Sql 2014 Yüksek erişilebilirlik yapısı da aşağıdaki gibi farklı senaryolar içermektedir.
AlwaysOn Availability |
Database Mirroring |
Log Shipping |
Bu genel bilgilerden sonra Sql Mirroring yapısını detaylandırabiliriz. Biraz uzun soluklu bir anlatım olacak ama burada amaç bu işi bilmeyen birinin bu işi tamamıyla kavraması yönünde.
Sql mirroring yapısı aşağıdaki şekilde işlemektedir. Bu yapıda bir tane sunucumuzda aktif veritabanı çalışmakta ve ikinci bir sunucuya bu veritabanımız kendini senkronize etmektedir. Aktif veritabanından bir sorun olması durumunda Witness sunucumuz bunu algılamakta ve pasifte bekleyen veritabanına yönelerek yapıda bir süreklilik sağlamaktadır. Genel yapıyı özetledikten sonra daha da detaya girebiliriz.
Öncelikle Sql Mirroring yapısında kullanılan terimleri ele alalım. Makalemiz bu terimler üzerinden ilerleyecek olduğu için bu terimleri kavramamız önem taşımaktadır.
Sql Miroring : Felaketten kurtarma, iş sürekliliği sağlamak adına Microsoft firması tarafından SQL Veritabanı Sunucuları için geliştirilmiş yüksek erişilebilirlik çözümlerinden bir tanesidir. SQL Server 2005 sp1 ile hayatımıza giren bu çözüm sonraki SQL Server versiyonları olan SQL Server 2008, SQL Server 2012 versiyonları tarafından da desteklenmektedir. Bu yapıdaki amaç bir veritabanının iki farklı sunucuda kopyası oluşturularak, mevcut aktif sunucunun herhangi bir nedenden dolayı servis verememesi, devre dışı kalması ya da veritabanının bozulması durumunda yedek sunucu üzerinde bulunan veritabanı ile erişimin ve servisin aynen devam ettirilmesidir.
Principal : Aktif olarak hizmet veren kaynak veritabanının tutulduğu sunucudur. Kaynak sunucu. Bu sunucu üzerinde bulunan veritabanının kendisi de kaynak veritabanı veya principal database olarak isimlendirilir.
Mirror : Kaynak veritabanının kopyasının oluşturulduğu yedek sunucudur. Bu sunucu üzerinde oluşan veritabanı da kopya veritabanı, yedek veritabanı veya mirror database olarak adlandırılır.
Witness : Principal ve Mirror sunucuları sürekli izleyerek bir kesinti olayı gerçekleşmesi durumunda otomatik olarak rollerin değiştirilmesi görevini yapar. Farklı bir tabirle database mirroring çözümünde ana sunucuda oluşabilecek bir kesinti durumunda yedek sunucuyu ana sunucu konumuna getirip manuel bir müdahaleye gereksinim olmadan sistemin aksamadan yürümesini sağlar. Witness sunucu kullanmak isteğe bağlıdır. Eğer otomatik geçiş istenmiyor veya buna bir sunucu ayrılamıyor ise kesintilerde rol geçişini manuel yapılacağı durumlarda tercih edilir.
Database Mirroring yapısna geçiş yapmadan önce dikkat edilmesi gerekenler;
– Database Mirroring yapısına geçiş için karar verilecek olunursa Sql Server versiyonları minimum SQL 2005 SP1 olmalıdır.
– Sql Server Sunucularının kurulu oldukları işletim sistemleri farklı olabilir. (Örn: Server 2008, Server 2012)
– Sql server kurulu olan işletim sistemleri 32 bit veya farklı olarak 64 bit olabilir.
– Principall ve mirror sunucuları aynı versiyon ve sürümde olmaları zorundadır.(Enterprise, Standart)
– Database Mirroring Enterperise ve Standart versiyonlar tarafından desteklenmektedir.
– Witness sunucusu ise Sql 2005 SP1 üzeri bir sql versiyonu olabilir. Express Edition bile kullanılabilir.
Artık ufaktan yapımızın kurulumuna geçebiliriz. Ben test ortamımı aşağıdaki şekilde kurdum.
Server |
Rol |
Versiyon |
Dc |
Witness |
Sql 2014 Standart |
SQLSERVER1 |
Principal |
Sql 2014 Standart |
SQLSERVER2 |
Mirror |
Sql 2014 Standart |
Yapımızda aşağıdaki gibidir. Test ortamım için tamamen sanal sistemimi kullanacağım.
Domain Controller sunucum aşağıda olduğu gibi görünmektedir. Bu DC olan sunucumda Witness rolünü barındıracağım.
SQLSERVER1 ve SQLSERVER2 sunucularımda ise Principal ve Mirroring sunucularımı barındıracağım. Bu gerekli ortam tanıtımından sonra artık ufak ufak adımlarımıza geçelim.
Öncelikle 3 sunucumuza da SQL Server 2014 Standart kurulumunu yapıyor olacağım. Ben bir sunucumda kurulumu anlatacağım. 3 sunucu üzerinde aynı işlemler yapılacağı için bu adımları 3 sunucu üzerinde tekrarlamanız gerekmektedir. Önceki zamanlarda Sql Server 2012 kurulum makalesi paylaştığım için bu adımları kısaca resim olarak gerektiği yerde açıklayarak geçeceğim. Sql Server 2012 kurulum makaleme aşağıdaki link üzerinden erişim sağlayabilirsiniz. SQL Server 2014 kurulum olarak aynı şekilde kurulmaktadır.
http://www.cozumpark.com/blogs/sql/archive/2013/04/07/sql-server-2012-kurulumu.aspx
SQL Server 2014 kurulum medyamızdan Setup.exe dosyasını çalıştıralım.
Karşımıza gelen kurulum ekranında ortamımıza yeni bir SQL Server kuracağımız için “New SQL Server standalone installation or add features to an existing installation” seçeneğini seçelim.
Ben test ortamı için kurulum yapacağımdan dolayı “Evaluation” seçeneğini seçip ilerliyorum. Siz kurulumuzu yaparken burada gerekli sürümü seçer sürümün gereksinimine göre key girerek veya girmeyerek bir sonraki ekrana ilerleyebilirsiniz.
Lisans anlaşmasını kabul edip bir sonraki adıma ilerleyelim.
Gerekli güncellemeleri kurulum öncesinde denetlettirebiliriz. Tabi bu sizin seçiminize kalmış ben bu şekilde bir sonraki adıma ilerliyorum.
Kurulum için gerekli sistem denetlemesi yapıldı. İleride portlar noktasında sorun olabilir diye Firewall uyarı verdi. Biz bu adımı ayrıca ele alacağımız için bir sonraki ekrana ilerliyoruz.
Biz tüm özellikleri eklemeyeceğimiz ve Share Point ortamı için SQL Server kurmayacağımız için yeni bir SQL Server kurulumu yapacağımız için “SQL Server Feature Installation” seçeneğini seçerek bir sonraki ekrana ilerliyoruz.
Bu ekranımızda gerekli rolleri seçiyoruz. Aşağıdaki seçimleri yapmamız bizim için yeterli. Geri kalan özellekler bizim senaryomuzda bize lazım değil boş yere zaman ve sistem kaynaklarını kaybetmemek için bu adımları geçiyoruz.”Management Tools-Complete” kesinlikle kurulmalıdır. Mirroring yapılandırması bu toolun kurulumu ile aktif olmaktadır.
Kurulum için gerekli olan Feature’lar denetlendiğinde .NET Framework 3.5’un kurulu olmadığı görünüyor öncelikle bu Feature’ı kurmamız gerekiyor.
Server manager konsolunu açarak “Add roles and features” linkine tıklayalım.
Gelen ekranı geçerek sonraki ekrana ilerleyelim.
“Role – based or feature-based installation” seçimi ile sonraki ekranımıza ilerleyelim.
Bu sunucumuza gerekli olan .NET özelliğini kuracağımız için zaten diğer ortamdaki sunucularımızda eklenmediği için mevcut sunucumuzu seçerek ilerleyelim.
Biz rol kurulumu yapmayacağımız için bir sonraki ekrana ilerleyelim.
Karşımıza gelen Feature ekleme ekranından .NET Framework 3.5 Features seçimini yaparak bir sonraki ekranımıza ilerleyelim.
Sihirbaz bize yapılacak olan işlemler noktasında bir özet sundu. Install butonu ile özelliğimizin kurulması adımını başlatalım.
Kurulum tamamlandı “Close” ile adımımızı bitirip SQL Server 2014 kurulum ekranımıza geri dönelim.
SQL Server 2014 kurulum adımımızda karşımıza çıkan sorunu aştık ve sonraki adıma ilerledik. Burada bir instance ismi belirleyebilir veya var olan ile ilerleyebiliriz. Ben var olan isimle bir sonraki ekranımıza ilerliyorum.
Karşımıza Server Configuration ekranı geldi. Service Accounts tabında SQL Server 2012 Servislerini çalıştıracak kullanıcı hesapları belirlenir. Bu servis seçimlerini aşağıdaki gibi bırakabilirsiniz. İlerleyen makale serilerimizde yapacağımız bazı örnekler ile bu kısımlara zaten yer vermek durumunda kalacağız.
Collation tabından SQL Server dil ve karakter set ayarlarını “SQL_Latin1_General_CP1_CI_AS” olarak seçip bir sonraki ekrana ilerleyelim.
Biz yapımızda şu anda “Windows authencation mode” seçimini yapacağız. Bu metot ile kimlik doğrulaması yaptığım için Windows kullanıcılarından bir tanesini seçmem gerekmekte. Kurulumu Administrator hesabı ile yaptığımız için “Add Currnet User” seçimini yaparak Administrator kullanıcısının otomatik eklenmesini sağlayabiliriz.
Biz Database Mirroing yapılandırması yapacağımız için Gerekli SQL Server Directory’lerini belirlerken iki tarafta da aynı yolları göstermek durumundayız. Bu nedenle ben SQL Directory yapılandırmasında farklı bir disk yapısı kullanmadığım için tüm sistem yapısını varsayılan değerde bırakıp bir sonraki ekrana ilerliyorum.
Sihirbaz bize yapılacak olan işlemlerin bir özetini getirdi. Bu ayarları Configuration file path birimine bir dosya olarak atacak. Biz Install ile kurulumu başlatalım.
Kurulum işlemleri başladı.
Kurulum tamamlandı ve hatasız olarak tüm işlevler başarı ile tamamlandı.
Sql servislerimiz sorunsuz olarak konsola eklenmiş ve instance’ımıza ait olan SQL Server (MSSQLSERVER)” rolü “running” olarak çalışır durumda.
Kısa yollarımız sorunsuzca oluşturuldu. “SQL Server 2014 Management Studio” ekranını açabiliriz.
Mixed mode olarak kurulum yaptığımız için ve kurulumu ADMINISTRATOR hesabı ile yaptığımız için “Connect” butonu ile yönetim konsolumuzun açılmasını sağlayabiliriz.
Konsolumuz sorunsuzca açıldı. Bizim buraya kadar olan SQL Server 2014 kurulum adımlarını geriye kalan 2 sunucumuz üzerinde de yapmamız gerekmektedir.
Geri kalan 2 sunucumuzda da SQL Server 2014 kurulumlarını tamamladıktan sonra 3 sunucumuzda 1433 numaralı porta izin vermemiz gerekmektedir.
3 sunucumuzda kurulum tamamlandıktan sonra ve 3 sunucumuzda 1433 numralı portmuza firewall üzerinden izin verdiğimizde diğer sunucularımız üzerinde bulunan SQL Server 2014 sunucularımızı SQL Server Management Studio üzerine ekleyebilir ve erişebilir duruma geldik.
Resmimizde görüldüğü gibi Witness, Principal ve Mirror sunucularımız konsolumuza eklendi ve Mirroring yapılandırmasına hazır durumda.
SQLSERVER1 sunucum üzerinde “RIZASAHAN” isminde bir veritabanı oluşturdum. Bu veritabanımda “MUSTERILER” isminde bir tablo oluşturdum ve içerisine birkaç kayıt girdim.
Database Mirroring yapacağımız veritabanımızın özelliklerine girelim. Daha önce SQL sunucusu kurulan yapıda Database Mirroring yapılacak ise veritabanı “Recovery Model yapısı Full“olarak ayarlanmak zorundadır. Biz sıfırdan bir veritabanı oluşturduğumuz için zaten özelliğini Full olarak ayarladık.
Veritabanımız üzerinde Mirroring özelliği bulunmakta fakat aktif edilmemiş durumdadır.
Veritabanımızın full recovery modelinde olup olmadığını kontrol ettikten sonra Database Mirroring özelliğini aktif edebilmemiz için Principal sunucumuz üzerindeki veritabanının yedeğini almamız gerekmektedir. Bu nedenle veritabanımız üzerinde sağ tuş yaparak TaskàBack Up.. menülerine tıklayalım.
Karşımıza gelen ekranda Backup Type olarak Full seçiliyken yedek almak için “OK” butonuna tıklayalım.
Yedeğimizin başarı ile alındığı mesajını “OK” ile geçelim.
Full olarak veritabanımızı yedekledikten sonra birde Transaction log backup olarak yedek almamız gerekmektedir. Bu işlem için yine veritabanımız üzerinde sağ tuş TaskàBack Up… menüsüne tıklayalım.
Backup Type seçeneğini Transaction log backup olarak seçip “OK” ile yedeği başlatalım.
Yedeğimiz başarı ile tamamlandı uyarısını yine “OK” butonuna tıklayarak kapatalım.
Öncelikle full yedeğimiz alınmış durumda ve üzerine Transaction yedeğimizde eklenmiş durumda. Yedek dizinimize baktığımızda yedeklerimizin tek bir dosyaya sorunsuzca alındığını görebilmekteyiz.
Evet buraya kadar olan adımlarımızı tamamlayarak Database Mirroring için gerekli olan zorunlu adımları tamamladık. Principal sunucumuz üzerinde şimdilik işlemimiz bitti. Şimdi Mirror sunucumuza geçip işlemlerimize devam edebiliriz. Mirror sunucumuzda Principal sunucu üzerinde yedeği alınan veritabanının geri dönülme işlemi yapılması gerekmektedir. Mirror sunucumuzda Database üzerinde sağ tıklayarak “Restore Database…” menüsüne tıklayalım.
Yedeğimizin yolunu göstermek için “…” butonuna tıklayalım.
Açılan ekranda “Add” butonuna tıklayalım.
Yedeğimizi seçip “OK” butonuna tıklayalım.
Yedeğimiz eklendi “OK” butonuna tıklayalım.
Yedeğimizin içinde iki adet yedek barındığı için “Companent” sütununda bu yedeğin Database Full ve Log Transaction yedek barındırdığını görebiliyoruz. Biz ilk seçenek olan Database Full yedeğimizi seçelim ve ek ayarlar için “Option” kısmına gelelim.
Yedeğimizin dönüş özelliğini “RESTORE WITH NORECOVERY” mod olarak seçmemiz gerekiyor. Bu işlemden sonra “OK” ile restore işlemini başlatalım.
RIZASAHAN veritabanı yedeğimiz SQLSERVER2 sunucumuz üzerine başarılı şekilde restore edildi.
Bu durum SQLSERVER2 sunucumuz üzerinde aşağıdaki gibi görünmektedir.
Şimdi SQLSERVER1 üzerinden alınan yedeğimizi SQLSERVER2 Sql sunucumuz üzerinde döndüğümüze göre geri kalan adımlara ilerleyebiliriz. Full yedeği döndükten sonra birde bu yedeğin üzerinde Transaction Log yedeğini dönmemiz gerekmektedir. Bu nedenle Restore ettiğimiz veritabanı üzerinde yarım kalan adımımızı tamamlamak için sağ tuş TaskàRestoreàTransaction Log.. menüsüne tıklayalım.
Yedeğimizin yolunu göstermek için “…” butonuna tıklayalım.
Açılan ekranda “Add” butonuna tıklayalım.
Yedeğimizi seçip “OK” butonuna tıklayalım.
Yedeğimiz eklendi “OK” butonuna tıklayalım.
Yedeğimizin içinde RIZASAHAN veritabanına ait olan Full Database yedekleme ekranımıza eklendi. Biz “Option” kısmına gelelim.
Bu yedeğimizi de yine (RESTORE WITH NORECOVERY) modda döneceğimiz için aşağıdaki ekranda gözüktüğü gibi bir seçim yapalım ve “OK” tuşuna tıklayalım.
Transaction Log Yedeğimiz “RIZASAHAN” veritabanı üzerine başarı ile dönüldü.
Buraya kadar olan adımları tamamladıktan sonra Database Mirror özelliğini faaliyete geçirmek için 5022 portunu da 3 sunucumuzda açmamız gerekmektedir.
Bu kadar ön bilgi ve hazırlıktan sonra Database Mirror özelliğini aktif edebilir hale geldik. J Şimdi Principal sunucumuz üzerinde yer alan RIZASAHAN veritabanına sağ tıklayarak “TaskàMirror” butonuna tıklayalım.
Sarı alanda görüldüğü gibi Mirroring yapımız konfigüre edilmemiş durumda. “Configure Securtiy…” butonumuza tıklayarak konfigürasyon adımlarını başlatalım.
Bize genel bilgi veren sihirbaz ekranını geçerek bir sonraki ekrana ilerleyelim.
Bu ekranımızda Witness sunucumuzun güvenliğinin konfigüre edilip edilmeyeceği sorulmaktadır. Makalemizin başında da belirttiğimiz gibi Witness kullanılması zorunlu değildir. İşlemlerimizi otomatikleştirir. Biz gerekli masrafı yapmak istemiyor veya mirroring geçişini manuel yapmak istiyorsak Witness kullanmak zorunda değiliz. Makalemizde Witness kullanacağımız için bu ekrandaki soruyu YES seçeneği ile geçerek sonraki ekranımıza ilerliyoruz.
Yapılandıracağımız rolleri seçip ilerlememiz gerekiyor. SQL Database Mirroring senaryomuzda Pricipal ve Mirror zorunlu olduğundan bunların seçimine müdahale edemiyoruz. Bu ekranda yine Witness serveri iptal etme hakkımız var ama biz Witness yapılandırmasını yapacağız. Şunu da belirtmekte yarar var Witness ortama sonradan dahil edilebilir.
Mirror sunucumuzu seçiyoruz. Port olarak ise 5022 portunu seçiyoruz. Buradaki instance serverler tek SQL server üzerinde olsa farklı portlar kullanmamız gerekecekti. Bizim SQL serverlerimiz ayrı ayrı kurulduğu için yapılandırmadaki Mirror ve Witness sunucularda yine 5022 portunu kullanabiliriz. Bir sonraki ekranımıza ilerliyoruz.
Bizden Mirroring sunucusunu göstermemiz istenmektedir. Kendisi otomatik olarak SQLSERVER2 serverini seçti. Biz bunu seçmeyip farklı sunucu seçebilirdik fakat bu serveri seçeceğimiz için bu kısma dokunmuyoruz. Bu nedenle bu server’imize bağlantı sağlamamız gerekmektedir. Bu nedenle Connect butonumuza tıklayalım.
Gelen ekranda Authencation tipimize göre login olmamız gerekmektedir. SQLSERVER sunucularımın tamamını Mixed Mode olarak kurduğum için Administrator hesabı ile bağlantı sağlayacağım için direkt olarak Connect butonuna tıklıyorum
Gerekli check işlemi tamamlandı bağlantı bilgilerimizde sorun olmadığı için SQLSERVER2 sunucumuz mirror konumuna geldi. Port olarak yine yukarıda bahsettiğimiz gibi server’lerimizi ayrı ayrı kurduğumuz için 5022 numaralı portu kullanabiliriz. Endpoint isimlerini karışıklık olmaması adına Principal server’da Pricipal olarak, Mirror Server’da mirror olarak bırakıp sonraki ekranımıza ilerliyoruz.
Bu ekranımızda bizden Witness Serverimizi tanıtmamız istenmektedir. Witness rolünü barındıracak olan SQL Server’i DC isimli sunucuma kurduğum için seçimi bu şekilde bırakarak Connect… butonuna tıklıyorum. İki önceki ekranımızda olduğu gibi yine bağlantı sağlıyoruz. Yine portumuzu 5022 olarak varsayılan ayarda bırakıp, Endpoint ismini Witness olarak bırakıp sonraki ekrana ilerliyoruz.
Bu ekranımızda bizden Service Account hesabının bilgileri istenmektedir. Her sunucu için ayrı hesap kullanılabileceği gibi tek bir hesapta kullanılabilir. Ben Mixed Mode olarak kurulum yaptığım için Administrator hesabımı domainismi\hesapismi şeklide yazarak sonraki ekrana ilerliyorum.
Bu ekranımızda yapılacak olan işlemlerin özeti yer almaktadır. Finish ile yapılandırmamızın başlamasını sağlayalım.
Yapılandırmamız 3 sunucumuz içinde başarı ile uygulandı. Close ile bu ekranımızdan çıkalım.
Karşımıza gelen ekranda bize Database Mirroring yapısını start edip etmeyeceğimiz sorulmaktadır. “Start Mirroring” butonu ile tıklayarak Database Mirroring yapısının başlamasını sağlayalım.
Mirroring işlemi başlatılamadı ve aşağıdaki hata ile karşılaştık. Bunun nedeni Database Mirroring işlemini başlatabilmemiz için SQL Server kurulumu sırasında Servis Hesapları kullanmış olmamızdır. Bu nedenle işlemimize başlayabilmek adına Servis hesabı yerine farklı bir hesap ataması yapalım.
Sql Server Configuration Manager üzerinde MSSQL instance üzerinde çift tıklayarak Log On tabında Administrator hesabını gösterelim ve gerekli şifreyi girelim. Apply ve OK butonlarına tıklayarak bu ekranımızdan çıkalım.
Yukarıda yapılan işlemi Witness, Principal ve Mirror sunucularımızın hepsinde yapıyor olmamız gerekmektedir. Bu işlemi yaptıktan sonra Database Mirroring işlemini başlatmak için tekrardan “Start Mirroring” butonumuza tıklayalım.
Bu kez hata almadan Database Mirroring yapımız aktif oldu. Aktif olduktan sonra senkronizasyon işleminin başladığını aşağıdaki kırmızı alanımızda görebilirsiniz.
Artık bu durumda senkronizasyon tamamlandığında veri tabanımıza gelen bilgiler aynı anda iki veri tabanımıza birlikte yazılacaktır. Çalıştırılan bir komut iki tarafa commit edildiğinde görevini yerine getirecektir. Burada minimal düzeyde bir performans sıkıntısı olacaktır.
Database Mirroring yapısının ne durumda olduğunu görebilmek adına SQL Server Management Studio üzerinden durumu monitorize edebilmekteyiz. Bu işlemi yapabilmek için Database Mirroring yapısına kattığımız veritabanımız üzerinden sağ tıklayarak TaskàLaunch Database Mirroring Monitor… menüsüne tıklayalım.
Açılan ekranımızda replikasyon durumunu görebilmek adına Replication monitör menüsünü tıklayalım.
Açılan ekranda monitorize edeceğimiz sunucularımızı eklemek için Register mirrored database linkine tıklayalım.
Öncelikle ekranımızda ilk görülen Mirroring Sunucumuza “Connect” butonuna tıklayarak bağlantı sağlayalım.
Konsolumuza Database Mirroring sunucularımız eklendi. Şu anda senkronizasyon tam olarak tamamlanmadığı için hatalar görmekteyiz. Tam senkronizasyon sağlandığında burada sadece yeşil ikonlar görerek işlerin yoluna girdiğini anlayacağız.
Belirli bir zaman bekledikten sonra, veritabanının büyüklüğü, disk network performansı gibi kriterlere göre senkronizasyon zamanı biraz değişiklik gösterebilmektedir. Şu anda sorunsuz şekilde senkronizasyon tamamlanmış olarak görünüyor. Sunucularımız senkronize bir şekilde işlevlerini sürdürmeye başlamış durumdalar.
Bu durum SQL sunucularımızın olduğu ekranda aşağıdaki şekilde gözlemlenmektedir.
Dilerseniz senkronizasyon sırasında oluşabilecek durumlarda karşımıza çıkan terimlerden kısaca bahsediyor olalım.
Synchronized : Principal sunucu ile mirror sunucu aynı veritabanı kopyasına sahiptir ve senkronize edilecek veri farkı yoktur.
Synchronizing : Database mirroring yapısının kurulduğu anda görülen durumdur. Doğal olarak mirror sunucusu principal’in gerisinde kalmıştır ve değişiklikleri kendisine güncellemeye çalışıyor demektir.
Suspended : Principal sunucunun mirror sunucuya transaction’ları gönderemediği durumlarda mirroring durum olarak bunu gösterir. Özellikle failover gerçekleşirse bu durum görülür. Ayrıca eğer manuel olarak database mirroring pause edilirse de yine bu durum görülebilir.
Pending_Failover : Failover olduğunda ve principal sunucu kendi üzerindeki açık sessionları kapatıp kendisini mirror sunucu olarak ayarladığı anda gözüken durumdur.
Disconnected : Mirroring yapısındaki ortakların (principal, mirror vb.) aralarındaki bağlantıyı kaybettikleri zaman oluşan durumdur.
Buraya kadar gerçekleşen senaryoda Database Mirroring yapısının ne olduğunu ve nasıl kurgulanacağını anlattık ver gerçekleştirdik. Şimdi birazda testler yapalım ve Mirroring durum ve terimlerini inceleyelim. Database Mirroring ekranımıza girebilmek için veritabanımız üzerinde sağ tılayarak TaskàMirror… menüsüne tıklayalım.
Şu an açılan ekranımızda Pricipal, Mirror ve Witness sunucularımızı görebilmekteyiz. Burada dilersek yukarıda belirttiğimiz gibi Witness sunucumuz olmasaydı “Failover” butonu ile rol değişimini yapabilir principal ve mirror sunucularımıza rol değişimi yaptırabilirdik. Bu durum felaket anından Principal sunucumuzda sorun olması durumunda uygulanabilir.
Pause ile Database mirrorin işlemini geçici süre durdurabiliriz. Bu sunucularda bakım yapılması durumunda geçerli olacak bir durumdur.
Remove Mirroring ise ortamımızdan Database Mirroring yapısını kaldırmak istediğimiz durumda kullanılabilir.
High Performance (Asynchronous):Bu modda öncelikli olarak Principal veritabanına işlem onaylanarak yazılır, sonra da Mirror veritabanına yazar. Biraz açmak gerekir ise Principal veritabanı yapılan transaction sonucunu kendi veritabanına yazmak için mirror veritabanından da eşzamanlı yazma onayı beklemeden hemen kendi üzerine yazar. Dolayısıyla mirror veritabanı, principal veritabanı ile farklı zamanlarda yazma işlevini yerine getirirler, mirror veritabanı principal veritabanını geriden takip eder. Bu modda sadece Principal Server ve Mirror Server rolleri kullanılır, Witness Server rolü kullanılmaz. Principal sunucu ile mirroring sunucu rollerinin değişimi manuel olarak gerçekleştirilir.
Yüksek Güvenlikli (High Safety): Bu modda gerçekleştirilen bir transaction principal veritabanına yazılmadan önce mirror veritabanı sunucusuna da aynı transaction bilgisi gönderilerek mirror sunucusundan gelecek transaction onayı beklenir. Mirror veritabanında transaction onaylandığı ve işletildiği bilgisi geldikten sonra principal veritabanı üzerinde o transaction onaylanarak işlevini yerine getirir. Principal veritabanı gerçekleşen transaction işlevinin mirror veritabanına yazılma onayı sonrasında eş zamanlı olarak yazma işlevini yerine getirir. Bu şekilde hem principal hem de mirror eş zamanlı olarak aynı değişikliğe uğradıkları için bu moda biz aynı zamanda Senkron Mod adı verilir. Bu modda herhangi bir şekilde veri farkı ya da kaybı olmadığı için biz bu moda “yüksek güvenlikli (high safety) adı verilir.
High Safety without automatic failover (synchronous): Hem principal hem de mirror veritabanlarına eş zamanlı olarak yazılan modudur. Witness Server rolü kullanılmayan çalışma modudur. Bu modda principal sunucusundaki veritabanında sorun olursa mirror sunucudaki veritabanını principal rolüne transfer etme işlemi manuel olarak gerçekleştirilir.
Şimdi dilerseniz manuel olarak rol değişimi yapalım. Sunucularımız arasında principal ve mirror rolleri arasında geçiş yapalım. Bu işlem için Failover butonuna tıklayalım.
Karşımıza gelen ekrandaki sorumuza YES ile yanıt verelim.
Şu anda aşağıda olduğu gibi rollerimizin değiştiğini görebilmekteyiz. Principal olan SQLSERVER1 sunucumuz Mirror, Mirror olan SQLSERVER2 sunucumuz ise Principal olarak hizmet etmeye başladı.
Bu durumda SQLSERVER2 sunucumuzu bir sorun olduğunu düşünerek kapatalım. Bakalım bir failover durumunda ne olacak?
Biz yukarıdaki test işlemlerimizde SQLSERVER2 sunucusunu principal yapmıştık. Son testimizde SQLSERVER2 sunucumuzu kapattık. Witness rolü sayesinde roller yer değiştirdi. Aşağıdaki durumda gördüğünüz gibi Principal sunucumuz tekrardan SQLSERVER1, mirror sunucumuz ise SQLSERVER2 oldu.
Bu durum SQL sunucularımız üzerinde aşağıdaki şekilde görülmektedir.
SQLSERVER2 sunucumuzu açtığımızda tekrardan otomatik olarak senkronizasyon başlamaktadır.
Şimdi ise farklı bir test yaparak DC olan Witness sunucumuzu kapatalım.
Bu durumda artık ortamda bir failover olması durumunda geçişlere karar verecek olan sunucumuz ortadan kalktı. Bu durumda geçişleri manuel olarak yapmamız gerekmektedir. Witness kapalı olmasına rağmen yapıda bir aksama olmadan hizmet vermeye devam etmektedir. Durum aşağıda gözlemlenmektedir.
Biz senaryomuzu biraz zorlaştırarak principal sunucumuzu da kapatalım. Ortamda sadece Mirror sunucumuzun aktif olarak hizmet verdiğini düşünelim. Şu anda mirror sunucumuzun da Principal sunucumuz ile olan bağlantısı koptu. Bu durum sunucumuza aşağıdaki şekilde yansıdı.
Bu gibi durumlar çok elzem ve büyük bir sorunun olduğuna dair durumlarda meydana gelebilir. Ortamda Witness sunucunun ulaşılmaz olması durumu istenmeyen senaryodur. Buna karşın yine komut ile zorlama metodu ile principal sunucunun rolü almasını sağlayabilmekteyiz.
SQL sunucumuz üzerinden aşağıdaki şekilde bir sorguyu çalıştırmamız gerekmektedir.
ALTER Database RIZASAHAN SET PATNER FORCE_SERVICE_ALLOW_DATA_LOSS
Bu komuttan sonra sunucumuzu Refresh edelim.
Böyle elzem bir senaryoda Witness olmadığı durumda Principal çökse bile mirror sunumuz ayağa kalkmakta ve principal rolünü almaktadır. Durum aşağıdaki gibi gözükmektedir. Veritabanımıza ve tablolarımıza erişim sağlayabilir duruma geldik.
Uzun soluklu makalemizin sonuna geldik. Umarım yararlı olur. Farklı bir makalemizde görüşmek üzere.