0. 사전 준비
0.1. Windows Server Failover Cluster(WSFC) Feature(기능) 설치
아래와 같이 [Server Manager] 를 통해, 'Failover Clustering' Feature를 설치해 주어야 한다.
해당 feature 설치 후에는 안정적인 운영을 위해 시스템 reboot 가 필요할 수 있는 점 인지하자.

0.2. Windows Server Failover Cluster 구성

[Create Cluster] 를 클릭 후, [Create Clustser Wizard] 에서 아래와 같이, Failover Cluster에 추가할 node(서버)들의 hostname을 입력하여 추가한다.

그럼 다음과 같이 Failover Cluster 구성이 가능한 지 Validation을 할 것인지 묻는데, 안전하게 Failover Cluster를 구성하기 위해, Yes를 클릭 후 Next로 넘어가자!

위 과정에서 Next, Next 진행하다 보면, [Validate a Configuration Wizard] 가 나타나고, 여기에서 Failover Cluster 구성에 필요한 Validation을 실질적으로 진행하게 된다. 그럼 다음과 같이 'Summary' 로 결과까지 볼 수 있게 되는데, 여기에서 Success로 나타나지 않은 것들은 추후에 Failover Cluster 구성에 문제가 생길 수 있으므로, 문제가 생긴다면 이 부분 먼저 살펴보도록 하자.

Validation이 끝나면 다음과 같이 [Access Point for Administering the Cluster] 단계로, 여기에서 실제 Failover Cluster의 이름과 이에 매핑되는 IP를 지정하게 된다. 여기에서 설정하는 IP는 실제 다른 node에서 사용하고 있는 IP를 쓰면 안되므로, 잘 설정하자!

아래와 같은 화면을 본다면, WSFC 생성은 성공적으로 마친 것이다!

☞ Failover Cluster - 트러블슈팅
- 'Access is denied'
아래와 같은 에러가 나타났다면, 현재 Failover Clustesr 생성을 진행하고 있는 AD 계정이 domain controller 권한이 아니기 때문에, Computer Object 의 생성 권한이 없어서 생기는 문제일 것이다. 이는 사내의 AD 담당자에게 요청하여, 현재 구성을 진행하고 있는 AD 계정에 적절한 권한을 부여 받아야 한다.

위와 같이 기본적인 WSFC 기능의 활성화와 함께 SQL Server Failover Cluster 를 구성할 node들을 해당 WSFC에 구성하였다면, 본격적으로 SQL Server Failover Cluster 구성에 대해 알아보도록 하자.
1. SQL Server Failover Cluster 에서 사용할 디스크들을 WSFC에 등록

[Failover Cluster Manager] 를 열어, 왼쪽 탭에서 [Disks] 로 가면, [Add Disk]가 있는데, 이걸 클릭하면 아래와 같은 화면이 나온다. 이때, WSFC에 들어가 있는 node들 간에 공유할 수 있는 disk가 있다면, [Add Disk]를 수행할 디스크들을 선택할 수 있도록 하는 화면이 나오는 것이다.
MSSQL의 FCI(Failover Cluster Instance)를 구성하기 위해서는, 스토리지상 동일한 볼륨에 대해서 WSFC에 참여한 member node 간 disk를 Active-Standby 형태로 공유하는 것이므로, WSFC에 참여한 member node 들에서 하나의 node에만 해당 볼륨을 mount 하는 것이 맞다. (OS 상에서 동일한 볼륨에 대해 LUN을 같게 하는 것 자체가 불가할 것이다.)

