주:
- 이 자습서에서는 Oracle Cloud에 액세스해야 합니다. 무료 계정에 등록하려면 Oracle Cloud Infrastructure Free Tier 시작하기를 참조하십시오.
- Oracle Cloud Infrastructure 자격 증명, 테넌시 및 구획에 예제 값을 사용합니다. 실습을 완료했으면 이러한 값을 자신의 클라우드 환경과 관련된 값으로 대체하십시오.
OCI에서 DR용 Microsoft SQL Server Distributed Always On 가용성 그룹 배포
소개
분산 상시 가동 가용성 그룹(분산 가용성 그룹)은 SQL Server에 대한 기존 가용성 그룹의 기능을 확장하는 Microsoft SQL Server의 강력한 기능입니다.
분산 가용성 그룹을 사용하면 여러 Oracle Cloud Infrastructure(OCI) 지역에서 실행되는 여러 WSFC(Windows Server Failover Clusters)에 걸쳐 있는 DR(재해 복구) 솔루션을 생성할 수 있습니다.
이를 통해 OCI에서 실행되는 중요한 SQL Server 데이터베이스에 대해 더 높은 수준의 가용성, 재해 복구 기능 및 지리적 분포를 달성할 수 있습니다.
이 자습서에 대한 제외
이 자습서에서는 단일 Microsoft SQL Server Always On 가용성 그룹의 단계별 생성을 다루지 않습니다. 자세한 내용은 OCI에 HA 및 DR용 Microsoft SQL Server Always On Availability Groups 배포를 참조하십시오.
다음 공식 Microsoft 설명서를 참조하십시오.
목표
- OCI에서 Microsoft SQL Server Distributed Always On 가용성 그룹 솔루션을 생성합니다.
필요 조건
-
분산 가용성 그룹의 구성 요소는 다음과 같습니다.
-
VCN: OCI VCN(가상 클라우드 네트워크)을 두 개의 개별 OCI 리전에 생성하고, DRG(동적 라우팅 게이트웨이) 원격 피어링을 통해 연결합니다.
-
AOAG 1: OCI Region 1에서 실행됩니다. 여기서는 복제할 데이터베이스가 정상적으로 실행됩니다. 다음 예(파리 OCI 리전)에서 SQL Server #1 및 SQL Server #2에서 실행되는 WSFC를 기반으로 합니다.
-
AOAG 2: OCI Region 2에서 실행됩니다. 이 그룹은 다음 예(Marseille OCI 지역)에서 SQL Server #3 및 SQL Server #4로 구성된 WSFC에서 실행되는 완전히 독립적인 Always On 가용성 그룹입니다.
-
분산 AOAG: 복제할 SQL 데이터베이스에 생성된 논리적 생성자입니다.
다음 이미지는 분산 가용성 그룹의 논리적 표현을 보여줍니다.
-
-
두 개의 독립적인 Always On 가용성 그룹을 생성합니다(첫번째 영역에는 하나, 두번째 영역에는 하나). 자세한 내용은 OCI에 HA 및 DR용 Microsoft SQL Server Always On Availability Groups 배포를 참조하십시오.
이제 두 개의 서로 다른 OCI 리전에서 실행되는 독립된 Always On 가용성 그룹이 있습니다. 이 예에서 OCI 리전은 Paris 및 Marseille입니다.
-
첫번째 영역에는 첫번째 SQL Always On 가용성 그룹(
paris-aoag
)과 SQL Always On 가용성 그룹에 대한 SQL 리스너(paris-sql-list
)가 있는 첫번째 WSFC 클러스터(paris-wsfc
)가 있습니다.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
)부터 시작하여 이 예에서 첫번째 상시 가동 가용성 그룹과 새로 생성된distributed-aoag
로 복제되는 데이터베이스인 DemoDB를 볼 수 있습니다. -
따라서
sql-srv3
(marseille-aoag
)에 연결하면 이 예에서는 첫번째 Always On 가용성 그룹으로 복제된 데이터베이스인 DemoDB, 새로 생성된distributed-aoag
및 두번째 사이트(Marseille)에서 생성된 두번째 Always On 가용성 그룹인marseille-aoag
도 확인할 수 있습니다.
-
작업 1: 분산 가용성 그룹 생성
이미 실행 중인 Always On 가용성 그룹 두 개로 구성된 분산 가용성 그룹(distributed-aoag
)을 생성합니다.
앞서 언급했듯이 두 개의 독립적인 상시 가동 가용성 그룹이 이미 두 개의 서로 다른 OCI 리전에서 작동 및 실행 중이라고 가정합니다.
두번째 Always On 가용성 그룹(marseille-aoag
), 대기 그룹에는 연관된 데이터베이스가 없어야 하므로 분산 가용성 그룹을 만들기 전에 두번째 Always On 가용성 그룹이 비어 있어야 하므로 연관된 가용성 데이터베이스가 없습니다. 초기 데이터베이스가 연결된 상태에서 평소와 같이 두번째 Always On 가용성 그룹을 만들 수 있으며 그 후에 두번째 Always On 가용성 그룹을 만드는 데만 사용된 이 데이터베이스를 제거할 수 있습니다. 그 이유는 연관된 데이터베이스가 있는 Always On 가용성 그룹을 그래픽 인터페이스에서 만들 수 없기 때문입니다.
-
첫 번째 상시 가동 가용성 그룹에 분산 가용성 그룹을 생성합니다.
첫번째 서버에서 SQL Server에 연결하고(이 예제에서는 Paris 사이트
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-SQLTransact-SQL 스크립트를 실행합니다.To view this information, run the following Transact-SQLTransact-SQL script.
--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
주: 영역 간 잠재적 네트워크 대기 시간을 수용하기 위해 비동기 커밋 복제를 사용하여 기본 및 보조 항상 켜짐 가용성 그룹을 구성했습니다. 이렇게 하면 primary database의 성능 오버헤드가 최소화됩니다. 각 Always On 가용성 그룹 내에서 고가용성을 보장하기 위해 복제본 간 동기 커밋 복제를 선택했습니다. 그러나 분산 가용성 그룹의 경우 비동기 커밋 복제본 간 페일오버의 경우 데이터 손실을 줄이려면 페일오버를 시작하기 전에 동기 커밋 모드로 임시 전환해야 합니다. failover_mode의 경우 분산 가용성 그룹에 대해 사용 가능한 유일한 모드는 수동입니다.
작업 2: 분산 가용성 그룹에 대한 복구 프로시저
이 작업에서는 두 Always On 가용성 그룹 간의 페일오버에 대해 설명합니다. 데이터베이스의 Failover 절차는 다음과 같은 간단한 단계 및 검사로 구성됩니다.
-
초기 검사입니다.
-
기본 상시 가동 가용성 그룹 및 보조 상시 가동 가용성 그룹에 대해 가용성 모드를 비동기에서 동기로 변경합니다.
-
스크립트를 실행하여 동기화가 정상인지 확인합니다.
-
기본 상시 가동 가용성 그룹의 역할을 기본에서 보조로 변경합니다.
-
보조 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 ServerSQL Server에서 다음 스크립트를 먼저 실행한 다음 보조 사이트의 기본 SQL ServerSQL Server에서 실행합니다.Run the following script first on the currently primary SQL ServerSQL Server of the currently primary site and then on the primary SQL ServerSQL Server of the secondary site.
--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);
이제 기본 상시 가동 가용성 그룹의 역할을 기본에서 보조로 변경할 준비가 되었습니다.
--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 가용성 그룹의 역할도 그에 따라 업데이트됩니다.
--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에 설명된 대로 새 스위치오버를 수행하여 동기화를 취소하면 됩니다.
관련 링크
확인
- Authors - Alessandro Volpi(클라우드 솔루션 전문가)
추가 학습 자원
docs.oracle.com/learn에서 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 Oracle Learning Explorer가 되려면 education.oracle.com/learning-explorer을 방문하십시오.
제품 설명서는 Oracle Help Center를 참조하십시오.
Deploy Microsoft SQL Server Distributed Always On Availability Groups for DR on OCI
G23264-01
December 2024