附註:
- 此教學課程需要存取 Oracle Cloud。若要註冊免費帳戶,請參閱 Oracle Cloud Infrastructure Free Tier 入門。
- 它使用 Oracle Cloud Infrastructure 證明資料、租用戶及區間的範例值。完成實驗室時,請將這些值取代為您雲端環境特定的值。
在 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 文件:
目標
- 在 OCI 上建立 Microsoft SQL Server 分散式 Always On 可用性群組解決方案。
必要條件
-
分散式可用性群組的建置區塊為:
-
VCN:將 OCI 虛擬雲端網路 (VCN) 建立到兩個不同的 OCI 區域,然後透過動態路由閘道 (DRG) 遠端對等互連進行連線。
-
AOAG 1:這是在 OCI 區域 1 中執行。這是要複製的資料庫正常執行的位置。這是以下列範例 (Paris OCI 區域) 中在 SQL Server #1 和 SQL Server #2 上執行的 WSFC 為基礎。
-
AOAG 2:這是在 OCI 區域 2 中執行。這是完全獨立的 Always On 可用性群組,在由下列範例 (Marseille OCI 區域) 中的 SQL Server #3 和 SQL Server #4 組成的 WSFC 上執行。
-
分散式 AOAG:這是在要複製的 SQL 資料庫中建立的邏輯建構。
下圖顯示分散式可用性群組的邏輯表示法。
-
-
建立兩個獨立的 Always On 可用性群組 (一個在第一個區域中,另一個在第二個區域中)。如需詳細資訊,請參閱在 OCI 上部署 Microsoft SQL Server Always On Availability Groups for HA and DR 。
現在,我們有兩個獨立的 Always On 可用性群組在兩個不同的 OCI 區域中對等互連執行,在此範例中,OCI 區域為 Paris 和 Marseille 。
-
我們第一個區域中的 WSFC 叢集 (
paris-wsfc
),第一個區域中包含第一個 SQL Always On 可用性群組 (paris-aoag
) 和 SQL Always On 可用性群組的 SQL 監聽器 (paris-sql-list
)。兩個 Windows 節點為
sql-srv1
和sql-srv2
。 -
在第二個區域中,第二個 WSFC 叢集 (
marseille-wsfc
) 與第二個 SQL Always On 可用性群組 (marseille-aoag
) 以及第二個 SQL Always On 可用性群組的 SQL 監聽器 (mars-sql-list
)。兩個 Windows 節點為
sql-srv3
和sql-srv4
。 -
從 SQL Server 的角度,從
sql-srv1
(paris-aoag
) 開始,我們可以在此範例中看到以第一個 Always On 可用性群組和新建立的distributed-aoag
複製的資料庫 DemoDB 。 -
So connecting with
sql-srv3
(marseille-aoag
), we can see in this example also the DemoDB that is the database replicated with the first Always On availability group, the newly createddistributed-aoag
, and themarseille-aoag
that is the second Always On availability group created in the second site (Marseille).
-
作業 1:建立分散式可用性群組
建立由兩個已經執行「永遠開啟」可用性群組組成的分散式可用性群組 (distributed-aoag
)。
如前所述,我們假設兩個獨立的 Always On 可用性群組已經在兩個不同的 OCI 區域中啟動並執行。
第二個 Always On 可用性群組 (marseille-aoag
) ( 待命 ) 必須沒有任何關聯的資料庫,因此在建立分散式可用性群組之前,第二個 Always On 可用性群組必須空白,因此沒有任何關聯的可用性資料庫。您可以像往常一樣建立第二個 Always On 可用性群組與相關的初始資料庫,之後再移除此資料庫,此資料庫僅用於建立第二個 Always On 可用性群組。這是因為無法使用圖形介面建立與任何資料庫關聯的 Always On 可用性群組。
-
在第一個永遠開啟可用性群組上建立分散式可用性群組。
連線至第一個伺服器上的 SQL Server (此範例中的「巴黎」網站
sql-srv1
節點),然後執行下列 SQL 命令。注意:
-
監聽器名稱為
paris-sql-list
和mars-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
-
-
加入第二個 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
-
請務必瞭解不同於傳統可用性群組,分散式可用性群組不需要 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 可用性群組之間的容錯移轉。資料庫的容錯移轉程序由下列簡單步驟和檢查組成。
-
初始檢查。
-
將主要 Always On 可用性群組和次要 Always On 可用性群組的可用性模式從非同步變更為同步。
-
執行命令檔以檢查同步是否正常。
-
將主要 Always On 可用性群組的角色從主要變更為次要。
-
容錯移轉至次要 Always On 可用性群組。
-
將主要 Always On 可用性群組與次要 Always On 可用性群組的可用性模式從同步變更為非同步。
遵循其步驟:
-
執行下列命令檔來檢查同步是否正常,先在目前主要網站的目前主要 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
-
變更可用性模式。請先在目前主要站台的目前主要 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 );
-
若要確保不會遺失資料,請驗證此步驟的結果。狀態必須是
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;
-
您現在已準備好在目前主要位置的目前主要 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);
-
將次要 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
-
現在在新的主要 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 所述,若要將巴黎回復為主要地點,馬賽爾回復為次要地點,只需執行新的切換以回轉同步化即可。
相關連結
認可
- 作者 - Alessandro Volpi (雲端解決方案專家)
其他學習資源
探索 docs.oracle.com/learn 上的其他實驗室,或存取 Oracle Learning YouTube 頻道上的更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。
如需產品文件,請造訪 Oracle Help Center 。
Deploy Microsoft SQL Server Distributed Always On Availability Groups for DR on OCI
G23262-01
December 2024