시간을 줄여주는 블로그(IT, Azure)

Azure File Premium or AWS FSx for Windows를 이용한 SQL Alwayson FCI 다중 서브넷 클러스터 구성 본문

카테고리 없음

Azure File Premium or AWS FSx for Windows를 이용한 SQL Alwayson FCI 다중 서브넷 클러스터 구성

서희 아빠 2023. 2. 25. 15:55

AWS에서는 가용성 영역을 사용하게 되면 가용성 영역간 서브넷이 각각 구성되므로 SQL AlwaysOn FCI를 구성할 때, 다중 서브넷 클러스터로 구성이 되어야 합니다.

Azure는 가용성 영역간 동일한 서브넷 사용이 가능하기 때문에 본 구성이 강제 되지는 않습니다.

 

일반적으로 장애조치 클러스터의 경우 SCSI-3 PR을 지원하는 LUN 스토리지가 필요하지만, AWS에서 native로 지원하지 않으므로 FSx for Windows를 이용하여 SMB 파일 공유 볼륨을 클러스터 저장소로 구현합니다.
Azure는 공유 디스크를 생성하여 각 노드간 SCSI-3 PR 구성을 할 수 있습니다.

 

본 테스트 내용은 장애조치 클러스터 인스턴스(FCI)를 구성하고 확인하는 가이드를 목적으로 작성된 문서입니다.

관련된 기술 문서는 다음을 참고합니다.

1. 테스트 환경 구성도(약식)

  • 2node 클러스터 구성이며, AD01의 도메인에 조인되어 있습니다.
  • 본 구성은 Windows 2016+ 버전에서 동일하게 구현이 가능합니다.
  • 구성도에는 단일 FSx for Windows Server 볼륨으로 표현되나 기본적으로 SQL Data와 Log 영역을 구분을 권장하고, 트랙잭션 성능에 대한 고려가 필요한 OLTP의 경우 일반적인 클러스터 환경처럼 I/O 분산처리
    를 고려하여 복수의 FSx 볼륨 구성 고려가 필요합니다. (Azure File Premium도 동일함)
  • SQL 사용 외 쿼럼을 위한 Witness 용도의 FSx 볼륨 별도 구성 필요합니다.(Azure의 경우 Storage Account의 blob을 이용하여 Cloud Quorum을 구성합니다.)
  • 각 노드에는 공유 볼륨을 제외한 OS영역의 EBS디스크가 연결되어 있습니다.(Azure는 Managed Disk로 구현합니다.)
  • SQL 노드의 EC2에는 각 노드 별 3개의 IP가 필요합니다.(Azure는 DNN / VNN으로 구분하여 별도 구성합니다.)
    Management: OS에서 사용하는 IP
    WSFC IP: Windows 장애조치 클러스터에서 사용하는 IP
    SQL FCI IP: SQL 클러스터 역할에서 사용하는 IP

2. Windows Server 장애조치 클러스터 생성

SQL 설치 및 구성에 앞서 Windows 장애조치 클러스터(WSFC)구성을 합니다.

Windows 장애 조치 클러스터의 경우 Windows의 기능으로 구성되며 다음의 과정으로 진행합니다.

 

[Windows 장애조치 클러스터 기능 설치]

본 작업을 SQLDB01, SQLDB02에 동일하게 적용합니다.

서버 관리자(Server Manager)->역할 및 기능 추가(Add roles and Feature)->
기능(Features)->장애조치 클러스터(Failover Clustering) 설치

설치가 완료되면 장애 조치 클러스터 관리도구를 실행하여 클러스터 구성을 진행합니다.

[클러스터 유효성 검사]

WSFC를 설치하기 전 각 노드의 구성 가능 여부와 네트워크 및 OS 상태를 확인하기 위해 클러스터 유효성 검사를 실행합니다. SCSI-3 PR을 사용하지 않는 파일공유 구성이므로 스토리지는 제외하고 구성을 진행합니다.

관리 도구->장애조치 클러스터 관리자->클러스터 유효성 검사(Validate Configuration)를 실행합니다.

구성할 노드를 모두 선택한 뒤 다음을 선택합니다.

