장애 조치(failover) 클러스터 인스턴스 구성 - SQL Server on Linux(RHEL)
적용 대상:SQL Server - Linux
SQL Server 2노드 공유 디스크 장애 조치(failover) 클러스터 인스턴스는 고가용성을 위해 서버 수준 중복성을 제공합니다. 이 자습서에서는 SQL Server on Linux의 2노드 장애 조치(failover) 클러스터 인스턴스를 만드는 방법을 알아봅니다. 완료할 특정 단계는 다음과 같습니다.
- Linux 설정 및 구성
- SQL Server 설치 및 구성
- hosts 파일 구성
- 공유 스토리지 구성 및 데이터베이스 파일 이동
- 각 클러스터 노드에 Pacemaker 설치 및 구성
- 장애 조치(failover) 클러스터 인스턴스 구성
이 문서에서는 SQL Server의 2노드 공유 디스크 FCI(장애 조치(failover) 클러스터 인스턴스)를 만드는 방법을 설명합니다. 이 문서에는 RHEL(Red Hat Enterprise Linux)에 대한 지침과 스크립트 예제가 포함되어 있습니다. Ubuntu 배포는 RHEL과 유사하므로, 이 스크립트 예제는 일반적으로 Ubuntu에서도 작동합니다.
개념 정보는 Linux의 SQL Server FCI(장애 조치(failover) 클러스터 인스턴스)를 참조하세요.
필수 구성 요소
다음 엔드투엔드 시나리오를 완료하려면 2노드 클러스터를 배포할 머신 2대와 스토리지에 사용할 또 다른 서버가 필요합니다. 아래 단계에서는 이러한 서버를 구성하는 방법을 간략하게 설명합니다.
Linux 설정 및 구성
첫 번째 단계는 클러스터 노드에서 운영 체제를 구성하는 것입니다. 클러스터의 각 노드에서 Linux 배포를 구성합니다. 두 노드에서 동일한 배포와 버전을 사용합니다. 다음 배포 중 하나를 사용합니다.
- HA 추가 기능을 위한 유효한 구독이 있는 RHEL
SQL Server 설치 및 구성
두 노드에서 SQL Server를 설치하고 설정합니다. 자세한 내용은 SQL Server on Linux 설치를 참조하세요.
구성의 목적을 위해 노드 하나를 주 노드로 지정하고 다른 노드를 보조 노드로 지정합니다. 이 용어는 가이드 전체에서 사용됩니다.
보조 노드에서 SQL Server를 중지하고 사용하지 않도록 설정합니다. 다음 예제에서는 SQL Server를 중지하고 사용하지 않도록 설정합니다.
sudo systemctl stop mssql-server sudo systemctl disable mssql-server
참고
설정 시 SQL Server 인스턴스의 서버 마스터 키가 생성되어
var/opt/mssql/secrets/machine-key
에 저장됩니다. Linux에서 SQL Server는 항상 로컬mssql
계정으로 실행됩니다. 이 계정은 로컬 계정이므로 해당 ID가 노드 간에 공유되지 않습니다. 따라서 각 로컬mssql
계정에 액세스하여 서버 마스터 키를 해독할 수 있도록 기본 노드에서 각 보조 노드로 암호화 키를 복사해야 합니다.주 노드에서 Pacemaker용 SQL Server 로그인을 만들고 실행할
sp_server_diagnostics
로그인 권한을 부여합니다. Pacemaker는 이 계정을 사용하여 SQL Server를 실행 중인 노드를 확인합니다.sudo systemctl start mssql-server
sa 계정을 사용하여 SQL Server
master
데이터베이스에 연결하고 다음 명령을 실행합니다.USE [master] GO CREATE LOGIN [<loginName>] with PASSWORD = N'<loginPassword>' ALTER SERVER ROLE [sysadmin] ADD MEMBER [<loginName>]
또는 더 세부적인 수준에서 권한을 설정할 수 있습니다. Pacemaker 로그인을 실행
sp_addserver
sp_dropserver
하여 FCI 인스턴스 이름을 리소스 이름으로 업데이트하려면 , setupadmin 및 ALTER ANY LINKED SERVER를 사용하여 상태 상태sp_server_diagnostics
쿼리해야 합니다VIEW SERVER STATE
.주 노드에서 SQL Server를 중지하고 사용하지 않도록 설정합니다.
hosts 파일 구성
각 클러스터 노드에서 hosts 파일을 구성합니다. hosts 파일은 모든 클러스터 노드의 IP 주소와 이름을 포함해야 합니다.
각 노드의 IP 주소를 확인합니다. 다음 스크립트는 현재 노드의 IP 주소를 보여 줍니다.
sudo ip addr show
각 노드에서 컴퓨터 이름을 설정합니다. 각 노드에 15자 이하의 고유 이름을 지정합니다. 컴퓨터 이름을
/etc/hosts
에 추가하여 설정합니다. 다음 스크립트를 사용하면/etc/hosts
를vi
로 편집할 수 있습니다.sudo vi /etc/hosts
다음 예제에서는
sqlfcivm1
및sqlfcivm2
라는 두 노드의 정보가 추가된/etc/hosts
를 보여 줍니다.127.0.0.1 localhost localhost4 localhost4.localdomain4 ::1 localhost localhost6 localhost6.localdomain6 10.128.18.128 sqlfcivm1 10.128.16.77 sqlfcivm2
스토리지 구성 및 데이터베이스 파일 이동
두 노드에서 모두 액세스할 수 있는 스토리지를 제공해야 합니다. iSCSI, NFS 또는 SMB를 사용할 수 있습니다. 스토리지를 구성하고 클러스터 노드에 스토리지를 제공한 다음, 데이터베이스 파일을 새 스토리지로 이동합니다. 다음 문서에서는 각 스토리지 유형의 단계를 설명합니다.
- 장애 조치(failover) 클러스터 인스턴스 구성 - iSCSI - SQL Server on Linux
- 장애 조치(failover) 클러스터 인스턴스 구성 - NFS - SQL Server on Linux
- 장애 조치(failover) 클러스터 인스턴스 구성 - SMB - SQL Server on Linux
각 클러스터 노드에 Pacemaker 설치 및 구성
두 클러스터 노드에서 모두 Pacemaker 로그인을 위한 SQL Server 사용자 이름 및 암호를 저장할 파일을 만듭니다.
다음 명령은 이 파일을 만들고 채웁니다.
sudo touch /var/opt/mssql/secrets/passwd sudo echo '<loginName>' >> /var/opt/mssql/secrets/passwd sudo echo '<loginPassword>' >> /var/opt/mssql/secrets/passwd sudo chown root:root /var/opt/mssql/secrets/passwd sudo chmod 600 /var/opt/mssql/secrets/passwd
두 클러스터 노드에서 모두 Pacemaker 방화벽 포트를 엽니다.
firewalld
를 사용하여 이러한 포트를 열려면 다음 명령을 실행합니다.sudo firewall-cmd --permanent --add-service=high-availability sudo firewall-cmd --reload
기본 제공 고가용성 구성이 없는 다른 방화벽을 사용하는 경우 Pacemaker가 클러스터의 다른 노드와 통신할 수 있도록 다음 포트를 열어야 합니다.
- TCP: 포트 2224, 3121, 21064
- UDP: 포트 5405
각 노드에 Pacemaker 패키지를 설치합니다.
sudo yum install pacemaker pcs fence-agents-all resource-agents
Pacemaker 및 Corosync 패키지를 설치할 때 생성된 기본 사용자의 암호를 설정합니다. 두 노드에서 모두 같은 암호를 사용합니다.
sudo passwd hacluster
pcsd
서비스 및 Pacemaker를 사용하도록 설정하고 시작합니다. 이렇게 하면 다시 시작된 후 노드가 클러스터에 다시 조인할 수 있습니다. 두 노드에서 모두 다음 명령을 실행합니다.sudo systemctl enable pcsd sudo systemctl start pcsd sudo systemctl enable pacemaker
SQL Server용 FCI 리소스 에이전트를 설치합니다. 두 노드에서 모두 다음 명령을 실행합니다.
sudo yum install mssql-server-ha
장애 조치(failover) 클러스터 인스턴스 구성
FCI는 리소스 그룹에 만들어집니다. 리소스 그룹이 제약 조건의 필요성을 완화하므로 약간 더 쉽습니다. 그러나 시작되어야 하는 순서대로 리소스를 리소스 그룹에 추가합니다. 시작되어야 하는 순서는 다음과 같습니다.
- 스토리지 리소스
- 네트워크 리소스
- 애플리케이션 리소스
이 예제에서는 NewLinFCIGrp 그룹에 FCI를 만듭니다. 리소스 그룹의 이름은 Pacemaker에 생성된 모든 리소스에서 고유해야 합니다.
디스크 리소스를 만듭니다. 문제가 없으면 다시 응답을 받을 수 없습니다. 디스크 리소스를 만드는 방법은 스토리지 유형에 따라 다릅니다. 다음 섹션에서는 각 스토리지 유형(iSCSI, NFS 및 SMB)에 대한 예제를 보여 줍니다. 해당 클러스터형 스토리지의 스토리지 유형에 적용되는 예제를 사용합니다.
sudo pcs resource create <iSCSIDiskResourceName> Filesystem device="/dev/<VolumeGroupName>/<LogicalVolumeName>" directory="<FolderToMountiSCSIDisk>" fstype="<FileSystemType>" --group RGName
<iSCSIDIskResourceName>
는 iSCSI 디스크와 연결된 리소스의 이름입니다.<VolumeGroupName>
은 볼륨 그룹의 이름입니다.<LogicalVolumeName>
은 생성된 논리 볼륨의 이름입니다.<FolderToMountiSCSIDIsk>
는 디스크를 탑재할 폴더입니다(시스템 데이터베이스 및 기본 위치의 경우/var/opt/mssql/data
).<FileSystemType>
은 형식이 지정된 방법 및 배포에서 지원하는 항목에 따라 EXT4 또는 XFS가 됩니다.
FCI에서 사용할 IP 주소를 만듭니다. 문제가 없으면 다시 응답을 받을 수 없습니다.
sudo pcs resource create <IPResourceName> ocf:heartbeat:IPaddr2 ip=<IPAddress> nic=<NetworkCard> cidr_netmask=<NetMask> --group <RGName>
<IPResourceName>
은 IP 주소와 연결된 리소스의 이름입니다.<IPAddress>
는 FCI의 IP 주소입니다.<NetworkCard>
는 서브넷과 연결된 네트워크 카드(즉, eth0)입니다.<NetMask>
는 서브넷의 netmask(즉, 24)입니다.<RGName>
는 리소스 그룹의 이름입니다.
FCI 리소스를 만듭니다. 문제가 없으면 다시 응답을 받을 수 없습니다.
sudo pcs resource create FCIResourceName ocf:mssql:fci op defaults timeout=60s --group RGName
<FCIResourceName>
는 리소스의 이름뿐만 아니라 FCI와 연결된 친숙한 이름입니다. 이는 사용자 및 애플리케이션이 연결하는 데 사용하는 것입니다.<RGName>
는 리소스 그룹의 이름입니다.
sudo pcs resource
명령을 실행합니다. FCI가 온라인 상태여야 합니다.FCI의 DNS/리소스 이름을 사용하여 SSMS 또는 sqlcmd를 통해 FCI에 연결합니다.
SELECT @@SERVERNAME
문을 실행합니다. FCI의 이름이 반환됩니다.SELECT SERVERPROPERTY('ComputerNamePhysicalNetBIOS')
문을 실행합니다. FCI를 실행하는 노드의 이름이 반환됩니다.수동으로 FCI를 다른 노드로 장애 조치(failover)합니다. 장애 조치(failover) 클러스터 인스턴스 작동 - SQL Server on Linux 아래의 지침을 참조하세요.
마지막으로, FCI를 원래 노드로 장애 복구(failback)하고 공동 배치 제약 조건을 제거합니다.
요약
이 자습서에서는 다음 작업을 완료했습니다.
- Linux 설정 및 구성
- SQL Server 설치 및 구성
- hosts 파일 구성
- 공유 스토리지 구성 및 데이터베이스 파일 이동
- 각 클러스터 노드에 Pacemaker 설치 및 구성
- 장애 조치(failover) 클러스터 인스턴스 구성
관련 콘텐츠
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기