Aracılığıyla paylaş


Dağıtılmış AlwaysOn kullanılabilirlik grubunu yapılandırma

Şunlar için geçerlidir: SQL Server

Dağıtılmış kullanılabilirlik grubu oluşturmak için her biri kendi dinleyicisine sahip iki kullanılabilirlik grubu oluşturmanız gerekir. Ardından bu kullanılabilirlik gruplarını dağıtılmış bir kullanılabilirlik grubu halinde birleştirirsiniz. Aşağıdaki adımlar Transact-SQL'de temel bir örnek sağlar. Bu örnek kullanılabilirlik grupları ve dinleyiciler oluşturmanın tüm ayrıntılarını kapsamaz; bunun yerine, temel gereksinimleri vurgulama üzerine odaklanır.

Dağıtılmış kullanılabilirlik gruplarına teknik bir genel bakış için bkz. Dağıtılmış kullanılabilirlik grupları.

Önkoşullar

Dağıtılmış bir kullanılabilirlik grubu yapılandırmak için aşağıdakilere sahip olmanız gerekir:

Not

Azure VM'de SQL Server'ınızdaki kullanılabilirlik grubunuz için dinleyiciyi dağıtılmış ağ adı (DNN) kullanarak yapılandırdıysanız, kullanılabilirlik grubunuzun üzerinde dağıtılmış bir kullanılabilirlik grubu yapılandırmak desteklenmez. Daha fazla bilgi edinmek için bkz. AZURE VM'de SQL Server'ın AG ve DNN dinleyicisi ile birlikte çalışabilirlik özelliğini.

İzinler

Sunucuda bir kullanılabilirlik grubu oluşturmak ve dağıtılmış bir kullanılabilirlik grubuna yük devretmek için sysadmin izni gerektirir.

Veritabanı yansıtma uç noktalarını tüm IP adreslerini dinleyecek şekilde ayarlama

Veritabanı yansıtma uç noktalarının dağıtılmış kullanılabilirlik grubundaki farklı kullanılabilirlik grupları arasında iletişim kuraadığından emin olun. Bir kullanılabilirlik grubu veritabanı yansıtma uç noktasında belirli bir ağa ayarlanırsa, dağıtılmış kullanılabilirlik grubu düzgün çalışmaz. Dağıtılmış kullanılabilirlik grubunda bir çoğaltma barındıran her sunucuda, veritabanı yansıtma uç noktasını tüm IP adreslerini (LISTENER_IP = ALL ) dinleyecek şekilde ayarlayın.

Tüm IP adreslerini dinleyecek bir veritabanı yansıtma uç noktası oluşturun.

Örneğin aşağıdaki betik, TCP bağlantı noktası 5022'de tüm IP adreslerini dinleyen yeni bir veritabanı yansıtma uç noktası oluşturur.

CREATE ENDPOINT [aodns-hadr]
    STATE = STARTED
    AS TCP
(
            LISTENER_PORT = 5022,
            LISTENER_IP = ALL
)
    FOR DATABASE_MIRRORING
(
            ROLE = ALL,
            AUTHENTICATION = WINDOWS NEGOTIATE,
            ENCRYPTION = REQUIRED ALGORITHM AES
);
GO

Var olan veritabanı yansıtma uç noktasını tüm IP adreslerini dinleyecek şekilde değiştirme

Örneğin, aşağıdaki betik, mevcut bir veritabanı yansıtma uç noktasını, tüm IP adreslerini dinleyecek şekilde değiştirmektedir.

ALTER ENDPOINT [aodns-hadr]
    AS TCP
(
            LISTENER_IP = ALL
);
GO

İlk kullanılabilirlik grubu oluşturma

İlk kümede birincil kullanılabilirlik grubunu oluşturma

İlk Windows Server Yük Devretme Kümesinde (WSFC) bir kullanılabilirlik grubu oluşturun. Bu örnekte, kullanılabilirlik grubu ag1veritabanı için db1 olarak adlandırılmıştır. Birincil kullanılabilirlik grubunun birincil çoğaltması, bir dağıtılmış kullanılabilirlik grubunda genel birincil olarak bilinir. Sunucu1, bu örnekteki genel birincildir.