선택된 항목만 실행을 체크하고 다음을 선택한 뒤 StorageStorage Space Direct를 체크 해제한 뒤 실행합니다.

 

양 노드의 결과가 Validated로 나오는지 확인합니다. AWS같은 환경의 경우 DHCP를 사용하므로 네트워크 관련된 경고가 나타날 수 있으며, 이는 환경의 문제이므로 무시해도 관계없습니다. , 경고가 아닌 오류가 발생된 경우 클러스터를 생성한 뒤 Microsoft의 기술지원을 받을 수 없습니다. 해당 리포트는 클러스터 로그의 경로에 함께 xml파일 형태로 저장됩니다.

위 스크린 화면의 아래쪽 체크박스를 선택한 뒤 마침을 누르면 클러스터 생성 마법사가 실행됩니다.

[WSFC클러스터 생성]

마법사에서 WSFC 클러스터의 이름을 입력합니다. 본 가이드에서는 “WSFC”로 입력합니다.

클러스터 스토리지를 사용하지 않으므로 클러스터 디스크 추가는 체크해제 후 생성을 진행합니다.

생성이 완료되면 클러스터 관리자에서 클러스터가 확인됩니다.

[Windows 장애조치 클러스터의 IP 할당 및 리소스 종속성 변경]

같은 서브넷에서 구성하면 별도의 vIP 혹은 LB를 통해서 클러스터 IP를 서비스할 수 있습니다.

다만, 현재와 같은 멀티 서브넷의 경우 각 IP를 정의하고 해당 노드가 온라인인 경우에만 서비스가 가능하도록 설정을 변경해야 합니다.

다음과 같이 Core ClusterIP가 오프라인으로 되어 있는지 확인하고 각 노드의 추가IP로 변경작업을 진행합니다.

 

SQLDB01IP를 추가부여하고 소유자 노드를 SQLDB01만 설정한 뒤 IP를 온라인으로 변경합니다.

SQLDB01IP를 추가부여하고 소유자 노드를 SQLDB01만 설정한 뒤 IP를 온라인으로 변경합니다.

SQLDB02도 동일하게 Zone2 서브넷의 부여한 IP를 설정하고 소유자 노드를 SQLDB02로 설정합니다.

 

SQLDB02 IP리소스의 경우 온라인으로 변경하지 않고 다른 노드로 클러스터 이동을 하여 2번이 온라인으로 변경되는지 여부를 확인합니다.

[쿼럼 및 SQL 클러스터 리소스 생성을 위한 AD 그룹 생성 및 권한 위임 작업]

쿼럼을 구성하기 전 파일공유 쿼럼이기 때문에 사용자가 아닌 클러스터 노드와 코어 클러스터가 쿼럼에 액세스하고 파일을 생성할 수 있도록 AD그룹 생성과 생성된 그룹으로 권한 위임 작업이 필요합니다.

다음의 과정으로 AD 그룹을 생성합니다.

AD->AD사용자 및 컴퓨터->그룹 생성->SQL노드 및 클러스터 리소스 추가

생성된 그룹의 속성에서 구성원을 선택하고, Computers 개체를 추가하기 위해 필터에서 computers 개체를 선택합니다.

SQLDB 노드2개와 WSFC 개체를 추가합니다.

추가되면 Computers 개체에 대한 권한 위임을 진행합니다.

AD사용자 및 컴퓨터->Computers->권한 위임을 선택합니다.

생성한 SQLServers그룹을 선택합니다.

사용자 정의권한 선택

Computers 개체 선택 후 생성 및 삭제 체크

Full Control을 선택합니다.

[클러스터 쿼럼 추가]

FSx에서 쿼럼용으로 생성한 공유폴더의 경로를 확인하고 쿼럼 구성 마법사를 실행합니다.

다음 과정을 순서대로 진행합니다.

공유 경로를 붙여넣기 하여 정상적으로 Quorum이 표시되는지 확인합니다.

3. SQL AlwaysOn FCI 설치

코어 클러스터의 온라인 노드에서 SQL 이미지내의 setup.exe를 실행합니다.

장애조치 클러스터 설치 단계까지 Next 로 이동합니다.