1.1. Disk Witness in Quorum 설정 - SQL Server Failover cluster 노드 수가 짝수일 때에만 (특히 2대)
2노드 클러스터는 다음과 같은 문제를 가지고 있다.
- 노드 1 (1 투표 행사) + 노드 2 (1 투표 행사) = 총 2 투표
- 이 상태에서 만약 두 노드 중 하나라도 다운되거나 네트워크 통신이 끊기면, 남은 노드 혼자서는 과반수 (총 투표수 2의 과반수는 2)를 확보할 수가 없게 되므로, 클러스터 전체가 오프라인이 되어 버린다. 즉 기껏 Failover Cluster를 구성해 놓고도 HA가 보장되지 않는 것이다.
위와 같은 문제를 해결하기 위해, 1 투표를 행사할 수 있도록 하는 역할을 하는 볼륨을 하나 더 mount 하여, 해당 LUN에 대해 [Disk Witness] 역할을 수행하도록 하는 것이다. 따라서, 2노드로만 이루어져 있거나, 클러스터의 총 노드 수가 짝수가 되어 과반수가 애매해질 경우, 그만큼을 [Disk Witness] 로 설정하여 HA를 보장할 수 있도록 구성해야 한다.
참고로, Disk Witness 역할을 수행하는 Disk는 해당 LUN이 정상적으로 동작하기만 한다면 쿼럼상 1투표를 행사할 수 있는 것이기 때문에, WSFC 상에서 어느 node에 있던 상관이 없다.
[Disk witness] 방식의 쿼럼 설정 방법은 다음과 같다.

위와 같이 해당 [Failover Cluster Manager] - [해당 클러스터 이름] - Actions 탭의 [More Actions] - [Configure Cluster Quorum Settings] 를 클릭하고 [Next] 를 누르면 다음과 같이 나온다.

그럼 위와 같이 [Select the quorum witness] 를 선택하고 Next 를 클릭한다.

Quorum witness 를 구성하는 방식은 다양하지만, 여기서 우리가 설정할 것은 [Disk Witness in Quorum] 방식이므로, [Configure a disk witness] 를 선택한다.

필자의 경우, 이미 SQL Server FCI 와 쿼럼을 구성해놓은 상태이기 때문에 저렇게 나타나는데, 아직 쿼럼 구성을 해 두지 않았다면, 쿼럼용으로 mount 한 디스크 (SQL Server FCI 그룹에 들어가 있으면 안됨)를 선택하고 Next 를 클릭한다.

그럼 위와 같이 [Confirmation] 을 거쳐, 최종적으로 [Disk witness] 방식의 쿼럼을 설정하게 된다.
그럼 결과물로 아래와 같이 해당 disk가 [Disk Witness In Quorum] 으로 설정되어 있는 지 반드시 확인하자!

2. Active node에서 SQL Server FCI(Failover Cluster Instance) 최초 구성

위 MSSQL 설치 화면에서 [Installation] - [New SQL Server failover cluster installation] 을 클릭하고 다음을 넘어가다보면, 아래와 같이 Feature Selection 부분부터 세세히 봐야할 필요가 있다.

- Instance root directory: SQL Server 인스턴스에 종속적인 핵심 파일이 설치되는 최상위 디렉토리로, 바이너리 파일(실행 파일, DLL 등), DB 엔진, 인스턴스별 설정 파일, 오류 로그, 트레이스 파일 등과 함께, SQL Server Agent, SSAS, SSIS, SSRS 인스턴스별로 선택된 기능의 실행에 필요한 파일들이 포함된다.
- FCI 구성 시에는, SQL Server 서비스가 실행될 각 Cluster node 에서의 local drive 하위로 지정이 되어야 한다.
공유 스토리지가 아닌 각 node에 독립적으로 SQL Server 실행 파일을 가지고 있어야, failover 시 문제 없이 SQL Server 서비스가 시작될 수 있기 때문이다.
- FCI 구성 시에는, SQL Server 서비스가 실행될 각 Cluster node 에서의 local drive 하위로 지정이 되어야 한다.
- Shared feature directory: 서버에 설치된 모든 SQL Server 인스턴스가 공유하는 공통 구성 요소들이 설치되는 디렉토리로, Client Tools Connectivity (ODBC 드라이버, OLE DB provider, SQL Native Client 등), SQL Server Browser 서비스, SQL Server Writer 서비스와 같이 여러 MSSQL 인스턴스에 공통적으로 필요한 서비스 파일들이 설치되는 디렉토리이다.
- Shared feature directory (x86): Shared feature directory와 동일하게 모든 SQL Server 인스턴스가 공유하는 공통 구성 요소들이 저장되는 디렉토리이지만, 32비트 버전의 파일들을 위한 경로
그럼 아래 화면에서 보면, [SQL Server Network Name] 을 입력해야 되는 부분이 나오는데, 이거는 실제 Client들이 SQL Server FCI에 연결할 때 사용할 SQL Server vIP와 매핑되는 domain name으로 신중하게 결정해야 한다.
특히, 기존에 이미 client들에게 공유된 domain name이 있고, 그 시스템을 마이그레이션하는 것이라면, 해당 domain name과 동일하게 설정하는 것이 나중에 client들이 변경사항을 최소화하므로 유리할 것이다.
여기에 입력된 domain name은 SQL Server FCI가 설치되면서 자동으로 DNS 서버에 [Cluster Network Configuration] 에서 지정한 IP와 함께 매핑되도록 등록한다.

