다음을 통해 공유


고가용성, 재해 복구 지원

PHP 드라이버 다운로드

이 항목에서는 고가용성, 재해 복구를 위한 Microsoft Drivers for PHP for SQL Server 지원(버전 3.0에서 추가)에 대해 설명합니다.

Microsoft Drivers for PHP for SQL Server 버전 3.0부터 연결 문자열에 고가용성, 재해 복구 가용성 그룹 또는 장애 조치(failover) 클러스터 인스턴스의 가용성 그룹 수신기를 서버로 지정할 수 있습니다.

MultiSubnetFailover 연결 속성은 애플리케이션을 가용성 그룹 또는 장애 조치(Failover) 클러스터 인스턴스에 배포하는 중이며 드라이버가 모든 IP 주소에 연결을 시도하여 주 SQL Server 인스턴스의 데이터베이스에 연결을 시도함을 나타냅니다. SQL Server 가용성 그룹 수신기 또는 SQL Server 장애 조치(Failover) 클러스터 인스턴스에 연결할 때는 항상 MultiSubnetFailover=True를 지정하세요. 애플리케이션이 장애 조치되는 Always On 데이터베이스에 연결되는 경우 장애 조치 후 작업을 계속하기 위해 원래 연결이 끊어지고 애플리케이션은 새 연결을 열어야 합니다.

Always On 가용성 그룹에 대한 자세한 내용은 고가용성, 재해 복구 문서 페이지에서 확인할 수 있습니다.

TNIR(투명 네트워크 IP 확인)

TNIR(투명 네트워크 IP 확인)은 기존 MultiSubnetFailover 기능의 수정 버전입니다. 이 기능은 호스트 이름의 첫 번째 확인된 IP가 응답하지 않고 호스트 이름과 연결된 여러 IP가 있는 경우 드라이버의 연결 시퀀스에 영향을 미칩니다. 해당 연결 옵션은 TransparentNetworkIPResolution입니다. MultiSubnetFailover와 함께 다음 네 가지 연결 시퀀스를 제공합니다.

  • TNIR 사용 및 MultiSubnetFailover 사용 안 함: 하나의 IP를 시도한 후 모든 IP를 병렬로 시도
  • TNIR 사용 및 MultiSubnetFailover 사용: 모든 IP를 병렬로 시도됨
  • TNIR 사용 안 함 및 MultiSubnetFailover 사용 안 함: 모든 IP가 차례로 시도됨
  • TNIR 사용 안 함 및 MultiSubnetFailover 사용: 모든 IP를 병렬로 시도됨

TNIR은 기본적으로 사용하도록 설정되며 MultiSubnetFailover는 기본적으로 사용 안 함으로 설정됩니다.

다음은 PDO_SQLSRV 드라이버를 사용하여 TNIR 및 MultiSubnetFailover를 모두 사용하도록 설정하는 예입니다.

<?php
$serverName = "yourservername";
$username = "yourusername";
$password = "yourpassword";
$connectionString = "sqlsrv:Server=$serverName; TransparentNetworkIPResolution=Enabled; MultiSubnetFailover=yes";
try {
    $conn = new PDO($connectionString, $username, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    // your code 
    // more of your code
    // when done, close the connection
    unset($conn);
} catch(PDOException $e) {
    print_r($e->errorInfo);
}
?>

데이터베이스 미러링에서 다중 서브넷 클러스터를 사용하도록 업그레이드

연결 문자열에 MultiSubnetFailoverFailover_Partner 연결 키워드가 있으면 연결 오류가 발생합니다. MultiSubnetFailover가 사용되고 SQL Server에서 데이터베이스 미러링 쌍의 일부임을 나타내는 장애 조치(failover) 파트너 응답을 반환하는 경우에도 오류가 발생합니다.

현재 데이터베이스 미러링을 사용하는 PHP 애플리케이션을 멀티서브넷 시나리오로 업그레이드하는 경우 Failover_Partner 연결 속성을 제거하고 이를 True로 설정된 MultiSubnetFailover로 대체하고 연결 문자열의 서버 이름을 가용성 그룹 수신기로 대체합니다. 연결 문자열에서 Failover_PartnerMultiSubnetFailover=true를 사용하는 경우 드라이버에서 오류가 발생합니다. 그러나 연결 문자열이 Failover_PartnerMultiSubnetFailover=false(또는 ApplicationIntent=ReadWrite)를 사용하는 경우 애플리케이션은 데이터베이스 미러링을 사용합니다.

AG의 기본 데이터베이스에서 데이터베이스 미러링이 사용되고 가용성 그룹 수신기 대신 주 데이터베이스에 연결하는 연결 스트링에 MultiSubnetFailover=true가 사용된 경우 드라이버에서 오류를 반환합니다.

애플리케이션 의도 지정

연결 문자열에 키워드 ApplicationIntent를 지정할 수 있습니다. 할당 가능한 값은 ReadWrite(기본값) 또는 ReadOnly입니다.

ApplicationIntent=ReadOnly를 설정하면 클라이언트는 연결 시 읽은 워크로드를 요청합니다. 서버는 연결 시 및 USE 데이터베이스 문 중에 의도를 적용합니다.

ApplicationIntent 키워드는 레거시 읽기 전용 데이터베이스에 적용되지 않습니다.

ReadOnly의 대상

연결이 ReadOnly를 선택하면 데이터베이스에 대해 존재할 수 있는 다음 특수 구성 중 하나에 연결이 할당됩니다.

  • Always On. 데이터베이스는 대상 가용성 그룹 데이터베이스에 대한 읽기 워크로드를 허용하거나 허용하지 않을 수 있습니다. 이 선택은 PRIMARY_ROLESECONDARY_ROLE Transact-SQL 문의 ALLOW_CONNECTIONS절을 사용하여 제어됩니다.

  • 지역에서 복제

  • 읽기 확장

이러한 특수 대상을 사용할 수 없는 경우 일반 데이터베이스를 읽습니다.

ApplicationIntent 키워드는 읽기 전용 라우팅을 설정하는 데 사용됩니다.

읽기 전용 라우팅

읽기 전용 라우팅은 데이터베이스의 읽기 전용 복제 가용성을 보장할 수 있는 기능입니다. 읽기 전용 라우팅을 사용하도록 설정하려면 다음이 모두 적용합니다.

  • Always On 가용성 그룹 수신기에 연결해야 합니다.

  • ApplicationIntent 연결 문자열 키워드를 ReadOnly로 설정해야 합니다.

  • 읽기 전용 라우팅을 설정하려면 데이터베이스 관리자가 가용성 그룹을 구성해야 합니다.

각각 읽기 전용 라우팅을 사용하는 여러 연결이 동일한 읽기 전용 복제본에 연결되지 않을 수 있습니다. 데이터베이스 동기화를 변경하거나 서버 라우팅 구성을 변경하면 클라이언트를 다른 읽기 전용 복사본에 연결할 수 있습니다.

가용성 그룹 수신기를 Server 연결 스트링 키워드에 전달하지 않고 모든 읽기 전용 요청을 동일한 읽기 전용 복제본에 연결할 수 있습니다. 대신, 읽기 전용 인스턴스의 이름을 지정합니다.

읽기 전용 라우팅은 주 복제본에 연결하는 것보다 시간이 더 오래 걸릴 수도 있습니다. 읽기 전용 라우팅은 먼저 주 복제본에 연결한 다음, 가장 잘 읽을 수 있는 보조 복제본을 찾기 때문입니다. 이렇게 단계가 여럿이기 때문에 login 제한 시간을 30초 이상으로 늘려야 합니다.

참고 항목

서버에 연결