유효성 검사 단계에서 경고를 확인합니다.

Windows Firewall의 경우 1433포트에 대해서 기본적으로 차단하기 때문에 wf.msc에서 별도 설정을 통해 1433 포트를 오픈해야 합니다.

NetworkWSFC 코어클러스터 구성시 있었던 유효성에 대한 알림입니다.

다음은 설치할 기능을 선택합니다.

본 테스트는 SQL 데이터베이스 엔진 기능에 대한 클러스터 구성이므로 데이터베이스 엔진 서비스만 선택하여 구성합니다.

SQL FCI에 대한 이름을 지정합니다. 본 이름이 실제 connection point가 되기 때문에 DNS에 등록되고 관리가 되는 항목입니다.

클러스터 리소스 그룹은 Next선택합니다.

 

Cluster 디스크 선택 역시 공유폴더 형태이므로 Next를 선택하여 넘깁니다.

클러스터 네트워크 구성에서 현재 노드의 서브넷을 선택하고 DHCP 선택을 해제합니다.

이후 각 노드에 할당했던 SQL용도의 IP를 입력합니다.

서버 구성 단계에서는 SQL 기본 인스턴스(MSSQLSERVER)VM에서 서비스형태로 등록되어 실행될 계정입니다.

반드시 AD계정으로 입력해야 하며, 암호가 변경되는 경우 서비스 기동이 장애조치 이후 되지 않기 때문에 전용 서비스 계정을 AD에서 생성하여 진행합니다.

데이터베이스 엔진 구성에서 관리자 권한과 SQL 관리자 기본 계정(sa) 사용 여부를 선택합니다.

선택 후 데이터 디렉토리를 선택하여 FSx 공유 폴더 경로를 입력합니다.

공유 폴더 경로 입력

공유 폴더 경로 지정에 대한 알림 메시지 팝업이 나오면 예를 선택하고 다음을 선택하여 설치를 진행합니다.

설치가 완료되면 하기와 같이 장애조치 클러스터 관리자에서 SQLFCI 리소스가 정상적으로 온라인 되었는지 확인합니다.

SQL FCI Primary 노드 구성이 완료되었습니다.

 

[SQL FCI 개체 권한 추가]

추가적인 권한 할당을 위해 SQLComputers그룹의 구성원에 SQLFCI Computers 개체를 추가합니다.

AD에서 AD 사용자 및 컴퓨터->SQLComputers의 구성원에 SQLFCI를 추가합니다.

[SQL FCI 클러스터 설치 검증]

SQL Management Studio를 설치한 뒤 다음과 같이 SQLFCI.<domain>로 로그인을 시도하여 정상 통신 여부를 확인합니다.(AD DNS에 조인되어 있거나 AD DNS 도메인의 접미사를 사용하는 경우 hostname만 입력해도 연결이 가능함)

다음 쿼리를 실행하여 클러스터 구성 여부와 DNS이름 및 정보를 확인합니다.

DECLARE @version VARCHAR(4)

SELECT @version = substring(@@version, 22, 4)

IF CONVERT(SMALLINT, @version) >= 2012
  EXEC (
      'SELECT 
    SERVERPROPERTY(''ServerName'') AS [Instance Name],
    CASE LEFT(CONVERT(VARCHAR, SERVERPROPERTY(''ProductVersion'')),4) 
      WHEN ''11.0'' THEN ''SQL Server 2012''
      WHEN ''12.0'' THEN ''SQL Server 2014''
      ELSE ''Newer than SQL Server 2014''
    END AS [Version Build],
    SERVERPROPERTY (''Edition'') AS [Edition],
    SERVERPROPERTY(''ProductLevel'') AS [Service Pack],
    CASE SERVERPROPERTY(''IsIntegratedSecurityOnly'') 
      WHEN 0 THEN ''SQL Server and Windows Authentication mode''
      WHEN 1 THEN ''Windows Authentication mode''
    END AS [Server Authentication],
    CASE SERVERPROPERTY(''IsClustered'') 
      WHEN 0 THEN ''False''
      WHEN 1 THEN ''True''
    END AS [Is Clustered?],
    SERVERPROPERTY(''ComputerNamePhysicalNetBIOS'') AS [Current Node Name],
    SERVERPROPERTY(''Collation'') AS [ SQL Collation],
    [cpu_count] AS [CPUs],
    [physical_memory_kb]/1024 AS [RAM (MB)]
  FROM  
    [sys].[dm_os_sys_info]'
      )
