Peer to Peer Transactional Replication Kurulumu

Transactional Replication’ın teknolojisini kullanır. Fark olarak her subscriber aynı zamanda publisher’dır. “Transactional Replication Kurulumu” isimli makalemi okuyabilirsiniz. Bir örnek ile kurulumunu yaparak mantığını anlamaya çalışalım.

Transactional Replication kurulumu ile çok benzer bir kurulum yapacağız. Kurulumdaki en önemli farklardan biri her subscriber’da distributor olması gerektiğidir. “Transactional Replication Kurulumu” isimli makalemde 1.sunucuda Distributor’u yapılandırmıştık. Örneği aynı instance üzerinde yapacağım için 1.sunucuda aynı işlemi tekrar yapmama gerek yok. 2. sunucuda distributor’u aşağıdaki şekilde yapılandıralım. Eğer 1.sunucuda distributor’u yapılandırmadıysanız aşağıda anlatacağımız şekilde her iki sunucuda da bu işlemi gerçekleştirebilirsiniz.

İlk olarak AdventureWorks2014 veritabanında aşağıdaki script yardımıyla replike edeceğimiz tabloyu oluşturalım.

USE [AdventureWorks2014]
GO
CREATE TABLE [dbo].[PeerToPeer](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Ad] [varchar](200) NULL,
 CONSTRAINT [PK_PeerToPeer] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

Aşağıdaki gibi Configure Distribution diyoruz.

 

Gelen ekranda Do not show this page again’i tıklayarak next diyoruz.

 

Bir sonraki ekranda aşağıdaki gibi seçim yaparak Distributor’ü kurulum yaptığımız sunucuda oluşturuyoruz. Arka planda distribution veritabanıda oluşacak. Next diyerek ilerliyoruz.

 

 

Bir sonraki ekranda snapshot dosyalarının tutulacağı bir paylaşım istiyor. “Paylaşım Tanımlamak ve Tanımladığımız Paylaşımı SQL Server’ın olduğu sunucuya Map Etmek” isimli makalemde nasıl paylaşım oluşturacağımızı anlattım. Paylaşıma iki instance’ın kullandığı sql server agent servis hesabını ve kurulum yaptığınız kullanıcıyı eklemeniz gerekir. SQL Server Agent servis hesapları windows account olmalıdır. Lokal bir kullanıcı olursa paylaşımı göremez.

 

Ben aşağıdaki gibi Sunucu1 üzerinde Replication isimli bir klasör oluşturup gerekli yetkileri verdim ve Snapshot folder olarak paylaşım adresini yazdım. Next diyerek ilerliyoruz.

 

 

Bir sonraki ekranda aşağıdaki gibi distribution veritabanının data ve log dosyalarının hangi path’lerde tutulacağı bilgilerini girip next diyerek ilerliyoruz.

 

 

Bir sonraki ekranda bu distribution veritabanının hangi Publisher’ın kullanacağını belirliyoruz. Biz Publisher ve distributor’ın aynı instance üzerinde kuracağımız için aynı instance’ı seçili bırakıp next diyerek ilerliyoruz.

 

 

Bir sonraki ekranda aşağıdaki gibi Configure Distribution seçili iken next ve Finish diyerek distributor yapılandırmasını tamamlıyoruz.

 

 

Kurulum tamamlandıktan sonra aşağıdaki gibi sistem veritabanlarının içinde distribution veritabanını görmeniz gerekir.

 

 

Distributor yapılandırmamız bittikten sonra 1.instace’a geçerek aşağıdaki gibi Local Publications’a sağ tıklayarak New Publication diyoruz.

 

 

Gelen ekranda aşağıdaki gibi replike edeceğimiz veritabanını seçiyoruz.

 

 

Gelen ekranda aşağıdaki gibi Peer-to-Peer Publication’ı seçerek Next diyoruz.

 

 

Bir sonraki ekranda Replike edeceğim article’ların arasından başlangıçta oluşturduğum tabloyu seçerek next diyorum.

 

 

Bir sonraki ekranda aşağıdaki gibi Create the publication seçili iken next  diyerek ilerliyoruz.

Bir sonraki ekranda aşağıdaki gibi Log Reader Agent’ın hangi servis hesabı ile çalışacağını set edeceğiz.

Security Settings’e tıklayoruz.

 

Benim kendi test ortamımda iki sql server servis’i,iki sql agent servisi de aynı windows hesabını kullanıyor ve gerekli yetkileri var. Snapshot paylaşımı üzerinde de bu kullanıcıyı daha önce yetkilendirdim. Bu yüzden aşağıdaki gibi set ederek ilerliyorum.

 

 

Log Reader Agent için set edeceğiniz kullanıcının minimum hakları:(Benim test kurulumumda sql server servis hesabı ve sql server agent servis hesabı için kullandığım kullanıcıya aşağıdaki hakları verdim.)

 

  • Distribution veritabanında db_owner olmalı.
  • Publication yapılacak veritabanında db_owner olmalı.

 

