주:

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 설명서를 참조하십시오.

목표

필요 조건

작업 1: 분산 가용성 그룹 생성

이미 실행 중인 Always On 가용성 그룹 두 개로 구성된 분산 가용성 그룹(distributed-aoag)을 생성합니다.

앞서 언급했듯이 두 개의 독립적인 상시 가동 가용성 그룹이 이미 두 개의 서로 다른 OCI 리전에서 작동 및 실행 중이라고 가정합니다.

두번째 Always On 가용성 그룹(marseille-aoag), 대기 그룹에는 연관된 데이터베이스가 없어야 하므로 분산 가용성 그룹을 만들기 전에 두번째 Always On 가용성 그룹이 비어 있어야 하므로 연관된 가용성 데이터베이스가 없습니다. 초기 데이터베이스가 연결된 상태에서 평소와 같이 두번째 Always On 가용성 그룹을 만들 수 있으며 그 후에 두번째 Always On 가용성 그룹을 만드는 데만 사용된 이 데이터베이스를 제거할 수 있습니다. 그 이유는 연관된 데이터베이스가 있는 Always On 가용성 그룹을 그래픽 인터페이스에서 만들 수 없기 때문입니다.

  1. 첫 번째 상시 가동 가용성 그룹에 분산 가용성 그룹을 생성합니다.

    첫번째 서버에서 SQL Server에 연결하고(이 예제에서는 Paris 사이트 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-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 절차는 다음과 같은 간단한 단계 및 검사로 구성됩니다.

단계를 수행합니다:

  1. 다음 스크립트를 실행하여 동기화가 정상인지 확인합니다. 먼저 현재 기본 사이트의 현재 기본 SQL에서 실행한 다음 보조 사이트의 기본 SQL에서 실행됩니다.

    실행된 결과는 CONNECTED_STATE = CONNECTEDSYNCHRONIZATION_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 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 
    );
    
  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);
    

    이제 기본 상시 가동 가용성 그룹의 역할을 기본에서 보조로 변경할 준비가 되었습니다.

    --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 가용성 그룹의 역할도 그에 따라 업데이트됩니다.

    --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 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 Oracle Learning Explorer가 되려면 education.oracle.com/learning-explorer을 방문하십시오.

제품 설명서는 Oracle Help Center를 참조하십시오.