위 단계 다음으로 [Cluster Resource Group] 단계이다.
아래 [SQL Server cluster resource group name] 에 설정하는 부분이 결국에 WSFC 상에서 아래와 같이 [Roles]의 name으로 설정되게 되므로, 각 인프라의 convention 에 따라 설정하면 되겠다.
그리고 [Qualified] 란이 빨간색 네모로 보이며, Message를 보면 자칫 Failover Cluster 를 구성할 수 없는 것처럼 보이는데, 이 상태에서 Next 로 다음 Phase로 넘어가도 SQL Server FCI를 구성하는 데에는 큰 문제가 없을 것이다.
그 이유는 SQL Server FCI가 구성하는 메커니즘을 이해해야 한다. SQL Server FCI는 WSFC에 이미 존재하는 리소스 그룹을 사용하는 게 아니라, 새로운 독립적인 리소스 그룹을 만들고, 그 안에 SQL Server FCI 자신이 필요로 하는 모든 리소스들을 포함하는 방식으로 생성이 된다. 따라서 아래의 [Qualified] 란에 빨간색으로 부적격으로 표시되는 이유는, 이미 WSFC에 생성되어 있는 Available Storage 그룹과 Cluster Group은 신규로 생성하는 SQL Server FCI에 사용하기에는 부적합하다는 의미로 받아들이면 된다. 따라서, 강제로 해당 그룹에 SQL Server FCI 리소스들을 넣으면 안된다는 것이다!


다음으로는 [Cluster Disk Selection] 단계이다. 여기서 매우 주의해야할 점이 있다.
필자의 경우, SQL Server FCI에서 사용할 데이터,로그,tempdb,백업 파일 등이 저장될 용도의 볼륨 1곳('Cluster Disk 1'), 쿼럼용 볼륨 1곳('Cluster Disk 2')으로 OS상에서 disk를 mount 시켰는데, 이 단계에서 쿼럼용 볼륨을 체크해서는 안된다. 여기에서 선택하는 disk는 오로지 SQL Server FCI 에서 사용되는 모든 DB와 관련된 파일(.mdf, .ldf, tempdb, backup files)등이 default 로 저장되는 위치로 설정해야만 올바른 SQL Server FCI를 구성할 수 있다. 쿼럼은 이러한 Disk의 failover 시 vote 역할만 수행하는 witness임을 잊지 말자!

다음으로는 [Cluster Network Configuration] 단계이며, 여기에서 중요한 포인트는 [Address] 를 설정하는 부분이다. 이 부분이 이전 [Instance Configuration] 에서 설정한 [SQL Server Network Name] 과 매핑될 IP이며, SQL Server FCI의 실제 vIP(Client가 접속을 시도하는 서비스 IP)에 해당하는 IP를 넣어야 하는 것이다.