Microsoft bu hesap için Windows Account set etmemizi öneriyor.

 

 

Gelen ekranda Publication’a PeerToPeerPublication ismini veriyoruz ve finish diyerek publication kurulumunu tamamlıyoruz.

 

Transactional Replication’dan farklı olarak Snapshot Agent’ı yapılandırmadık ve filtreleme yapmadık. Filtreleme Peer To Peer Transactional Replication’da desteklenmiyor. 1.sunucudan 2.sunucuya olan aktarımıda backup restore yöntemi ile yapıyoruz. Restore sonrasında replike etmeyeceğiniz tabloları 2.sunucudan silmelisiniz.

 

Publication kurulumu yaptık. Daha sonra restore işlemini gerçekleştirdik.

 

Bazen subscriber’daki veritabanını silip replication’ı yeniden yapılandırmak isteyebilirsiniz. Böyle bir durumda aşağıdaki gibi hata alırsınız.

 

Cannot drop the database X because it is being used for replication.

 

1.sunucudan yeni backup alıp overwrite ederek restore ederseniz sorun çözülecektir.

 

Şimdi aşağıdaki gibi oluşan publication’a sağ tıklayarak Configure Peer-To-Peer Topology… seçeneğini seçiyoruz.

 

 

Açılan ekranda aşağıdaki gibi 1.instance’ı seçiyoruz.

 

 

Gelen ekranda aşağıdaki gibi Add Node diyoruz.

 

 

Açılan ekranda aşağıdaki seçimleri yapıyoruz. Biz Push Subcriptions’ı seçtik. Pull ve Push Subscriptions ile ilgili detayı “Transactional Replication Kurulumu” isimli makalemizde bulabilirsiniz. Next diyerek ilerliyoruz.

 

 

Bir sonraki ekranda 2.instance’daki Log Reader Agent’ın kullanıcı hesaplarını soruyor. 2.instance normalde subscriber ama Peer-To-Peer Replication’da her subscriber aynı zamanda publisher olduğu için bu bilgileri doldurmamızı istiyor. Buraya gireceğimiz kullanıcı hesabı için makalenin başında anlattığımız Log Reader Agent için set edeceğiniz kullanıcının minimum haklarını vermelisiniz.  Aşağıdaki ekranda sağ taraftaki …. Ya tıklayarak ilgili kullanıcı seçimimizi yapıyoruz.

Biz iki instance üzerinde de aynı windows account’u kullanıyoruz ve bu account’a belirttiğimiz yetkileri daha önce verdik. Bu yüzden aşağıdaki gibi  bir seçim yapıyoruz.

Ok’e tıkladıktan sonra aşağıdaki gibi bir ekran gelecektir. Use the first peer’s security settings for all others peers’i seçerek bütün replike olacak node’lar için aynı güvenlik ayarını kullanabilirsiniz.

 

 

Bir sonraki ekranda her iki instance üzerindeki subscription’lar için gerekli güvenlik ayarlarını yapmamız gerekiyor. Yukarda anlattığım şekilde sağ taraftaki …. Üzerine tıklayarak Run under the SQL Server agent service account..’u seçerek devam ediyoruz.

 

 

Gerekli seçimleri yaptıktan sonra aşağıdaki gibi bir ekran gelmeli.

 

 

Bir sonraki ekranda I restored a backup of the original publication database… ile başlayan kısmı seçiyoum ve 1.instance’dan 2.instance’a veritabanını backup restore yöntemiyle aktarırken aldığım backup’ın path’ini gösteriyorum.

 

 

Kurulumumuz bu şekilde tamamlanmış oluyor. 1.Sunucudaki tabloya bir kayıt eklediğinizde 2. sunucuda görebileceksiniz. 2.sunucuda bu kaydı update ettiğinizde ise değişikliklerin 1.sunucudaki tabloya yansıdığını fark edeceksiniz. Aynı anda 1.sunucu ve 2.sunucu aynı satırı update etmeye çalışırsa conflict olacaktır. Oluşan conflictleri aşağıdaki şekilde görebilirsiniz.

 

 

Conflict oluşmaması için two-phase commit kullanabilirsiniz ama performans olarak oldukça yavaş çalışacaktır.

Conflictleri çözmek için birkaç yol vardır. Conflict oluştuğunda distribution agent duracaktır.

Backup kullanarak conflict olan node’a veri yeniden yüklenir. Verinin tutarlı bir yapıya geçmesini sağlar.

Ya da Distrubition Agent’ın yeniden enable edilerek değişiklikleri uygulaması  sağlanmaya çalışılabilir.

Conflictlerin tespit edilmesi ve düzeltilmesi ile ilgili merge replication daha başarılıdır. “Merge Replication Kurulumu” isimli makalemi okumak isteyebilirsiniz.

 

Loading

Leave Your Comment