CREATE AVAILABILITY GROUP [ag1]
FOR DATABASE db1
REPLICA ON N'server1' WITH (ENDPOINT_URL = N'TCP://server1.contoso.com:5022',
    FAILOVER_MODE = AUTOMATIC,
    AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
    BACKUP_PRIORITY = 50,
    SECONDARY_ROLE(ALLOW_CONNECTIONS = NO),
    SEEDING_MODE = AUTOMATIC),
N'server2' WITH (ENDPOINT_URL = N'TCP://server2.contoso.com:5022',
    FAILOVER_MODE = AUTOMATIC,
    AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
    BACKUP_PRIORITY = 50,
    SECONDARY_ROLE(ALLOW_CONNECTIONS = NO),
    SEEDING_MODE = AUTOMATIC);
GO

Not

Yukarıdaki örnekte, SEEDING_MODE hem çoğaltmalar hem de dağıtılmış kullanılabilirlik grubu için otomatik olarak ayarlanır. Bu yapılandırma, birincil veritabanının el ile yedeklenip geri yüklenmesi gerekmeden ikincil çoğaltmaları ve ikincil kullanılabilirlik grubunu otomatik olarak doldurulacak şekilde ayarlar.

İkincil çoğaltmaları birincil kullanılabilirlik grubuna ekleme

İkincil çoğaltmalar, ALTER AVAILABILITY GROUP komutu ve JOIN seçeneği ile kullanılabilirlik grubuna dahil edilmelidir. Bu örnekte otomatik tohumlama kullanıldığından, ALTER AVAILABILITY GROUP ifadesini, GRANT CREATE ANY DATABASE seçeneğiyle çağırmalısınız. Bu ayar, kullanılabilirlik grubunun veritabanını oluşturmasını ve birincil çoğaltmadan otomatik olarak dağıtmaya başlamasını sağlar.

Bu örnekte, aşağıdaki komutlar server2 kullanılabilirlik grubuna katılmak için ag1ikincil çoğaltmada çalıştırılır. Daha sonra kullanılabilirlik grubunun ikincil grupta veritabanı oluşturmasına izin verilir.

ALTER AVAILABILITY GROUP [ag1] JOIN
ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE
GO

Not

Kullanılabilirlik grubu ikincil çoğaltmada bir veritabanı oluşturduğunda, veritabanı sahibini ALTER AVAILABILITY GROUP deyimini çalıştıran hesap olarak ayarlar ve herhangi bir veritabanı oluşturma izni verir. Tam bilgi için bkz. kullanılabilirlik grubuna ikincil çoğaltmada veritabanı oluşturma izni verme.

Birincil kullanılabilirlik grubu için dinleyici oluşturma

Ardından ilk WSFC'de birincil kullanılabilirlik grubu için bir dinleyici ekleyin. Bu örnekte, dinleyici ag1-listenerolarak adlandırılmıştır. Dinleyici oluşturma hakkında ayrıntılı yönergeler için bkz. Kullanılabilirlik Grubu Dinleyicisi Oluşturma veya Yapılandırma (SQL Server).

ALTER AVAILABILITY GROUP [ag1]
    ADD LISTENER 'ag1-listener' (
        WITH IP ( ('2001:db88:f0:f00f::cf3c'),('2001:4898:e0:f213::4ce2') ) ,
        PORT = 60173);
GO

İkinci kullanılabilirlik grubu oluşturma

ardından ikinci WSFC'de ag2ikinci bir kullanılabilirlik grubu oluşturun. Bu durumda veritabanı, birincil kullanılabilirlik grubundan otomatik olarak dağıtıldığı için belirtilmez. Dağıtılmış bir kullanılabilirlik grubunda, ikincil kullanılabilirlik grubunun birincil kopyası ileticisi olarak bilinir. Bu örnekte, iletici sunucu3'dür.

CREATE AVAILABILITY GROUP [ag2]
FOR
REPLICA ON N'server3' WITH (ENDPOINT_URL = N'TCP://server3.contoso.com:5022',
    FAILOVER_MODE = MANUAL,
    AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
    BACKUP_PRIORITY = 50,
    SECONDARY_ROLE(ALLOW_CONNECTIONS = NO),
    SEEDING_MODE = AUTOMATIC),
N'server4' WITH (ENDPOINT_URL = N'TCP://server4.contoso.com:5022',
    FAILOVER_MODE = MANUAL,
    AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
    BACKUP_PRIORITY = 50,
    SECONDARY_ROLE(ALLOW_CONNECTIONS = NO),
    SEEDING_MODE = AUTOMATIC);