ELSE IF CONVERT(SMALLINT, @version) >= 2005
  EXEC (
      'SELECT 
    SERVERPROPERTY(''ServerName'') AS [Instance Name],
    CASE LEFT(CONVERT(VARCHAR, SERVERPROPERTY(''ProductVersion'')),4) 
      WHEN ''9.00'' THEN ''SQL Server 2005''
      WHEN ''10.0'' THEN ''SQL Server 2008''
      WHEN ''10.5'' THEN ''SQL Server 2008 R2''
    END AS [Version Build],
    SERVERPROPERTY (''Edition'') AS [Edition],
    SERVERPROPERTY(''ProductLevel'') AS [Service Pack],
    CASE SERVERPROPERTY(''IsIntegratedSecurityOnly'') 
      WHEN 0 THEN ''SQL Server and Windows Authentication mode''
      WHEN 1 THEN ''Windows Authentication mode''
    END AS [Server Authentication],
    CASE SERVERPROPERTY(''IsClustered'') 
      WHEN 0 THEN ''False''
      WHEN 1 THEN ''True''
    END AS [Is Clustered?],
    SERVERPROPERTY(''ComputerNamePhysicalNetBIOS'') AS [Current Node Name],
    SERVERPROPERTY(''Collation'') AS [ SQL Collation],
    [cpu_count] AS [CPUs],
    [physical_memory_in_bytes]/1048576 AS [RAM (MB)]
  FROM  
    [sys].[dm_os_sys_info]'
      )
ELSE
  SELECT 'This SQL Server instance is running SQL Server 2000 or lower! You will need alternative methods in getting the SQL instance level information.'

 

[SQL FCI Secondary 노드 설치]

SQLDB02 노드에서 Setup.exe를 실행합니다.

SQL 노드 추가를 선택합니다.

실행 이후 기존 클러스터 정보를 확인하는 창까지 다음으로 이동합니다.

현 단계에서는 특별히 해 줄 작업은 없습니다.

네트워크 설정에서 SQLDB02 서브넷의 SQL FCI 용도로 할당한 IP를 추가합니다.

Primary node 설치때와 동일한 계정을 넣고 다음을 선택하여 설치를 마무리합니다.

다음과 같이 SQL 클러스터 구성이 완료되었습니다.

4. SQL 장애조치 확인 절차

장애조치 클러스터 관리자에서 현재 MSSQLSERVER의 현재 소유자 노드를 확인합니다.

현재 소유자 노드는 SQLDB01입니다. SQLDB01의 전원을 종료한 뒤 정상적으로 SQL클러스터 노드가 pending되며 리소스가 이동되는지 여부를 확인합니다.

정상적으로 SQLDB02로 노드가 이동되었는지 여부를 확인합니다.

SQL Server Management Studio를 실행한 뒤 로그인 여부와 서버 확인 쿼리를 실행하여 현재 소유자 노드가 SQLDB02로 나타나는지 확인합니다.

 

동일하게 역순으로 진행하여 SQLDB01노드로 이동되는지 여부를 확인합니다.

 

6. 참고 자료

본 가이드와 관련된 기술 자료 링크입니다.

 

장애 조치(failover) 클러스터 생성 - https://learn.microsoft.com/ko-kr/windows-server/failover-clustering/create-failover-cluster

 

장애 조치(failover) 클러스터 생성

Windows Server 2012 R2, Windows Server 2012, Windows Server 2016 및 Windows Server 2019용 장애 조치(failover) 클러스터를 만드는 방법입니다.

learn.microsoft.com

Failover Clustering Hardware Requirements and Storage Options - https://learn.microsoft.com/ko-kr/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/jj612869(v%3dws.11)

 

Failover Clustering Hardware Requirements and Storage Options

