附註:

在 OCI 上部署 DR 的 Microsoft SQL Server Distributed Always On Availability Groups

簡介

Distributed Always On 可用性群組 (分散式可用性群組) 是 Microsoft SQL Server 中的強大功能,可擴充 SQL Server 傳統可用性群組的功能。

分散式可用性群組可讓您建立跨多個在不同 Oracle Cloud Infrastructure (OCI) 區域中執行之 Windows Server 容錯移轉叢集 (WSFC) 的災害復原 (DR) 解決方案。

這可讓您針對在 OCI 上執行的關鍵 SQL Server 資料庫,實現更高層級的可用性、災難復原功能和地理分佈。

此教學課程的排除項目

在本教學課程中,我們將不會逐步建立單一 Microsoft SQL Server Always On 可用性群組。如需詳細資訊,請參閱在 OCI 上部署 Microsoft SQL Server Always On Availability Groups for HA and DR

請參閱下列官方 Microsoft 文件:

目標

必要條件

作業 1:建立分散式可用性群組

建立由兩個已經執行「永遠開啟」可用性群組組成的分散式可用性群組 (distributed-aoag)。

如前所述,我們假設兩個獨立的 Always On 可用性群組已經在兩個不同的 OCI 區域中啟動並執行。

第二個 Always On 可用性群組 (marseille-aoag) ( 待命 ) 必須沒有任何關聯的資料庫,因此在建立分散式可用性群組之前,第二個 Always On 可用性群組必須空白,因此沒有任何關聯的可用性資料庫。您可以像往常一樣建立第二個 Always On 可用性群組與相關的初始資料庫,之後再移除此資料庫,此資料庫僅用於建立第二個 Always On 可用性群組。這是因為無法使用圖形介面建立與任何資料庫關聯的 Always On 可用性群組。

  1. 在第一個永遠開啟可用性群組上建立分散式可用性群組。

    連線至第一個伺服器上的 SQL Server (此範例中的「巴黎」網站 sql-srv1 節點),然後執行下列 SQL 命令。

    注意:

    • 監聽器名稱為 paris-sql-listmars-sql-list

    • 要使用的 TCP 連接埠,5022 是端點的連接埠,必須使用。這通常與監聽器連接埠 (1433) 不同。

    • 可用性群組名稱必須正好是已經執行 Always On 可用性群組所使用的名稱。

    USE MASTER;
    CREATE AVAILABILITY GROUP [distributed-aoag]  
       WITH (DISTRIBUTED)   
       AVAILABILITY GROUP ON  
          'paris-aoag' WITH    
          (   
             LISTENER_URL = 'tcp://paris-sql-list.acme.corp:5022',    
             AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,   
             FAILOVER_MODE = MANUAL,   
             SEEDING_MODE = AUTOMATIC   
          ),   
          'marseille-aoag' WITH    
          (   
             LISTENER_URL = 'tcp://mars-sql-list.acme.corp:5022',   
             AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,   
             FAILOVER_MODE = MANUAL,   
             SEEDING_MODE = AUTOMATIC   
          );    
    GO
    
  2. 加入第二個 Always On 可用性群組中的分散式可用性群組。

    連線至第二個 Always On 可用性群組 (Marseille 網站 sql-srv3 伺服器) 的第一部伺服器上的 SQL Server,然後執行下列 SQL 命令。

    USE MASTER;
    ALTER AVAILABILITY GROUP [distributed-aoag]   
       JOIN   
       AVAILABILITY GROUP ON  
          'paris-aoag' WITH    
          (   
             LISTENER_URL = 'tcp://paris-sql-list.acme.corp:5022',    
             AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,   
             FAILOVER_MODE = MANUAL,   
             SEEDING_MODE = AUTOMATIC   
          ),   
          'marseille-aoag' WITH    
          (   
             LISTENER_URL = 'tcp://mars-sql-list.acme.corp:5022',   
             AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,   
             FAILOVER_MODE = MANUAL,   
             SEEDING_MODE = AUTOMATIC   
          );    
    GO 
    
  3. 請務必瞭解不同於傳統可用性群組,分散式可用性群組不需要 WSFC 中的資源群組或角色。所有描述資料都是在 SQL Server 內管理。這表示即使是 SQL Server Management Studio,也不會直接顯示分散式可用性群組中的資料庫名稱。

    若要檢視此資訊,請執行下列 Transact-SQL 命令檔。

    --View metadata and status of the Distributed Availability Group
    SELECT r.replica_server_name, r.endpoint_url,
    rs.connected_state_desc, rs.role_desc, rs.operational_state_desc,
    rs.recovery_health_desc,rs.synchronization_health_desc,
    r.availability_mode_desc, r.failover_mode_desc
    FROM sys.dm_hadr_availability_replica_states rs 
    INNER JOIN sys.availability_replicas r
    ON rs.replica_id=r.replica_id
    ORDER BY r.replica_server_name   
    

    圖像

注意:為了因應區域之間的潛在網路延遲,我們已將主要和次要的 Always On 可用性群組設定為非同步確認複寫。這樣可以將主要資料庫的效能負荷降到最低。在每個 Always On 可用性群組中,我們選擇在複本之間進行同步確認複寫,以確保高可用性。不過,對於非同步確認複本之間的容錯移轉 (如果是分散式可用性群組),減少資料遺失需要暫時切換至同步確認模式,才能起始容錯移轉。對於 failover_mode,分散式可用性群組的唯一可用模式為手動。