GO

Not

  • İkincil kullanılabilirlik grubu aynı veritabanı yansıtma uç noktasını kullanmalıdır (bu örnekte 5022 numaralı bağlantı noktasında). Aksi takdirde, yerel yük devretmeden sonra replikasyon durur.
  • Altta yatan kullanılabilirlik grupları aynı kullanılabilirlik modunda olmalıdır, yani her iki kullanılabilirlik grubu da ya senkron taahhüt modunda ya da asenkron taahhüt modunda olmalıdır. Hangisini kullanacağınızdan emin değilseniz, yük devretmeye hazır olana kadar her ikisini de zaman uyumsuz işleme moduna ayarlayın.

İkincil çoğaltmaları ikincil kullanılabilirlik grubuna ekleme

Bu örnekte, aşağıdaki komutlar server4 kullanılabilirlik grubuna katılmak için ag2ikincil çoğaltmada çalıştırılır. Daha sonra kullanılabilirlik grubunun otomatik tohum oluşturmayı desteklemek için ikincilde veritabanları oluşturmasına izin verilir.

ALTER AVAILABILITY GROUP [ag2] JOIN
ALTER AVAILABILITY GROUP [ag2] GRANT CREATE ANY DATABASE
GO

İkincil kullanılabilirlik grubu için dinleyici oluşturma

Ardından ikinci WSFC'ye ikincil kullanılabilirlik grubu için bir dinleyici ekleyin. Bu örnekte, dinleyici ag2-listenerolarak adlandırılmıştır. Dinleyici oluşturma hakkında ayrıntılı yönergeler için bkz. Kullanılabilirlik Grubu Dinleyicisi Oluşturma veya Yapılandırma (SQL Server).

ALTER AVAILABILITY GROUP [ag2]
    ADD LISTENER 'ag2-listener' ( WITH IP ( ('2001:db88:f0:f00f::cf3c'),('2001:4898:e0:f213::4ce2') ) , PORT = 60173);
GO

İlk kümede dağıtılmış kullanılabilirlik grubu oluşturma

İlk WSFC'de bir dağıtılmış kullanılabilirlik grubu oluşturun (bu örnekte distributedAG adlı). CREATE AVAILABILITY GROUP komutunu DISTRIBUTED seçeneğiyle kullanın. KULLANILABİLİRLİK GRUBU parametresi, ve üye kullanılabilirlik gruplarını belirtir.

Otomatik dağıtım kullanarak dağıtılmış kullanılabilirlik grubunuzu oluşturmak için aşağıdaki Transact-SQL kodunu kullanın:

CREATE AVAILABILITY GROUP [distributedAG]
   WITH (DISTRIBUTED)
   AVAILABILITY GROUP ON
      'ag1' WITH
      (
         LISTENER_URL = 'tcp://ag1-listener.contoso.com:5022',
         AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
         FAILOVER_MODE = MANUAL,
         SEEDING_MODE = AUTOMATIC
      ),
      'ag2' WITH
      (
         LISTENER_URL = 'tcp://ag2-listener.contoso.com:5022',
         AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
         FAILOVER_MODE = MANUAL,
         SEEDING_MODE = AUTOMATIC
      );
GO

Not

LISTENER_URL, her bir kullanılabilirlik grubu için dinleyiciyi ve bu grupların veritabanı yansıtma uç noktasını tanımlar. Bu örnekte bağlantı noktası 5022 (dinleyiciyi oluşturmak için kullanılan bağlantı noktası 60173 değil). Örneğin Azure'da yük dengeleyici kullanıyorsanız dağıtılmış kullanılabilirlik grubu bağlantı noktası için bir yük dengeleme kuralı ekleyin. SQL Server örnek bağlantı noktasına ek olarak dinleyici bağlantı noktası için kuralı ekleyin.

İleticiye otomatik tohumlama işlemini iptal etme

herhangi bir nedenle, iki kullanılabilirlik grubu eşitlenmeden önce iletici başlatma işlemini iptal etmek gerekli hale gelirse, ileticinin SEEDING_MODE parametresini MANUEL olarak ayarlayın ve tohumlama işlemini hemen iptal ederek dağıtılmış kullanılabilirlik grubunu DEĞİŞTİRİN. Global birincil sunucuda komutu çalıştırın.

