SQL Server용 SLES 공유 디스크 클러스터 구성
적용 대상:SQL Server - Linux
이 가이드에서는 SLES(SUSE Linux Enterprise Server)에서 SQL Server용 2노드 클러스터를 만드는 방법을 설명합니다. 클러스터링 계층은 Pacemaker를 토대로 빌드된 SUSE HAE(고가용성 확장)를 기반으로 합니다.
클러스터 구성, 리소스 에이전트 옵션, 관리, 모범 사례 및 권장 사항에 대한 자세한 내용은 SUSE Linux Enterprise 고가용성 확장 12 SP5를 참조하세요.
필수 조건
다음 엔드투엔드 시나리오를 완료하려면 2노드 클러스터를 배포할 머신 2대와 NFS 공유 구성에 사용할 또 다른 서버가 필요합니다. 아래 단계에서는 이러한 서버를 구성하는 방법을 간략하게 설명합니다.
각 클러스터 노드에서 운영 체제 설정 및 구성
첫 번째 단계는 클러스터 노드에서 운영 체제를 구성하는 것입니다. 이 연습에서는 HA 추가 기능을 위한 유효한 구독이 있는 SLES를 사용합니다.
각 클러스터 노드에서 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
SQL Server
master
데이터베이스에sa
계정을 사용하여 연결한 후 다음을 실행합니다.USE [master] GO CREATE LOGIN [<loginName>] with PASSWORD= N'<password>' GRANT VIEW SERVER STATE TO <loginName>
주의
암호는 SQL Server 기본 암호 정책을 따라야 합니다. 기본적으로 암호는 8자 이상이어야 하며 대문자, 소문자, 0~9까지의 숫자 및 기호 네 가지 집합 중 세 집합의 문자를 포함해야 합니다. 암호 길이는 128자까지 가능하며 되도록 길고 복잡한 암호를 사용합니다.
주 노드에서 SQL Server를 중지하고 사용하지 않도록 설정합니다.
SUSE 설명서의 지침에 따라 각 클러스터 노드에 대한 호스트 파일을 구성하고 업데이트합니다. 파일에는
hosts
모든 클러스터 노드의 IP 주소와 이름이 포함되어야 합니다.현재 노드의 IP 주소를 확인하려면 다음을 실행합니다.
sudo ip addr show
각 노드에서 컴퓨터 이름을 설정합니다. 각 노드에 15자 이하의 고유 이름을 지정합니다.
/etc/hostname
를 사용하거나 수동으로 컴퓨터 이름을 에 추가하여 설정합니다.다음 예제에서는
/etc/hosts
에 두 노드SLES1
및SLES2
가 추가된 것을 보여줍니다.127.0.0.1 localhost 10.128.18.128 SLES1 10.128.16.77 SLES2
모든 클러스터 노드는 SSH를 통해 서로 액세스할 수 있어야 합니다.
hb_report
또는crm_report
(문제 해결용), Hawk의 History Explorer와 같은 도구에는 노드 간에 암호 없는 SSH 액세스가 필요합니다. 액세스 권한이 없으면 현재 노드에서만 데이터를 수집할 수 있습니다. 비표준 SSH 포트를 사용하는 경우 이 옵션을 사용합니다-X
(기타 요구 사항 및 권장 사항 참조). 예를 들어 SSH 포트가 3479인 경우 다음을 사용하여 호출합니다crm_report
.crm_report -X "-p 3479" [...]
자세한 내용은 관리 가이드를 참조하세요.
다음 섹션에서는 공유 스토리지를 구성하고 데이터베이스 파일을 해당 스토리지로 이동합니다.
공유 스토리지 구성 및 데이터베이스 파일 이동
공유 스토리지를 제공하는 다양한 솔루션이 있습니다. 이 연습에서는 NFS를 사용하여 공유 스토리지를 구성하는 방법을 보여 줍니다. 모범 사례를 따르고 Kerberos를 사용하여 NFS를 보호하는 것이 좋습니다.
이 지침을 따르지 않으면 네트워크에 액세스하고 SQL 노드의 IP 주소를 스푸핑할 수 있는 사용자는 누구나 데이터 파일에 액세스할 수 있습니다. 언제나처럼 시스템을 프로덕션 환경에서 사용하기 전에 시스템을 위협 모델링해야 합니다.
또 다른 스토리지 옵션은 다음과 같이 SMB 파일 공유를 사용하는 것입니다.
NFS 서버 구성
NFS 서버를 구성하려면 SUSE 설명서에서 NFS 서버 구성 단계를 참조하세요.
NFS 공유 스토리지에 연결하도록 모든 클러스터 노드 구성
공유 스토리지 위치를 가리키도록 SQL Server 데이터베이스 파일 경로를 탑재하도록 클라이언트 NFS를 구성하기 전에 나중에 공유에 복사할 수 있도록 데이터베이스 파일을 임시 위치에 저장해야 합니다.
주 노드에서만 데이터베이스 파일을 임시 위치에 저장합니다. 다음 스크립트는 새 임시 디렉터리를 만들고, 데이터베이스 파일을 새 디렉터리에 복사하고, 이전 데이터베이스 파일을 제거합니다. SQL Server가 로컬 사용자 mssql로 실행되므로 탑재된 공유로 데이터를 전송한 후 로컬 사용자에게 공유에 대한 읽기/쓰기 액세스 권한이 있는지 확인해야 합니다.
su mssql mkdir /var/opt/mssql/tmp cp /var/opt/mssql/data/* /var/opt/mssql/tmp rm /var/opt/mssql/data/* exit
모든 클러스터 노드에서 NFS 클라이언트를 구성합니다.
참고
고가용성 NFS 스토리지: DRBD 및 Pacemaker를 사용하는 고가용성 NFS 스토리지에 대한 SUSE의 모범 사례 및 권장 사항을 따라야 합니다.
SQL Server가 새 파일 경로를 사용하여 성공적으로 시작되는지 확인합니다. 각 노드에서 이를 수행합니다. 이때 한 번에 하나의 노드에서만 SQL Server를 실행해야 합니다. 두 노드 모두 동시에 데이터 파일에 액세스하려고 하기 때문에 동시에 실행할 수 없습니다(두 노드에서 실수로 SQL Server가 시작되지 않도록 하려면 파일 시스템 클러스터 리소스를 사용하여 서로 다른 노드에서 공유가 두 번 탑재되지 않도록 하세요). 다음 명령은 SQL Server를 시작하고 상태를 검사한 후 SQL Server를 중지합니다.
sudo systemctl start mssql-server sudo systemctl status mssql-server sudo systemctl stop mssql-server
이때 SQL Server의 두 인스턴스는 모두 공유 스토리지의 데이터베이스 파일과 함께 실행되도록 구성됩니다. 다음 단계는 Pacemaker에 대해 SQL Server를 구성하는 것입니다.
각 클러스터 노드에 Pacemaker 설치 및 구성
두 클러스터 노드에서 모두 Pacemaker 로그인을 위한 SQL Server 사용자 이름 및 암호를 저장할 파일을 만듭니다. 다음 명령은 이 파일을 만들고 채웁니다.
sudo touch /var/opt/mssql/secrets/passwd sudo echo '<loginName>' >> /var/opt/mssql/secrets/passwd sudo echo '<password>' >> /var/opt/mssql/secrets/passwd sudo chown root:root /var/opt/mssql/secrets/passwd sudo chmod 600 /var/opt/mssql/secrets/passwd
주의
암호는 SQL Server 기본 암호 정책을 따라야 합니다. 기본적으로 암호는 8자 이상이어야 하며 대문자, 소문자, 0~9까지의 숫자 및 기호 네 가지 집합 중 세 집합의 문자를 포함해야 합니다. 암호 길이는 128자까지 가능하며 되도록 길고 복잡한 암호를 사용합니다.
모든 클러스터 노드는 SSH를 통해 서로 액세스할 수 있어야 합니다. hb_report 또는 crm_report(문제 해결용), Hawk의 History Explorer와 같은 도구에는 노드 간에 암호 없는 SSH 액세스가 필요합니다. 액세스 권한이 없으면 현재 노드에서만 데이터를 수집할 수 있습니다. 표준이 아닌 SSH 포트를 사용하는 경우 -X 옵션을 사용합니다(기본 페이지 참조). 예를 들어 SSH 포트가 3479이면 다음을 사용하여 hb_report를 호출합니다.
crm_report -X "-p 3479" [...]
자세한 내용은 System Requirements and Recommendations in the SUSE documentation(SUSE 설명서의 시스템 요구 사항 및 권장 사항)을 참조하세요.
고가용성 익스텐션을 설치합니다. 익스텐션을 설치하려면 다음 SUSE 문서의 단계를 수행합니다.
Installation and Setup Quick Start(설치 및 설정 빠른 시작)
SQL Server용 FCI 리소스 에이전트를 설치합니다. 두 노드 모두에서 다음 명령을 실행합니다.
sudo zypper addrepo -fc https://packages.microsoft.com/config/sles/12/mssql-server-2017.repo sudo zypper --gpg-auto-import-keys refresh sudo zypper install mssql-server-ha
첫 번째 노드를 자동으로 설정합니다. 다음 단계는 첫 번째 노드인 SLES1을 구성하여 실행 중인 1노드 클러스터를 설정하는 것입니다. SUSE 문서 첫 번째 노드를 설정의 지침을 따르세요.
완료되면
crm status
를 사용하여 클러스터 상태를 확인합니다.crm status
하나의 노드인 SLES1이 구성되어 있음을 표시해야 합니다.
기존 클러스터에 노드를 추가합니다. 다음으로 클러스터에 SLES2 노드를 조인합니다. SUSE 문서 두 번째 노드 추가의 지침을 따르세요.
완료되면 crm status를 사용하여 클러스터 상태를 확인합니다. 두 번째 노드를 성공적으로 추가한 경우 출력이 다음과 같이 표시됩니다.
2 nodes configured 1 resource configured Online: [ SLES1 SLES2 ] Full list of resources: admin_addr (ocf::heartbeat:IPaddr2): Started SLES1
참고
admin_addr은 최초 1노드 클러스터 설정 중에 구성된 가상 IP 클러스터 리소스입니다.
제거 절차. 클러스터에서 노드를 제거해야 하는 경우 ha-cluster-remove 부트스트랩 스크립트를 사용합니다. 자세한 내용은 Overview of the Bootstrap Scripts(부트스트랩 스크립트 개요)를 참조하세요.
SQL Server의 클러스터 리소스 구성
다음 단계에서는 SQL Server의 클러스터 리소스를 구성하는 방법을 설명합니다. 사용자 지정해야 하는 두 가지 설정이 있습니다.
- SQL Server 리소스 이름: 클러스터된 SQL Server 리소스의 이름입니다.
-
시간 제한 값: 시간 제한 값은 리소스가 온라인 상태로 전환되는 동안 클러스터가 대기하는 시간입니다. SQL Server의 경우 SQL Server가
master
데이터베이스를 온라인 상태로 전환하는 데 걸리는 시간입니다.
사용자 환경에 맞게 다음 스크립트에서 값을 업데이트합니다. 한 노드에서 실행하여 클러스터된 서비스를 구성하고 시작합니다.
sudo crm configure
primitive <sqlServerResourceName> ocf:mssql:fci op start timeout=<timeout_in_seconds>
colocation <constraintName> inf: <virtualIPResourceName> <sqlServerResourceName>
show
commit
exit
예를 들어 다음 스크립트는 mssqlha
(이)라는 이름의 SQL Server 클러스터형 리소스를 만듭니다.
sudo crm configure
primitive mssqlha ocf:mssql:fci op start timeout=60s
colocation admin_addr_mssqlha inf: admin_addr mssqlha
show
commit
exit
구성이 커밋되면 SQL Server는 가상 IP 리소스와 동일한 노드에서 시작됩니다.
자세한 내용은 클러스터 리소스 구성 및 관리(명령줄)를 참조하세요.
SQL Server가 시작되었는지 확인
SQL Server가 시작되었는지 확인하려면 crm status 명령을 실행합니다.
crm status
다음 예시에서는 Pacemaker가 클러스터형 리소스로 성공적으로 시작된 경우의 결과를 보여 줍니다.
2 nodes configured
2 resources configured
Online: [ SLES1 SLES2 ]
Full list of resources:
admin_addr (ocf::heartbeat:IPaddr2): Started SLES1
mssqlha (ocf::mssql:fci): Started SLES1
클러스터 리소스 관리
클러스터 리소스를 관리하려면 다음 SUSE 문서, 클러스터 리소스 관리를 참조하세요.
수동 장애 조치
하드웨어 또는 소프트웨어 오류가 발생할 경우 리소스가 클러스터의 다른 노드로 자동으로 장애 조치(failover)(또는 마이그레이션)되도록 구성되어 있지만, Pacemaker GUI 또는 명령줄을 사용하여 수동으로 리소스를 클러스터의 다른 노드로 이동할 수도 있습니다.
이 태스크에 대한 마이그레이션 명령을 사용합니다. 예를 들어, SQL 리소스를 클러스터 노드 이름 SLES2로 마이그레이션하려면 다음을 실행합니다.
crm resource
migrate mssqlha SLES2