作業 2:分散式可用性群組的容錯移轉程序

在這項任務中,我們將討論兩個 Always On 可用性群組之間的容錯移轉。資料庫的容錯移轉程序由下列簡單步驟和檢查組成。

遵循其步驟:

  1. 執行下列命令檔來檢查同步是否正常,先在目前主要網站的目前主要 SQL 執行,再檢查次要網站的主要 SQL。

    執行的結果必須是 CONNECTED_STATE = CONNECTED,而 SYNCHRONIZATION_HEALTH = HEALTHY

    select ag.name, ag.is_distributed, ar.replica_server_name, ar.availability_mode_desc, ars.connected_state_desc, ars.role_desc, 
       ars.operational_state_desc, ars.synchronization_health_desc from sys.availability_groups ag  
       join sys.availability_replicas ar on ag.group_id=ar.group_id
       left join sys.dm_hadr_availability_replica_states ars
       on ars.replica_id=ar.replica_id
       where ag.is_distributed=1
    GO
    

    圖像

    圖像

  2. 變更可用性模式。請先在目前主要站台的目前主要 SQL Server 上執行下列指令碼,然後在次要站台的主要 SQL Server 上執行。

    --Run this first on the primary replica of the primary AOAG and then again on the secondary AOAG
    USE MASTER;     
    ALTER AVAILABILITY GROUP [distributed-aoag]     
    MODIFY 
    AVAILABILITY GROUP ON
    'paris-aoag' WITH 
    ( 
       AVAILABILITY_MODE = SYNCHRONOUS_COMMIT 
    ), 
    'marseille-aoag' WITH     
    ( 
       AVAILABILITY_MODE = SYNCHRONOUS_COMMIT 
    );
    
  3. 若要確保不會遺失資料,請驗證此步驟的結果。狀態必須是 SYNCHRONIZED,且全域主要和轉寄者上每個資料庫的 last_hardened_lsn 都必須相符。

    -- Run this query on the Global Primary and the forwarder
    -- Check the results to see if synchronization_state_desc is SYNCHRONIZED, and the last_hardened_lsn is the same per database on both the global primary and forwarder 
    -- If not rerun the query on both side every 5 seconds until it is the case
    --
    SELECT ag.name
             , drs.database_id
             , db_name(drs.database_id) as database_name
             , drs.group_id
             , drs.replica_id
             , drs.synchronization_state_desc
             , drs.last_hardened_lsn  
    FROM sys.dm_hadr_database_replica_states drs 
    INNER JOIN sys.availability_groups ag on drs.group_id = ag.group_id;
    

    圖像

    圖像

  4. 您現在已準備好在目前主要位置的目前主要 SQL Server 上設定 REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT

    --Run this script into Primary AOAG
    USE MASTER;
    ALTER AVAILABILITY GROUP [distributed-aoag]
    SET (REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = 1);
    

    現在,您已準備好將主要 Always On 可用性群組的角色從主要群組變更為次要群組。

    --Run this script into Primary AOAG, this will terminate client applications connected to the primary replica of the primary AOAG
    USE MASTER;
    ALTER AVAILABILITY GROUP [distributed-aoag] SET (ROLE = SECONDARY);
    

    圖像

  5. 將次要 Always On 可用性群組的角色從次要變更為主要群組。下列命令檔將執行此角色變更,讓資料庫進行讀取或寫入作業。此外,分散式可用性群組內的 Always On 可用性群組角色也會相應地更新。

    --Run this script into Secondary AOAG, this will terminate client applications connected to the primary replica of the primary AOAG
    ALTER AVAILABILITY GROUP [distributed-aoag] FORCE_FAILOVER_ALLOW_DATA_LOSS;
    

    執行下列命令檔以檢查狀態。

    --check the status on the new primary (formerly standby site)
    select ag.name, ag.is_distributed, ar.replica_server_name, ar.availability_mode_desc, ars.connected_state_desc, ars.role_desc, 
       ars.operational_state_desc, ars.synchronization_health_desc from sys.availability_groups ag  
       join sys.availability_replicas ar on ag.group_id=ar.group_id
       left join sys.dm_hadr_availability_replica_states ars
       on ars.replica_id=ar.replica_id
       where ag.is_distributed=1
    GO
    

    圖像

    圖像

  6. 現在在新的主要 SQL Server 上,取消設定 REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT

    --Run this script into Primary AOAG
    ALTER AVAILABILITY GROUP [distributed-aoag] 
    SET (REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = 0);
    

    在主要和次要網站執行下列命令檔,將使用狀態模式變更回標準模式。

    --Run this first on the primary replica of the primary AOAG and then again on the secondary AOAG
    ALTER AVAILABILITY GROUP [distributed-aoag]     
    MODIFY 
    AVAILABILITY GROUP ON
    'paris-aoag' WITH 
    ( 
       AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT 
    ), 
    'marseille-aoag' WITH     
    ( 
       AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT 
    );
    

作業 3:分散式永遠在可用性群組的容錯回復程序

如任務 2 所述,若要將巴黎回復為主要地點,馬賽爾回復為次要地點,只需執行新的切換以回轉同步化即可。

認可

其他學習資源

探索 docs.oracle.com/learn 上的其他實驗室,或存取 Oracle Learning YouTube 頻道上的更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。

如需產品文件,請造訪 Oracle Help Center