-- Cancel automatic seeding​.  Connect to global primary but specify DAG AG2
ALTER AVAILABILITY GROUP [distributedAG] ​
   MODIFY ​
   AVAILABILITY GROUP ON ​
   'ag2' WITH ​
   ( ​ SEEDING_MODE = MANUAL ​ ); ​

İkinci kümede dağıtılmış kullanılabilirlik grubuna katılma

Ardından ikinci WSFC'de dağıtılmış kullanılabilirlik grubuna katılın.

Otomatik tohumlama kullanarak dağıtılmış kullanılabilirlik grubunuza katılmak için aşağıdaki Transact-SQL kodunu kullanın:

ALTER AVAILABILITY GROUP [distributedAG]
   JOIN
   AVAILABILITY GROUP ON
      'ag1' WITH
      (
         LISTENER_URL = 'tcp://ag1-listener.contoso.com:5022',
         AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
         FAILOVER_MODE = MANUAL,
         SEEDING_MODE = AUTOMATIC
      ),
      'ag2' WITH
      (
         LISTENER_URL = 'tcp://ag2-listener.contoso.com:5022',
         AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
         FAILOVER_MODE = MANUAL,
         SEEDING_MODE = AUTOMATIC
      );
GO

İkinci kullanılabilirlik grubunun ikincil düğümündeki veritabanına katılın

İkinci kullanılabilirlik grubu otomatik tohumlama kullanacak şekilde ayarlandıysa, 2. adıma geçin.

  1. İkinci kullanılabilirlik grubu el ile tohumlama kullanıyorsa, genel birincilde aldığınız yedeklemeyi ikinci kullanılabilirlik grubunun ikincil bölümüne geri yükleyin:

    RESTORE DATABASE [db1] FROM DISK = '<full backup location>'
        WITH NORECOVERY;
    
    RESTORE LOG [db1] FROM DISK = '<log backup location>'
        WITH NORECOVERY;
    
  2. İkinci kullanılabilirlik grubunun ikincil yedeğindeki veritabanı geri yükleme durumunda olduğunda, veritabanını kullanılabilirlik grubuna manuel olarak birleştirmeniz gerekir.

    ALTER DATABASE [db1]
        SET HADR AVAILABILITY GROUP = [ag2];
    

Dağıtılmış kullanılabilirlik grubuna yük devretme

SQL Server 2022 (16.x) REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT ayarı için dağıtılmış kullanılabilirlik grubu desteği sunulduğundan, dağıtılmış kullanılabilirlik yükünü devretme yönergeleri SQL Server 2022 ve sonraki sürümlerde SQL Server 2019 ve önceki sürümlerden farklıdır.

Dağıtılmış kullanılabilirlik grubu için desteklenen tek yük devretme türü, el ile başlatılan bir FORCE_FAILOVER_ALLOW_DATA_LOSS. Bu nedenle, veri kaybını önlemek için, yük devretmeyi başlatmadan önce verilerin iki çoğaltma arasında eşitlendiğinden emin olmak amacıyla (bu bölümde ayrıntılı olarak açıklanan) ek adımlar atmanız gerekir.

Veri kaybının kabul edilebilir olduğu bir acil durum durumunda, şunu çalıştırarak veri eşitlemesi yapmadan yük devretme başlatabilirsiniz:

ALTER AVAILABILITY GROUP distributedAG FORCE_FAILOVER_ALLOW_DATA_LOSS;

İleticiye yük devretmek ve küresel birincile geri geçiş yapmak için aynı komutu kullanabilirsiniz.

SQL Server 2022 (16.x) ve sonraki sürümlerde, veri kaybı olmamasını garanti etmek üzere tasarlanmış bir dağıtılmış kullanılabilirlik grubu için REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT ayarını yapılandırabilirsiniz. Bu grup yük devredildiğinde veri kaybı yaşanmaz. Bu ayar yapılandırıldıysa, dağıtılmış kullanılabilirlik grubunuzun yükünü devretmek için bu bölümdeki adımları izleyin. REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT ayarını kullanmak istemiyorsanız, SQL Server 2019 ve önceki sürümlerde dağıtılmış bir kullanılabilirlik grubunun yükünü devretme yönergelerini izleyin.

