다음을 통해 공유


Linux의 SQL Server 의 다중 서브넷 Always On 가용성 그룹을 구성

적용 대상: SQL Server - Linux

Always On AG(가용성 그룹) 또는 FCI(장애 조치(failover) 클러스터 인스턴스)가 둘 이상의 사이트에 걸쳐 있는 경우 각 사이트에는 일반적으로 자체 네트워킹이 있고, 따라서 자체 IP 주소 지정이 있습니다.

예를 들어 사이트 A의 주소는 192.168.1.<x>로 시작하고 사이트 B의 주소는 192.168.2.<x>로 시작합니다. 여기서 <x>는 서버에 고유한 IP 주소 부분입니다. 네트워킹 계층에 라우팅이 없으면 이러한 서버는 서로 통신할 수 없습니다.

이 시나리오는 다음 두 가지 방식으로 처리할 수 있습니다.

  • 두 개의 서로 다른 서브넷(VLAN이라고 함)을 연결하는 네트워크 설정
  • 서브넷 간의 라우팅 구성

VLAN 기반 솔루션

전제 조건: VLAN 기반 솔루션의 경우 AG 또는 FCI에 참여하는 각 서버에는 적절한 가용성을 위해 두 개의 네트워크 카드(NIC)가 필요하므로(이중 포트 NIC는 실제 서버에서 단일 실패 지점이 됨), 서버에는 VLAN뿐 아니라 기본 서브넷의 IP 주소가 할당될 수 있습니다. 이 요구 사항은 자체 네트워크가 필요한 iSCSI와 같은 다른 네트워크 요구 사항에 추가됩니다.

AG 또는 FCI에 대한 IP 주소는 VLAN에서 생성됩니다. 다음 예제에서 VLAN에는 서브넷이 192.168.3.<x>에 있으므로 AG 또는 FCI에 대해 생성된 IP 주소는 192.168.3.104입니다. AG 또는 FCI에 할당된 단일 IP 주소가 있으므로 추가로 구성할 필요가 없습니다.

VLAN을 사용하여 여러 서브넷을 구성하는 방법을 보여 주는 다이어그램.

Pacemaker를 사용하는 구성

Windows에서 WSFC(Windows Server 장애 조치(failover) 클러스터)는 기본적으로 여러 서브넷을 지원하며 IP 주소에 대한 OR 종속성을 통해 여러 IP 주소를 처리합니다. Linux에서는 OR 종속성이 없지만 일반적인 Pacemaker 명령줄을 사용할 수 없더라도 Pacemaker를 사용하여 적절한 다중 서브넷을 기본적으로 달성할 수 있는 방법이 있습니다. 대신 CIB(Cluster Information Base)를 수정해야 합니다. CIB는 Pacemaker 구성을 사용하는 XML 파일입니다.

Pacemaker를 사용하여 여러 서브넷을 구성하는 방법을 보여 주는 다이어그램.

CIB 업데이트

  1. CIB을 내보냅니다.

    sudo pcs cluster cib <filename>
    

    여기서 <filename>는 CIB를 호출하려는 이름입니다.

  2. 생성된 파일을 편집합니다. <resources> 섹션을 찾습니다. AG 또는 FCI에 대해 생성된 다양한 리소스가 표시됩니다. IP 주소와 연결된 것을 찾습니다. 기존 IP 주소의 앞이나 뒤에 두 번째 IP 주소에 대한 정보가 포함된 <instance_attributes> 섹션을 추가하되, <operations>보다 먼저 추가합니다. 다음 구문과 유사합니다.

    <instance_attributes id="<NameForAttribute>">
        <nvpair id="<NameForIP>" name="ip" value="<IPAddress>"/>
    </instance_attributes>
    

    여기서 <NameForAttribute>는 이 속성의 고유 이름, <NameForIP>는 IP 주소와 연결된 이름, <IPAddress>는 두 번째 서브넷의 IP 주소입니다.

    예제는 다음과 같습니다.

    <instance_attributes id="virtualip-instance_attributes">
        <nvpair id="virtualip-instance_attributes-ip" name="ip" value="192.168.1.102"/>
    </instance_attributes>
    

    기본적으로 내보낸 CIB XML 파일에는 하나의 <instance_attributes />만 있습니다. 두 개의 서브넷이 있는 경우 두 개의 <instance_attributes /> 항목이 필요합니다.

    다음은 두 서브넷의 항목 예입니다.

    <instance_attributes id="virtualip-instance_attributes1">
        <rule id="Subnet1-IP" score="INFINITY" boolean-op="or">
            <expression id="Subnet1-Node1" attribute="#uname" operation="eq" value="Node1" />
            <expression id="Subnet1-Node2" attribute="#uname" operation="eq" value="Node2" />
        </rule>
        <nvpair id="IP-In-Subnet1" name="ip" value="192.168.1.102"/>
    </instance_attributes>
    <instance_attributes id="virtualip-instance_attributes2">
        <rule id="Subnet2-IP" score="INFINITY">
            <expression id="Subnet2-Node1" attribute="#uname" operation="eq" value="Node3" />
        </rule>
        <nvpair id="IP-In-Subnet2" name="ip" value="192.168.2.102"/>
    </instance_attributes>
    

    서브넷에 둘 이상의 서버가 있는 경우 boolean-op="or"를 사용합니다.

  3. 수정된 CIB를 가져오고 Pacemaker를 다시 구성합니다.

    sudo pcs cluster cib-push <filename>
    

    <filename>는 수정된 IP 주소 정보가 포함된 CIB 파일의 이름입니다.

장애 조치(failover) 확인

  1. 업데이트된 구성에 CIB가 성공적으로 적용되면 Pacemaker에서 IP 주소 리소스와 연결된 DNS 이름을 ping합니다. 현재 AG 또는 FCI를 호스팅하는 서브넷과 연결된 IP 주소를 반영해야 합니다.

  2. AG 또는 FCI를 다른 서브넷에 실패합니다.

  3. AG 또는 FCI가 완전히 온라인 상태가 된 후 IP 주소와 연결된 DNS 이름을 ping합니다. 두 번째 서브넷의 IP 주소를 반영해야 합니다.

  4. 원하는 경우 AG 또는 FCI를 원래 서브넷으로 다시 실패시킵니다.