Makalemizde sizlere SQL 2005 le hayatımıza giren ve devam eden SQL Mirroring işleminin SQL Server 2014 nasıl gerçekleştirdiğini anlatacağım. Bütün işletmelerin en önemli kaynaklarından birisi Database’ lerdir. Bizler de Database mirroring alt yapılarını felaket senaryoları, yüksek erişilebilirlik ve iş sürekliliğini devamı için oluştururuz.
Database Mirroring işlemlerindeki asıl amacımız aktif kullanımda olan veritabanımızın farklı bir sunucuda veya farklı bir lokasyonda bulunan sunucu üzerinde aktif yedeğinin tutmaktır. Aktif yedeğin tutulması ile herhangi bir sebepten ötürü hizmet veremeyen veritabanımızın üzerinde bulunan vasıfları mirror sunucumuza devrederek işleyişin devamlılığı sağlanarak herhangi bir aksaklığa meal vermemektir.
Yapım içerinde İstanbul merkezde bulunan AccountDB’ mi İzmır şubemde bulunan SQL Server’ ım üzerinde Database Mirroring ile yedekleyerek herhangi bir sorun karşısında işleyişin sürekliliğini sağlıyacağım. İki lokasyonum arasında IPSec VPN tünelim bulunmaktadır. Authentication kısmında bir sorun ile karşılaşmamak için Mevcut Domain Controller’ ıma İzmir lokasyonumda bir de Additional Domain Controller’ ım bulunmaktadır.
Yapıma dair kısa bir bilgi verdikden sonra database mirroring işlemlerimizi yapmaya başlayalım…
Database Mirroring kurulumumda kullanacağım Principal ve Mirror Sunucularıma ait sunucu ve Instance bilgilerim MAINDB\PRINCIPAL ve SQL2\MIRRORSQL yukarıdaki gibidir.
Genelde yapılarımızda Principal, Mirror ve Witness sunucularımız bulunur ben witness sunucumun konfigürasyonu nu yapmayacağım. İsterseniz bu kavramlardan biraz bahsedeyim.
Principal : Aktif olarak çalışan database’ imizin bulunduğu sunucuya verdiğimiz isimdir. Burada bulunan database principal db’ miz yani birincil veritabanımızdır.
Mirror : Aktif Database’ imizin kopyalandığı ve yedeklendiği sunucumuza verdiğimiz isimdir. Burada ki mirror db’ miz principal db’ mizin kopyasıdır.
Witness : Bu sunucumuzun görevi principal ve mirror sunucumuzu kontrol etmektir. Sürekli olarak principal ve mirror sunucuda işleyişi kontrol ederek herhangi bir kesinti veya sorunda rolleri otomatik olarak değiştirmek witness sunucunun görevidir. Witness sunucu kullanımı opsiyoneldir. Kullanılmayan yapılarda rolleri manuel olarak değiştirmek gerekmektedir.
Database Mirroring işlemini gerçekleştireceğim AccountDB’ min Özelliklerine geliyorum. Burada dikkat edilmesi gereken kısım Recovery Model = Full olmalıdır. Simple ve Bulk-logged Recovery’ modunda olan databaselerde mirroring işlemi uygulanamamaktadır.
Bunun için ilk önce Mirroring yapacağımız veritabanımız üzerinde Recovey Model’ i Full’ e getiriyoruz.
Veritabanımızın özelliklerinde Mirroring’ e geldiğimizde burada herhangi bir Mirroring işleminin henüz yapılmadığını görüyoruz. Gereken ilk işlemleri tamamladıkdan sonra bu pencere üzerinden devam edeceğiz.
İlk olarak Mirroring yapacağımız database’ imizin full yedeğini ve daha sonrasında Transaction Loglarımızın backup’ ını alacağız. Bunun için veritabanımızın üzerinde sağ click > Tasks > Back Up’ diyoruz.
Back Up Database penceremizde Backup Type kısmında Full seçiyorız. Destination kısmında Add diyerek full yedeğini alacağımız database’ imizin nereye alınacağını belirliyoruz ve OK diyoruz.
AccountDB’ mizin full yedeğini aldık. Bu pencerede OK diyorek backup penceremizi kapatıyoruz.
Aynı şekilde Veritabanımızın Transaction Log’ larının backup’ ını almalıyız. Sırasıyla Mirror Sunucumuz üzerinde restore edeceğiz backuplarımızı…
Aldığımız veritabanımızın yedeğini mirror sunucumuzun lokaline taşıyoruz. Bu backup’ ımızı mirror sunucumuz üzerinde NORECOVERY Modda restore edeceğiz bunun için SQL2\MIRRORSQL sunucum da Databases > sağ click > Restore Database… diyorum.
Açılan Restore Database penceremde aldığım yedeğimi restore etmek için Device’ ı seçiyorum sağ tarafda bulunan ”…” butonuna geliyorum ve yedeğimi gösteriyorum ve tamamlıyorum. Yedeğimizi seçtikden sonra Backup sets to restore kısmında geldiğini göreceğiz burada Restore kısmındaki kutucuk işaretli olmalıdır.
Options sekmesine geliyoruz. Burada Recovery state kısmından RESTORE WITH NORECOVERY’ ı modunu seçiyoruz ve OK diyerek veritabanımızı Mirror Sunucumuz üzerinde restore işlemini başlatıyoruz.
Database “AccountDB” restored successfully. Yedeğimizin Mirror Sunucumuz üzerinde başarılı bir şekilde restore edildiğini belirten pencereyi OK diyerek kapatıyoruz. Ardından aldığımız Transaction Log yedeğimizi Mirror Sunucumuza restore edeceğiz.
Aldığımız Transaction Loglarımıza ait backup’ ımızı restore etmek için Mirror Sunucumuzda Restore ettiğimiz database’ imiz üzerinde Sağ click > Tasks > Restore > Transaction Log… diyoruz.
Restore Transaction Log penceresinde From file or tape seçeneğini işaretliyoruz ve “…” butonuna gelerek transaction log backup’ ımızı ekliyoruz.
Select the transaction log backups to restore kısmında backup’ ımızın geldiğini görüyoruz. Burada Restore kutucuğunun işaretli olması gerekmektedir.
Options kısmına geliyoruz. Burada Transaction Log yedeğimizide NORECOVERY modda restore etmeliyiz NORECOVERY modunu işaretledikden sonra OK diyoruz ve restore işlemimizi başlatıyoruz.
Transaction Log yedeğimizide başarılı bir şekilde restore ettik. Bu pencerede OK diyerek restore penceremizi kapatıyoruz. Object Explorer penceresinde gördüğünüz gibi Mirror Sunucumuz üzerinde Restore ettiğimiz DB’ miz Restoring konuma geldi.
Aldığımız yedeklerimizi Mirror sunucumuza sorunsuz bir şekilde restore ettik. Artık Mirroring konfigürasyonlarımızı yapmaya geldi sıra…
Mirroring konfigürasyonumuzu Principal Server’ ımız üzerinde gerçekleştiriyoruz. Database Mirroring yapacağımız AccountDB üzerinde sağ click > Tasks > Mirror diyoruz.
Database Mirroring yapıladırmamızı yapabilmek için açılan Mirroring penceresinde “Configure Security” butonuna geliyoruz.
Karşımıza gelene Configure Database Mirroring Security Wizard penceresinde mirroring yapacağımız veritabanımız için adımları belirtten bu pencerede Next diyerek devam ediyoruz.
Include Witness Server penceresinde failover kontrolünü otomatik yapabilmek için kullanılıp kullanılmayacağını seçtiğimiz kısımdır. İlk başta Witness Sunucunun opsiyonel olduğunu belirtmiştim. Ben yapımda Witness Sunucu kullanmayacağım dan “No” seçeneğini seçiyorum ve Next diyerek devam ediyorum.
Principal Server Instance penceresinde principal sunucumu, listerner portunu belirliyoruz.
Mirror Server Instance penceresinde mirror sunucumuzu belirtiyoruz. Bunun için Mirror server instance kısmında mirror sunucumuzu ve instance’ ını belirtiyoruz ve Connect diyoruz. Listener port kısmında dinleyici portumuzu 5022’ yi belirtiyoruz. Bu kısımda mirroring işlemi için kullanılan sunucumuz farklı sunucu veya farklı lokasyondaki bir sunucu ise Principal, Mirror ve Witness sunucularda aynı olmalıdır. Buna görede firewall tarafında bu port’ a gereken yetki izinleri tanımlanmalıdır. Endpoint name kısmında SQL Sunucularımız ağ üzerinde haberleşmelerini sağlıyacak olan nesnemize isim atıyoruz. Mirror Sunucumuzuda belirtdikden sonra Next diyerek devam ediyoruz.
Service Accounts penceresinde mirroring işlemini yapabilmemiz için gereken servis kullanıcı bilgilerini girmemiz gerekiyor. Bu kısımda Domain Admin kullanıcımı belirtiyorum. Sizlere mirroring için yetkili kullanıcılar oluşturarak tanımlayabilirsiniz. Servis kullanıcılarımıda belirledikden sonra Next diyerek devam ediyorum.
Mirroring konfigürasyonumuzda şuanda kadar yaptığımız adımlara dair bilgileri gördüğümüz Complete the Wizard penceresinde Finish diyerek konfigürasyonumuzu tamamlıyoruz.
Configuring Endpoints penceresinde mirroring işlemimizin başarılı bir şekilde tamamlandığını gördük. Bu pencereyi Close diyerek kapatıyoruz.
Karşımıza gelen uyarı penceresinde Principal ve Mirror Sunucumuzun mirroring bilgilerini görebiliyoruz. Neyse artık Start Mirroring diyerek Database Mirroring işlemimizi başlatıyoruz.
Artık Database Mirroring işlemimizi aktif hale getirdik. İlk Senkronizasyonun yapılması için Status kısmından Refresh diyereke başlatabilirsiniz. Böylelikle Principal Sunucumuzdaki Database’ imizin yanındaSynchronized Mirror Sunucumuzdaki Database’ imizin yanında Synchronized/Restoring yazacaktır.
Bir sorun anında Principal ve Mirror Sunucumuz üzerindeki rolleri değiştirmek için Mirroring penceremizden Failover butonuna geliyoruz. Karşımıza çıkan pencerede yaptığımız işlemin sonrasında Principal ve Mirror Sunucular arasındaki rollerin değişeceğini belirtiyor. Bu pencerede Yes diyoruz Principal ve Mirror sunuclarımızın arasında rolleri değiştiriyoruz.
Görüldüğü gibi MAINDB Sunucum üzerindeki database’ imi Principal ken Mirror, SQL2 Sunucum üzerindeki database’ im Mirror ken Principal konuma geldi. Role transferlerimizi sorunsuz olarakda gerçekleştirmiş olduk.
Rollerimi değiştirdikden sonra veritabanımın içerine geliyorum ve AccountTable’ ımın içeriğini kontrol ediyorum herhangi bir veri kaybı bulunmadığını teyit ediyorum.
Oluşturulan Database Mirroring’ i kaldırmak istersenizde Mirroring sekmesinden Remove Mirroring butonuna geliyoruz ve mirroring’ i kaldırmak istediğimizden eminmiyiz diye soran pencerede Yes diyerek oluşturulmuş olan database mirroring’ i iptal edebiliriz.
Bu makalemde sizlere SQL Server 2014 üzerinde Database Mirroring konfigürasyonu nu nasıl yapabileceğinizi göstermiş oldum. Bünyenizde bulunan SQL databaseleri mirroring işlemi ile yedekli hale getirmenizde büyük fayda vardır. Yaşanılacak bir felaket anında bu gibi yapılar büyük önem taşımaktadırlar.
Umarım sizlere faydalı olacaktır…