Not

REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT'ın 1 olarak ayarlanması, birincil çoğaltmanın işlemlerin ikincil çoğaltmada tamamlanmasını beklediği ve ardından birincil çoğaltmada tamamlandığı anlamına gelir, bu da performansı olumsuz etkileyebilir. Dağıtılmış kullanılabilirlik grubunun SQL Server 2022'de (16.x) eşitlenmesi için genel birincilde işlemleri sınırlamak veya durdurmak gerekli olmasa da, bunu yapmak hem kullanıcı işlemlerinin hem de REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT 1 olarak ayarlanmış dağıtılmış kullanılabilirlik grubu eşitlemesinin performansını artırabilir.

Veri kaybı olmamasını sağlama adımları

Veri kaybı olmadığından emin olmak için, aşağıdaki adımları izleyerek önce dağıtılmış kullanılabilirlik grubunu veri kaybı olmayacak şekilde yapılandırmanız gerekir:

  1. Yük devretmeye hazırlanmak için genel birincil ve yönlendiricinin SYNCHRONOUS_COMMIT modunda olduğunu doğrulayın. Aksi takdirde, SYNCHRONOUS_COMMITaracılığıyla bunları olarak ayarlayın.
  2. Dağıtılmış kullanılabilirlik grubunu hem genel birincil hem de iletici üzerinde ve zaman uyumlu bağlayıcı olarak ayarlayın.
  3. Dağıtılmış kullanılabilirlik grubu eşitlenene kadar bekleyin.
  4. Küresel birincilde, REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMITkullanarak dağıtılmış kullanılabilirlik grubu ayarını 1 olarak ayarlayın.
  5. Yerel AG'ler ve dağıtılmış kullanılabilirlik grubundaki tüm çoğaltmaların sağlıklı olduğunu ve dağıtılmış kullanılabilirlik grubununEŞİTLENMİŞ olduğunu doğrulayın.
  6. Genel birincil çoğaltmada, dağıtılmış kullanılabilirlik grubu rolünü SECONDARYolarak ayarlayın; bu da dağıtılmış kullanılabilirlik grubunun kullanılamaz olmasını sağlar.
  7. İleticide (hedeflenen yeni birincil sunucu), ALTER AVAILABILITY GROUP ile FORCE_FAILOVER_ALLOW_DATA_LOSSkullanarak dağıtılmış kullanılabilirlik grubunu devretme işlemini gerçekleştirin.
  8. Yeni ikincilde (önceki genel birincil çoğaltma) dağıtılmış kullanılabilirlik grubu REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT 0 olarak ayarlayın.
  9. İsteğe bağlı: Kullanılabilirlik grupları gecikmeye neden olan bir coğrafi uzaklıktaysa, kullanılabilirlik modunu ASYNCHRONOUS_COMMITolarak değiştirin. Bu, gerekirse değişikliği ilk adımdan geri alır.

T-SQL örneği

