Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: SQL Server 2017 (14.x) ve sonraki sürümleri
Bu makalede, bir Windows sunucusunda bir çoğaltma ve Linux sunucusunda diğer çoğaltma ile Always On kullanılabilirlik grubu (AG) oluşturma adımları açıklanmaktadır.
Önemli
Tam yüksek kullanılabilirlik ve olağanüstü durum kurtarma desteğine sahip heterojen çoğaltmalar içeren SQL Server platformlar arası kullanılabilirlik grupları DH2i DxEnterprise ile kullanılabilir. Daha fazla bilgi için bkz. SQL Server Karma İşletim Sistemleriyle Kullanılabilirlik Grupları.
DH2i ile platformlar arası kullanılabilirlik grupları hakkında bilgi edinmek için aşağıdaki videoyu izleyin.
Replikalar farklı işletim sistemlerinde olduğundan bu yapılandırma platformlar arasında çalışır. Bir platformdan diğerine geçiş veya olağanüstü durum kurtarma (DR) için bu yapılandırmayı kullanın. Bu yapılandırma yüksek kullanılabilirliği desteklemez.
Devam etmeden önce, Windows ve Linux'ta SQL Server örnekleri için yükleme ve yapılandırma hakkında bilgi sahibi olmanız gerekir.
Senaryo
Bu senaryoda, iki sunucu farklı işletim sistemlerindedir. birincil çoğaltmayı WinSQLInstance adlı bir Windows Server 2022 barındırıyor.
LinuxSQLInstance adlı bir Linux sunucusu ikincil çoğaltmayı barındırıyor.
AG'yi yapılandırın
AG oluşturma adımları, okuma ölçeğindeki iş yükleri için AG oluşturma adımlarıyla aynıdır. Küme yöneticisi olmadığından AG küme türü NONE'dir.
Bu makaledeki betikler için köşeli ayraçlar < ve > ortamınız için değiştirmeniz gereken değerleri tanımlar. Açılı parantezler aslında betikler için gerekli değildir.
Windows Server 2022'ye SQL Server 2022 (16.x) yükleyin, SQL Server Configuration Manager'dan AlwaysOn Kullanılabilirlik Grupları etkinleştirin ve karma mod kimlik doğrulamasını ayarlayın.
Bahşiş
Bu çözümü Azure'da doğrularsanız, veri merkezinde ayrı olduklarından emin olmak için her iki sunucuyu da aynı kullanılabilirlik kümesine yerleştirin.
Kullanılabilirlik Gruplarını Etkinleştirme
Yönergeler için bkz. Always On kullanılabilirlik grubu özelliğini etkinleştirme veya devre dışı bırakma.
SQL Server Configuration Manager, bilgisayarın yük devretme kümesindeki bir düğüm olmadığını not alır.
Kullanılabilirlik Gruplarını etkinleştirdikten sonra SQL Server'ı yeniden başlatın.
Karışık mod kimlik doğrulamayı ayarla
Yönergeler için bkz. Sunucu kimlik doğrulama modunu değiştirme.
Linux'a SQL Server 2022 (16.x) yükleyin. Yönergeler için bkz. Linux üzerinde SQL Server için yükleme kılavuzu.
hadrile etkinleştirin.Komut satırında
hadraracılığıyla 'ı etkinleştirin, aşağıdaki komutu çalıştırın:sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1hadretkinleştirdikten sonra SQL Server örneğini yeniden başlatın:sudo systemctl restart mssql-server.serviceher iki sunucuda da
hostsdosyasını yapılandırın veya sunucu adlarını DNS'ye kaydedin.Hem Windows hem de Linux üzerinde TCP 1433 ve 5022 için güvenlik duvarı bağlantı noktalarını açın.
Birincil çoğaltmada bir veritabanı oturum açma bilgisi ve parola oluşturun.
CREATE LOGIN dbm_login WITH PASSWORD = '<password>'; CREATE USER dbm_user FOR LOGIN dbm_login; GODikkat
Parolanız, SQL Server varsayılanparola ilkesine uygun olmalıdır. Varsayılan olarak, parola en az sekiz karakter uzunluğunda olmalı ve şu dört kümeden üçünün karakterlerini içermelidir: büyük harfler, küçük harfler, 10 tabanındaki basamaklar ve simgeler. Parolalar en çok 128 karakter uzunluğunda olabilir. Mümkün olduğunca uzun ve karmaşık parolalar kullanın.
Birincil çoğaltmada bir ana anahtar ve sertifika oluşturun, ardından sertifikayı özel anahtarla yedekleyin.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<master-key-password>'; CREATE CERTIFICATE dbm_certificate WITH SUBJECT = 'dbm'; BACKUP CERTIFICATE dbm_certificate TO FILE = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\dbm_certificate.cer' WITH PRIVATE KEY ( FILE = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\dbm_certificate.pvk', ENCRYPTION BY PASSWORD = '<private-key-password>' ); GODikkat
Parolanız, SQL Server varsayılanparola ilkesine uygun olmalıdır. Varsayılan olarak, parola en az sekiz karakter uzunluğunda olmalı ve şu dört kümeden üçünün karakterlerini içermelidir: büyük harfler, küçük harfler, 10 tabanındaki basamaklar ve simgeler. Parolalar en çok 128 karakter uzunluğunda olabilir. Mümkün olduğunca uzun ve karmaşık parolalar kullanın.
Sertifikayı ve özel anahtarı
/var/opt/mssql/data'daki Linux sunucusuna (ikincil çoğaltma) kopyalayın. Dosyaları Linux sunucusuna kopyalamak içinpscpkullanabilirsiniz.Özel anahtarın ve sertifikanın grubunu ve sahipliğini
mssql:mssqlolarak ayarlayın.Aşağıdaki betik, dosyaların grubunu ve sahipliğini ayarlar.
sudo chown mssql:mssql /var/opt/mssql/data/dbm_certificate.pvk sudo chown mssql:mssql /var/opt/mssql/data/dbm_certificate.cerAşağıdaki diyagramda, sertifika ve anahtar için sahiplik ve grup doğru şekilde ayarlanmıştır.
İkincil çoğaltmada bir veritabanı oturum açma ve parolası oluşturun ve bir ana anahtar oluşturun.
CREATE LOGIN dbm_login WITH PASSWORD = '<password>'; CREATE USER dbm_user FOR LOGIN dbm_login; GO CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<master-key-password>'; GODikkat
Parolanız, SQL Server varsayılanparola ilkesine uygun olmalıdır. Varsayılan olarak, parola en az sekiz karakter uzunluğunda olmalı ve şu dört kümeden üçünün karakterlerini içermelidir: büyük harfler, küçük harfler, 10 tabanındaki basamaklar ve simgeler. Parolalar en çok 128 karakter uzunluğunda olabilir. Mümkün olduğunca uzun ve karmaşık parolalar kullanın.
İkincil replika üzerinde, kopyaladığınız sertifikayı
/var/opt/mssql/datageri yükleyin.CREATE CERTIFICATE dbm_certificate AUTHORIZATION dbm_user FROM FILE = '/var/opt/mssql/data/dbm_certificate.cer' WITH PRIVATE KEY ( FILE = '/var/opt/mssql/data/dbm_certificate.pvk', DECRYPTION BY PASSWORD = '<private-key-password>' ); GOÖnceki örnekte, birincil çoğaltmada sertifikayı oluştururken kullandığınız aynı parolayı
<private-key-password>ile değiştirin.Birincil replikada bir uç nokta oluşturun.
CREATE ENDPOINT [Hadr_endpoint] AS TCP ( LISTENER_IP = (0.0.0.0), LISTENER_PORT = 5022 ) FOR DATABASE_MIRRORING ( ROLE = ALL, AUTHENTICATION = CERTIFICATE dbm_certificate, ENCRYPTION = REQUIRED ALGORITHM AES ); ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED; GRANT CONNECT ON ENDPOINT::[Hadr_endpoint] TO [dbm_login]; GOÖnemli
Dinleyici TCP bağlantı noktası için güvenlik duvarı açık olmalıdır. Önceki betikte bağlantı noktası 5022'dir. Kullanılabilir herhangi bir TCP bağlantı noktasını kullanın.
İkincil çoğaltmada uç noktayı oluşturun. Uç noktayı oluşturmak için ikincil kopyada önceki betiği yineleyin.
Birincil çoğaltmada ag'yi
CLUSTER_TYPE = NONEile oluşturun. Örnek betik, AG'yi oluşturmak içinSEEDING_MODE = AUTOMATICkullanır.Not
SQL Server'ın Windows örneği veri ve günlük dosyaları için farklı yollar kullandığında, bu yollar ikincil çoğaltmada mevcut olmadığından SQL Server'ın Linux örneğinde otomatik dağıtım başarısız olur. Platformlar arası AG için aşağıdaki betiği kullanmak için veritabanı, Windows sunucusundaki veri ve günlük dosyaları için aynı yolu gerektirir. Alternatif olarak, betiği güncelleyerek
SEEDING_MODE = MANUALayarlayabilir ve ardından veritabanınıNORECOVERYkullanarak yedekleyip geri yükleyerek veritabanını doldurabilirsiniz.Bu davranış Azure Market görüntüleri için geçerlidir.
Otomatik tohumlama hakkında daha fazla bilgi için bkz. Otomatik Tohumlama - Disk Düzeni.
Betiği çalıştırmadan önce, AG'lerinizin değerlerini güncelleştirin.
<WinSQLInstance>değerini birincil replika SQL Server örneğinin sunucu adıyla değiştirin.<LinuxSQLInstance>ifadesini ikincil kopya SQL Server örneğinin sunucu adıyla değiştirin.
AG'yi oluşturmak için değerleri güncelleyin ve betiği birincil replikada çalıştırın.
CREATE AVAILABILITY GROUP [ag1] WITH (CLUSTER_TYPE = NONE) FOR REPLICA ON N'<WinSQLInstance>' WITH ( ENDPOINT_URL = N'tcp://<WinSQLInstance>:5022', AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT, SEEDING_MODE = AUTOMATIC, FAILOVER_MODE = MANUAL, SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL) ), N'<LinuxSQLInstance>' WITH ( ENDPOINT_URL = N'tcp://<LinuxSQLInstance>:5022', AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT, SEEDING_MODE = AUTOMATIC, FAILOVER_MODE = MANUAL, SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL); ) GOYedek kopyada AG'ye katıl.
ALTER AVAILABILITY GROUP [ag1] JOIN WITH (CLUSTER_TYPE = NONE); ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE; GOAG için bir veritabanı oluşturun. Örnek adımlarda
TestDBadlı bir veritabanı kullanılır. Otomatik tohumlama kullanıyorsanız hem veriler hem de günlük dosyaları için aynı yolu ayarlayın.Betiği çalıştırmadan önce veritabanınızın değerlerini güncelleştirin.
TestDByerine veritabanınızın adını yazın.<F:\Path>yerine veritabanınızın ve günlük dosyalarınızın yolunu girin. Veritabanı ve günlük dosyaları için aynı yolu kullanın.
Varsayılan yolları da kullanabilirsiniz.
Veritabanınızı oluşturmak için betiği çalıştırın.
CREATE DATABASE [TestDB] CONTAINMENT = NONE ON PRIMARY(NAME = N'TestDB', FILENAME = N'<F:\Path>\TestDB.mdf') LOG ON (NAME = N'TestDB_log', FILENAME = N'<F:\Path>\TestDB_log.ldf'); GOVeritabanının tam yedeğini alın.
Otomatik tohumlama kullanmıyorsanız veritabanını ikincil çoğaltma (Linux) sunucusuna geri yükleyin. yedekleme ve geri yüklemekullanarak SQL Server veritabanını Windows'tan Linux'a geçirme. İkincil replikada veritabanı
WITH NORECOVERY'ı geri yükle.Veritabanını AG'ye ekleyin. Örnek betiği güncelleştirin.
TestDByerine veritabanınızın adını yazın. Veritabanını AG'ye eklemek için birincil çoğaltmada T-SQL sorgusunu çalıştırın.ALTER AG [ag1] ADD DATABASE TestDB; GOVeritabanının ikincil yedekte doldurulmakta olduğunu doğrulayın.
Birincil replikada yük devretmesi
Her kullanılabilirlik grubunun yalnızca bir birincil çoğaltması vardır. Birincil kopya okuma ve yazma işlemlerine izin verir. Ana replikayı değiştirmek için hata devretme yapabilirsiniz. Tipik bir kullanılabilirlik grubunda, küme yöneticisi yük devretme işlemini otomatikleştirir. Küme türü NONE olan bir kullanılabilirlik grubunda yük devretme işlemi el ile gerçekleştirilir.
Küme türü NONE olan bir kullanılabilirlik grubunda birincil çoğaltmayı yedeklemenin iki yolu vardır:
- El ile yük devretme, veri kaybı olmadan
- Veri kaybıyla elle zorla yük devretme
El ile yük devretme, veri kaybı olmadan
Birincil çoğaltma kullanılabilir olduğunda bu yöntemi kullanın, ancak birincil çoğaltmayı barındıran örneği geçici veya kalıcı olarak değiştirmeniz gerekir. Olası veri kaybını önlemek için, manuel yük devretmeyi gerçekleştirmeden önce hedef yedek kopyanın güncelliğini kontrol edin.
Veri kaybı olmadan manüel olarak yük devretme yapmak için:
Mevcut birincil çoğaltmayı hedef ikincil çoğaltma yapın
SYNCHRONOUS_COMMIT.ALTER AVAILABILITY GROUP [AGRScale] MODIFY REPLICA ON N'<node2>' WITH (AVAILABILITY_MODE = SYNCHRONOUS_COMMIT);Aktif işlemlerin birincil çoğaltmaya ve en az bir senkron ikincil çoğaltmaya taahhüt edildiğini belirlemek için aşağıdaki sorguyu çalıştırın.
SELECT ag.name, drs.database_id, drs.group_id, drs.replica_id, drs.synchronization_state_desc, ag.sequence_number FROM sys.dm_hadr_database_replica_states drs, sys.availability_groups ag WHERE drs.group_id = ag.group_id;İkincil kopya,
synchronization_state_descSYNCHRONIZEDolduğunda senkronize edilir.REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT1 olarak güncelleştirin.Aşağıdaki betik,
REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMITadlı bir kullanılabilirlik grubundaag1'ı 1 olarak ayarlıyor. Aşağıdaki betiği çalıştırmadan önceag1kullanılabilirlik grubunuzun adıyla değiştirin:ALTER AVAILABILITY GROUP [AGRScale] SET (REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = 1);Bu ayar, her etkin işlemin birincil kopyada ve en az bir eşzamanlı ikincil kopyada taahhüt edilmesini sağlar.
Not
Bu ayar yük devretmeye özgü değildir ve ortamın gereksinimlerine göre ayarlanmalıdır.
Rol değişikliğine hazırlanmak için birincil çoğaltmayı ve yük devretmeye katılmayan ikincil çoğaltmaları çevrimdışı olarak ayarlayın:
ALTER AVAILABILITY GROUP [AGRScale] OFFLINEHedef ikincil kopyayı birincil hale getirin.
ALTER AVAILABILITY GROUP AGRScale FORCE_FAILOVER_ALLOW_DATA_LOSS;eski birincil ve diğer ikincillerin rolünü
SECONDARYolarak güncelleştirin, eski birincil çoğaltmayı barındıran SQL Server örneğinde aşağıdaki komutu çalıştırın:ALTER AVAILABILITY GROUP [AGRScale] SET (ROLE = SECONDARY);Not
Kullanılabilirlik grubunu silmek için DROP AVAILABILITY GROUPkullanın. Küme türü NONE veya EXTERNAL ile oluşturulan bir kullanılabilirlik grubu için, kullanılabilirlik grubunun parçası olan tüm çoğaltmalarda bir komut çalıştırılır.
Veri taşımayı sürdürürken, birincil çoğaltmayı barındıran SQL Server örneğindeki kullanılabilirlik grubundaki her veritabanı için aşağıdaki komutu çalıştırın:
ALTER DATABASE [db1] SET HADR RESUMEOkuma ölçeği için oluşturduğunuz ve küme yöneticisi tarafından yönetilmeyen dinleyicileri yeniden oluşturun. Eğer orijinal dinleyici eski birincili işaret ediyorsa, onu bırakın ve yeni birincili işaret etmek için yeniden oluşturun.
Veri kaybıyla elle zorla yük devretme
Birincil kopya kullanılamıyorsa ve hemen kurtarılamıyorsa, veri kaybını kabul ederek ikincil kopyaya geçişi zorlamanız gerekir. Ancak, asıl birincil çoğaltma, failover sonrasında geri yüklenirse, birincil rolü üstlenir. Her çoğaltmanın farklı bir durumda olmasını önlemek için, veri kaybıyla zorunlu yük devretme sonrasında özgün birincili kullanılabilirlik grubundan kaldırın. Orijinal birincil tekrar çevrimiçi olduğunda, kullanılabilirlik grubunu ondan tamamen kaldırın.
Birincil yedek N1'den ikincil yedek N2'ye veri kaybıyla el ile yük devretmek için şu adımları izleyin:
İkincil çoğaltmada (N2) zorlamalı yük devretmeyi başlatın:
ALTER AVAILABILITY GROUP [AGRScale] FORCE_FAILOVER_ALLOW_DATA_LOSS;Yeni birincil replikada (N2), orijinal birincil (N1) kaldırın.
ALTER AVAILABILITY GROUP [AGRScale] REMOVE REPLICA ON N'N1';Tüm uygulama trafiğinin dinleyiciye ve/veya yeni birincil replikaya yönlendirildiğini doğrulayın.
Özgün birincil (N1) çevrimiçi hale gelirse, AGRScale kullanılabilirlik grubunu hemen özgün birincil (N1) üzerinde çevrimdışı konuma getirin.
ALTER AVAILABILITY GROUP [AGRScale] OFFLINEVeriler veya eşitlenmemiş değişiklikler varsa, yedeklemeler veya iş gereksinimlerinize uygun diğer veri çoğaltma seçenekleri aracılığıyla bu verileri koruyun.
Ardından, kullanılabilirlik grubunu özgün birincilden (N1) kaldırın:
DROP AVAILABILITY GROUP [AGRScale];Kullanılabilirlik grubu veritabanını özgün birincil çoğaltma üzerinde (N1) silin.
USE [master] GO DROP DATABASE [AGDBRScale] GO(İsteğe bağlı) İsterseniz, artık AGRScale kullanılabilirlik grubuna N1'i yeni bir ikincil çoğaltma olarak geri ekleyebilirsiniz.
Bu makalede, geçişi veya okuma ölçeğindeki iş yüklerini desteklemek için platformlar arası AG oluşturma adımları gözden geçirildi. Olağanüstü durum kurtarma işlemleri için manuel olarak kullanılabilir. Ayrıca AG'nin yük devretme işleminin nasıl yapılacağı da açıklanmıştır. Platformlar arası AG, küme türü NONE kullanır ve yüksek kullanılabilirliği desteklemez.