[Server Configuration] 에서는 올바른 SQL Server 인스턴스 및 Agent의 서비스 계정 설정 및 Collation 을 선택하도록 하고, 다음으로 중요하게 볼 단계가 [Database Engine Configuration] 이다. 아래처럼 보이는 [Data Directories] 에서 각 항목별로 의미하는 바는 다음과 같다.
☞ 참고로 하기 디렉토리들에 이미 기존 MSSQL 인스턴스가 사용하거나 기존 MSSQL 인스턴스가 사용하던 .mdf, .ndf, .ldf, .bak 파일 등이 남아 있으면, 해당 경로를 지정하여 SQL Server 인스턴스 설치가 불가하므로, 미리 다른 데로 옮겨두든 삭제하든 해야 한다.
- Data root directory: SQL Server 인스턴스가 설치될 때, 시스템 데이터베이스 파일(.mdf, .ldf)의 기본 저장 위치로 사용되는 경로로, 일반적으로 이 디렉토리 하위에 'MSSQL\Data'와 같은 디렉토리를 추가로 생성하여 그 하위에 SQL Server 인스턴스의 시스템 DB(master, model, msdb) 파일이 저장된다.
- 여기서 중요한 점은, SQL Server FCI의 경우, 시스템 DB가 Failover Cluster의 node간 공유가 되어야 하므로, node의 local drive가 아닌 WSFC에 디스크로 참여하는 공유되는 볼륨의 drive로 지정해야 한다는 것이다.
- User database directory: 별도로 설정하지 않으면 [Data root directory] 하위에 'MSSQL\Data' 디렉토리 하위로 지정되며, 이 디렉토리는 User DB의 데이터 파일(.mdf)이 저장되는 위치이다. DB 생성 시, 각 DB마다 이 디렉토리와 다른 별도의 디렉토리로 해당 DB 파일의 저장 경로를 설정할 수 있지만, 별도로 설정하지 않게 되면 default로 사용하게 될 디렉토리이다.
- User database log directory: User DB의 로그 파일(.ldf) 파일이 기본적으로 저장될 위치를 설정하는 것이다.
- Backup directory: DB의 백업 파일 (.bak, .trn)이 기본적으로 저장될 위치를 설정하는 것이다.

위와 같은 과정을 거쳐 SQL Server Failover Cluster의 Active Node로 사용할 서버에서 SQL Server FCI 구성을 모두 마치게 된 것이다.
3. SQL server Failover Cluster에 Node 추가
아래와 같이 Standby Node로 이동하여 [SQL Server Installation Center] - [Installation] - [Add node to a SQL Server failover cluster] 를 선택하여 해당 node를 구성된 SQL Server Failover Cluster에 넣어주도록 하자!

몇 번 Next 로 넘어가다 보면, 아래와 같이 [Cluster Node Configuration] 단계가 나오는데, 여기에서 SQL Server Failover Cluster를 여러개 구성한 경우, 현재 node가 조인될 클러스터 그룹을 잘 선택하도록 하자.

그럼 아래와 같이 [Cluster Network Configuration] 단계가 되는데, 여기에 표기된 IP는 이미 SQL Server FCI 구성 시에 설정한 해당 failover cluster의 SQL Server vIP 를 그대로 가져오므로, 해당 IP가 맞는지 그리고 체크박스에 체크된 것 확인하고 넘어가면 된다.

다음 단계로는 [Service Accounts] 인데, 여기에서 SQL Server FCI 구성 시에 입력한 SQL Server 및 Agent의 서비스 계정 정보를 그대로 가져오므로, 해당 계정의 패스워드를 한번 더 입력한 후 Next로 넘어가야 한다.

나머지는 Next 를 하다 보면, [Complete] 가 되어 Add Node 까지 끝나게 된다!
이렇게 한 후, 아래 과정을 통해 ,실제 MSSQL 인스턴스의 failover 가 잘 수행되는 지 확인해 보면 SQL Server Failover Cluster 구성이 끝이 난다!

'DB > SQL Server (MSSQL)' 카테고리의 다른 글
| [MSSQL] Blocking 유발하는 세션(root blocker)을 찾아내고, 운영자 계정에 root blocker만 kill할 수 있는 프로시저 제공하기 (1) | 2025.12.31 |
|---|---|
| [MSSQL] 모든 유저 데이터베이스의 파일 사이즈 기록하는 Agent Job 만들기 (0) | 2024.06.21 |
| [MSSQL] SQL Server 점검 시 유용한 쿼리 모음 (1) | 2024.04.08 |
| [MSSQL] 데이터베이스명, 논리적 파일명, 물리적 파일명(.mdf, .ldf)을 쿼리로 변경하기 (1) | 2023.12.27 |
| [MSSQL] SQL Server Linked Server(연결된 서버) 추가와 로그인 매핑정보 / 삭제 (1) | 2023.10.20 |