Bu bölüm, Transact-SQL kullanarak distributedAG adlı dağıtılmış kullanılabilirlik grubunda yük devretmek için ayrıntılı bir örnekteki adımları sağlar. Örnek ortamda dağıtılmış kullanılabilirlik grubu için toplam 4 düğüm vardır. Genel birincil N1 ve N2 konak kullanılabilirlik grubu ag1 iken iletici N3 ve N4 konak kullanılabilirlik grubu ag2. Dağıtılmış kullanılabilirlik grubu distributedAG değişiklikleri ag1'den ag2'a iletir.

  1. Dağıtılmış kullanılabilirlik grubunu oluşturan yerel kullanılabilirlik gruplarının önceliklerinde SYNCHRONOUS_COMMIT doğrulamak için sorgu yapın. Aşağıdaki T-SQL'i doğrudan ileticide ve genel birincilde çalıştırın:

    SELECT DISTINCT ag.name AS [Availability Group],
                    ar.replica_server_name AS [Replica],
                    ar.availability_mode_desc AS [Availability Mode]
    FROM sys.availability_replicas AS ar
         INNER JOIN
         sys.availability_groups AS ag
         ON ar.group_id = ag.group_id
         INNER JOIN
         sys.dm_hadr_database_replica_states AS rs
         ON ar.group_id = rs.group_id
            AND ar.replica_id = rs.replica_id
    WHERE ag.name IN ('ag1', 'ag2')
          AND rs.is_primary_replica = 1
    ORDER BY [Availability Group];
    --if needed, to set a given replica to SYNCHRONOUS for node N1, default instance. If named, change from N1 to something like N1\SQL22
    
    ALTER AVAILABILITY GROUP [testag] MODIFY REPLICA ON N'N1\SQL22' WITH (AVAILABILITY_MODE = SYNCHRONOUS_COMMIT);
    
  2. üzerinde hem genel birincil hem de iletici için aşağıdaki kodu çalıştırarak dağıtılmış kullanılabilirlik grubunu zaman uyumlu işlemeye ayarlayın.

     -- sets the distributed availability group to synchronous commit
     ALTER AVAILABILITY GROUP [distributedAG] MODIFY AVAILABILITY GROUP ON
     'ag1' WITH (AVAILABILITY_MODE = SYNCHRONOUS_COMMIT),
     'ag2' WITH (AVAILABILITY_MODE = SYNCHRONOUS_COMMIT);
    

    Not

    Dağıtılmış kullanılabilirlik grubunda, iki kullanılabilirlik grubu arasındaki eşitleme durumu her iki çoğaltmanın kullanılabilirlik moduna bağlıdır. Zaman uyumlu işleme modu için hem geçerli birincil kullanılabilirlik grubunun hem de geçerli ikincil kullanılabilirlik grubunun SYNCHRONOUS_COMMIT kullanılabilirlik moduna sahip olması gerekir. Bu nedenle, bu betiği hem küresel birincil kopyada hem de ileticide çalıştırmanız gerekir.

  3. Dağıtılmış kullanılabilirlik grubunun durumu SYNCHRONIZEDolarak değişene kadar bekleyin. Genel birincilde aşağıdaki sorguyu çalıştırın:

    -- Run this query on the Global Primary
    
    -- Check the results to see if synchronization_state_desc is SYNCHRONIZED
    SELECT ag.name,
           drs.database_id AS [Availability Group],
           db_name(drs.database_id) AS database_name,
           drs.synchronization_state_desc,
           drs.last_hardened_lsn
    FROM sys.dm_hadr_database_replica_states AS drs
         INNER JOIN
         sys.availability_groups AS ag
         ON drs.group_id = ag.group_id
    WHERE ag.name = 'distributedAG'
    ORDER BY [Availability Group];
    

    kullanılabilirlik grubunun senkronizasyon durum açıklamasıSYNCHRONIZEDolduğunda devam edin.

  4. SQL Server 2022 (16.x) ve üzeri için, genel birincilde aşağıdaki T-SQL'i kullanarak REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT 1 olarak ayarlayın:

    ALTER AVAILABILITY GROUP distributedAG SET (REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = 1);
    
  5. Genel birincil ve iletici'i sorgulayarak kullanılabilirlik gruplarınızın tüm replikalarda sağlıklı durumda olduğunu doğrulayın.

    SELECT ag.name AS [AG Name],
           db_name(drs.database_id) AS database_name,
           ar.replica_server_name AS [replica],
           drs.synchronization_state_desc,
           drs.last_hardened_lsn
    FROM sys.dm_hadr_database_replica_states AS drs
         INNER JOIN
         sys.availability_groups AS ag
         ON drs.group_id = ag.group_id
         INNER JOIN
         sys.availability_replicas AS ar
         ON drs.replica_id = ar.replica_id
            AND drs.replica_id = ar.replica_id
    WHERE ag.name IN ('ag1', 'ag2', 'distributedAG');
    
  6. Genel birincilde, dağıtılmış kullanılabilirlik grubu rolünü SECONDARYolarak ayarlayın. Bu noktada, dağıtılmış kullanılabilirlik grubu şu anda mevcut değil. Bu adım tamamlandıktan sonra, kalan adımlar gerçekleştirilinceye kadar geriye dönemezsiniz.

    ALTER AVAILABILITY GROUP distributedAG SET (ROLE = SECONDARY);
    
  7. Kullanılabilirlik gruplarının geçişini yapmak ve dağıtılmış kullanılabilirlik grubunu yeniden çevrimiçi duruma getirmek için ileticide aşağıdaki sorguyu çalıştırarak genel birincilden yük devretme:

    -- Run the following command on the forwarder, the SQL Server instance that hosts the primary replica of the secondary availability group.
    ALTER AVAILABILITY GROUP distributedAG FORCE_FAILOVER_ALLOW_DATA_LOSS;
    

    Bu adımdan sonra:

    • Küresel birincil geçiş N1'dan N3'e gerçekleşiyor.
    • İletici N3 öğesinden N1 öğesine geçiş yapar.
    • Dağıtılmış kullanılabilirlik grubu kullanılabilir.
  8. Yeni ileticide (önceki genel birincil, N1), dağıtılmış kullanılabilirlik grubu özelliğini 0 olarak ayarlayarak REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT temizleyin:

    ALTER AVAILABILITY GROUP distributedAG SET (REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = 0);
    
  9. İSTEĞE BAĞLI: Kullanılabilirlik grupları gecikmeye sebep olan coğrafi bir mesafedeyse, hem genel birincil hem de iletici üzerinde kullanılabilirlik modunu olarak geri değiştirmeyi göz önünde bulundurun. Bu, gerekirse ilk adımda yapılan değişikliği geri alır.

     -- If applicable: sets the distributed availability group to asynchronous commit:
     ALTER AVAILABILITY GROUP distributedAG MODIFY AVAILABILITY GROUP ON
     'ag1' WITH (AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT),
     'ag2' WITH (AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT);
    