Table of contents Failover Clustering Hardware Requirements and Storage Options Article 03/09/2017 5 minutes to read In this article --> Applies To: Windows Server 2012 R2, Windows Server 2012 You need the following hardware to create a failover cluster. T

learn.microsoft.com

Active Directory Domain Services에서 클러스터 컴퓨터 계정 사전 준비 - https://learn.microsoft.com/ko-kr/windows-server/failover-clustering/prestage-cluster-adds

 

Active Directory Domain Services에서 클러스터 컴퓨터 계정 사전 준비

Active Directory Domain Services에서 클러스터 컴퓨터 개체를 사전 준비하는 방법입니다.

learn.microsoft.com

Active Directory에서 클러스터 계정 구성 - https://learn.microsoft.com/ko-kr/windows-server/failover-clustering/configure-ad-accounts

 

Active Directory에서 클러스터 계정 구성

자세한 정보: Active Directory에서 클러스터 계정 구성

learn.microsoft.com

쿼럼 구성 및 관리 - https://learn.microsoft.com/ko-kr/windows-server/failover-clustering/manage-cluster-quorum

 

장애 조치(Failover) 클러스터에서 쿼럼 구성 및 관리

Windows Server 장애 조치(failover) 클러스터에서 클러스터 쿼럼을 관리하는 방법에 대한 자세한 정보입니다.

learn.microsoft.com

파일 공유 감시 배포 - https://learn.microsoft.com/ko-kr/windows-server/failover-clustering/file-share-witness

 

Windows Server 2019에서 파일 공유 감시 배포

파일 공유 감시를 사용하면 파일 공유를 사용하여 클러스터 쿼럼에서 투표할 수 있습니다. 이 항목에서는 라우터에 연결된 USB 드라이브를 파일 공유 감시로 사용하는 것을 포함하여 파일 공유

learn.microsoft.com

Always On 장애 조치(failover) 클러스터 인스턴스(SQL Server) - https://learn.microsoft.com/ko-kr/sql/sql-server/failover-clusters/windows/always-on-failover-cluster-instances-sql-server?view=sql-server-ver16

 

Always On 장애 조치(failover) 클러스터 인스턴스 - SQL Server Always On

Always On 장애 조치(failover) 클러스터 인스턴스가 SQL Server에서 서버 인스턴스 수준의 중복성을 통해 로컬 고가용성을 제공하는 방식을 알아봅니다.

learn.microsoft.com

SQL Server Windows Server 장애 조치(Failover) 클러스터링 - https://learn.microsoft.com/ko-kr/sql/sql-server/failover-clusters/windows/windows-server-failover-clustering-wsfc-with-sql-server?view=sql-server-ver16

 

SQL Server의 Windows Server 장애 조치(failover) 클러스터 - SQL Server Always On

SQL Server 및 장애 조치(failover) 클러스터 인스턴스와 함께 Windows Server 장애 조치(failover) 클러스터 서비스를 사용하는 방법을 알아봅니다.

learn.microsoft.com

쿼럼 없이 WSFC 클러스터 강제 시작- https://learn.microsoft.com/ko-kr/sql/sql-server/failover-clusters/windows/force-a-wsfc-cluster-to-start-without-a-quorum?view=sql-server-ver16

 

쿼럼 없이 WSFC 클러스터 강제 시작 - SQL Server Always On

쿼럼 없이 Windows Server 장애 조치(failover) 클러스터링 클러스터 노드를 강제로 시작합니다. 이 작업은 데이터를 복구하고 고가용성을 다시 설정하는 데 필요할 수 있습니다.

learn.microsoft.com

장애 조치(failover) 클러스터 인스턴스 오류 복구 - https://learn.microsoft.com/ko-kr/sql/sql-server/failover-clusters/windows/recover-from-failover-cluster-instance-failure?view=sql-server-ver16

 

장애 조치(failover) 클러스터 인스턴스 오류 복구 - SQL Server Always On

SQL Server에서 장애 조치(failover)가 발생한 후 장애 조치(failover) 클러스터 관리자 스냅인을 사용하여 장애 조치(failover) 클러스터 인스턴스를 장애 조치에서 복구하는 방법을 알아봅니다.

learn.microsoft.com

 

Comments