Dağıtılmış kullanılabilirlik grubunu kaldırma

Aşağıdaki Transact-SQL deyimi, distributedAGadlı bir dağıtılmış kullanılabilirlik grubunu kaldırır:

DROP AVAILABILITY GROUP distributedAG;

Yük devretme kümesi örneklerinde dağıtılmış kullanılabilirlik grubu oluşturma

Yük devretme kümesi örneğindeki (FCI) bir kullanılabilirlik grubu aracılığıyla dağıtılmış bir kullanılabilirlik grubu oluşturabilirsiniz. Bu durumda, kullanılabilirlik grubu dinleyicisi gerekmez. FCI örneğinin birincil çoğaltması için sanal ağ adını (VNN) kullanın. Aşağıdaki örnekte SQLFCIDAG adlı bir dağıtılmış kullanılabilirlik grubu gösterilmektedir. Kullanılabilirlik gruplarından biri SQLFCIAG'dir. SQLFCIAG'in iki FCI kopyası vardır. Birincil FCI çoğaltması için VNN SQLFCIAG-1'dir ve ikincil FCI çoğaltması için VNN SQLFCIAG-2'dir. Dağıtılmış kullanılabilirlik grubu olağanüstü durum kurtarma için SQLAG-DR'yi de içerir.

Her Zaman Açık dağıtılmış kullanılabilirlik grubu diyagramı.

Aşağıdaki DDL bu dağıtılmış kullanılabilirlik grubunu oluşturur:

CREATE AVAILABILITY GROUP [SQLFCIDAG]
   WITH (DISTRIBUTED)
   AVAILABILITY GROUP ON
  'SQLFCIAG' WITH
      (
         LISTENER_URL = 'tcp://SQLFCIAG-1.contoso.com:5022',
         AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
         FAILOVER_MODE = MANUAL,
         SEEDING_MODE = AUTOMATIC
      ),
  'SQLAG-DR' WITH
      (
         LISTENER_URL = 'tcp://SQLAG-DR.contoso.com:5022',
         AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
         FAILOVER_MODE = MANUAL,
         SEEDING_MODE = AUTOMATIC
      );

Dinleyici URL'si, birincil FCI örneğinin VNN'sidir.

Dağıtılmış kullanılabilirlik grubunda FCI'ye el ile yük devretme

FCI kullanılabilirlik grubuna elle yük devri yapmak için, dağıtılmış kullanılabilirlik grubunu dinleyici URL'sindeki değişikliği yansıtacak şekilde güncelleyin. Örneğin, aşağıdaki DDL'yi hem dağıtılmış AG'nin genel birincilinde hem de SQLFCIDAG'nin dağıtılmış AG yönlendiricisinde çalıştırın.

ALTER AVAILABILITY GROUP [SQLFCIDAG]
   MODIFY AVAILABILITY GROUP ON
 'SQLFCIAG' WITH
    (
        LISTENER_URL = 'tcp://SQLFCIAG-2.contoso.com:5022'
    )