장애 조치 클러스터 인스턴스-Linux (RHEL)에서 SQL Server 구성Configure failover cluster instance - SQL Server on Linux (RHEL)

이 항목 적용 대상: 예(Linux에만 해당) SQL Server없습니다Azure SQL 데이터베이스없습니다Azure SQL 데이터 웨어하우스없는병렬 데이터 웨어하우스THIS TOPIC APPLIES TO: yesSQL Server (Linux only)noAzure SQL DatabasenoAzure SQL Data WarehousenoParallel Data Warehouse

SQL Server 공유 디스크 2 개 노드 장애 조치 클러스터 인스턴스의 가용성을 높이기 위한 서버 수준 중복을 제공합니다.A SQL Server two-node shared disk failover cluster instance provides server-level redundancy for high availability. 이 자습서에서는 Linux에서 SQL Server의 2 개 노드 장애 조치 클러스터 인스턴스를 만들려고 하는 방법에 설명 합니다.In this tutorial, you learn how to create a two-node failover cluster instance of SQL Server on Linux. 작업을 완성 하는 구체적인 단계는 다음과 같습니다.The specific steps that you will complete include:

  • 설정 및 Linux 구성Set up and configure Linux
  • SQL Server 설치 및 구성Install and configure SQL Server
  • 호스트 파일 구성Configure the hosts file
  • 공유 저장소를 구성 하 고 데이터베이스 파일 이동Configure shared storage and move the database files
  • 설치 하 고 각 클러스터 노드에서 Pacemaker 구성Install and configure Pacemaker on each cluster node
  • 장애 조치 클러스터 인스턴스 구성Configure the failover cluster instance

이 문서에서는 SQL Server에 대 한 공유 디스크 2 개 노드 장애 조치 클러스터 인스턴스 (FCI)를 만드는 방법을 설명 합니다.This article explains how to create a two-node shared disk failover cluster instance (FCI) for SQL Server. 문서는 Red Hat Enterprise Linux (RHEL)에 대 한 지침과 스크립트 예제 포함합니다.The article includes instructions and script examples for Red Hat Enterprise Linux (RHEL). 스크립트 예제는 일반적으로 하므로 Ubuntu 분포는 RHEL 비슷합니다 Ubuntu 에서도 작동 합니다.Ubuntu distributions are similar to RHEL so the script examples will normally also work on Ubuntu.

개념 정보를 참조 하십시오. SQL Server 장애 조치 클러스터 인스턴스 (FCI) linux합니다.For conceptual information, see SQL Server Failover Cluster Instance (FCI) on Linux.

필수 구성 요소Prerequisites

아래 종단 간 시나리오를 완료 하려면 두 노드 클러스터와 저장소에 대 한 다른 서버를 배포 하려면 두 컴퓨터 해야 합니다.To complete the end-to-end scenario below you need two machines to deploy the two nodes cluster and another server for storage. 아래 단계 이러한 서버는 구성 하는 방법에 대해 간략하게 설명 합니다.Below steps outline how these servers will be configured.

설정 및 Linux 구성Set up and configure Linux

클러스터 노드에서 운영 체제를 구성 하는 첫 번째 단계가입니다.The first step is to configure the operating system on the cluster nodes. 클러스터의 각 노드에서 linux 배포를 구성 합니다.On each node in the cluster, configure a linux distribution. 두 노드에서 모두 같은 배포 및 버전을 사용 합니다.Use the same distribution and version on both nodes. 하나 또는 다음 배포의 다른 사용 됩니다.Use either one or the other of the following distributions:

  • HA 추가 기능에 대 한 유효한 구독으로 RHELRHEL with a valid subscription for the HA add-on

SQL Server 설치 및 구성Install and configure SQL Server

  1. 설치 하 고 두 노드에서 모두 SQL Server를 설정 합니다.Install and set up SQL Server on both nodes. 자세한 내용은 참조 Linux에서 SQL Server 설치합니다.For detailed instructions see Install SQL Server on Linux.
  2. 주 서버와 구성의 목적을 위해 보조로 다른으로 노드 하나를 지정 합니다.Designate one node as primary and the other as secondary, for purposes of configuration. 다음에 대 한 이러한 용어를 사용 하 여이 가이드입니다.Use these terms for the following this guide.
  3. 보조 노드에서 중지 하 고 SQL Server를 사용 하지 않도록 설정 합니다.On the secondary node, stop and disable SQL Server. 다음 예제에서는 중지 하 고 SQL Server를 사용 하지 않도록 설정 합니다.The following example stops and disables SQL Server:

    sudo systemctl stop mssql-server
    sudo systemctl disable mssql-server
    

    참고

    시간 설정, 서버 마스터 키를 SQL Server 인스턴스에 대 한 생성 했으며에 var/opt/mssql/secrets/machine-key합니다.At set up time, a Server Master Key is generated for the SQL Server instance and placed at var/opt/mssql/secrets/machine-key. Linux에서 SQL Server는 항상 mssql 라는 로컬 계정으로 실행 됩니다.On Linux, SQL Server always runs as a local account called mssql. 로컬 계정을 이기 때문에 해당 id 노드 간에 공유 되지 않습니다.Because it’s a local account, its identity isn’t shared across nodes. 따라서 서버 마스터 키를 해독 하 여 각 로컬 mssql 계정에 액세스할 수 있도록 암호화 키를 주 노드에서 각 보조 노드로 복사 해야 합니다.Therefore, you need to copy the encryption key from primary node to each secondary node so each local mssql account can access it to decrypt the Server Master Key.

  4. 주 노드에서 Pacemaker에 대 한 SQL server 로그인을 만들고 실행에 로그인 권한을 부여 sp_server_diagnostics합니다.On the primary node, create a SQL server login for Pacemaker and grant the login permission to run sp_server_diagnostics. Pacemaker는 SQL Server를 실행 하는 노드를 확인 하려면이 계정을 사용 합니다.Pacemaker will use this account to verify which node is running SQL Server.

    sudo systemctl start mssql-server
    

    SQL Server에 연결 master sa 계정을 사용 하 여 데이터베이스에 있으며 다음 실행:Connect to the SQL Server master database with the sa account and run the following:

    USE [master]
    GO
    CREATE LOGIN [<loginName>] with PASSWORD= N'<loginPassword>'
    ALTER SERVER ROLE [sysadmin] ADD MEMBER [<loginName>]
    

    또는 더 세부적인 수준에서 권한을 설정할 수 있습니다.Alternatively, you can set the permissions at a more granular level. Pacemaker 로그인 필요 VIEW SERVER STATE sp_server_diagnostics와 쿼리 상태에 setupadminALTER ANY LINKED SERVER sp_dropserver 및 sp_addserver 실행 하 여 리소스 이름으로의 FCI 인스턴스 이름을 업데이트 합니다.The Pacemaker login requires VIEW SERVER STATE to query health status with sp_server_diagnostics, setupadmin and ALTER ANY LINKED SERVER to update the FCI instance name with the resource name by running sp_dropserver and sp_addserver.

  5. 주 노드에서 중지 하 고 SQL Server를 사용 하지 않도록 설정 합니다.On the primary node, stop and disable SQL Server.

호스트 파일 구성Configure the hosts file

각 클러스터 노드의 호스트 파일을 구성 합니다.On each cluster node, configure the hosts file. 호스트 파일은 IP 주소 및 모든 클러스터 노드의 이름이 포함 되어야 합니다.The hosts file must include the IP address and name of every cluster node.

  1. 각 노드에 대 한 IP 주소를 확인 합니다.Check the IP address for each node. 다음 스크립트는 현재 노드의의 IP 주소를 보여 줍니다.The following script shows the IP address of your current node.

    sudo ip addr show
    
  2. 각 노드에서 다음 컴퓨터 이름을 설정 합니다.Set the computer name on each node. 각 노드의 고유한 이름을 15 자 이하인 합니다.Give each node a unique name that is 15 characters or less. 컴퓨터 이름을 추가 하 여 설정 /etc/hosts합니다.Set the computer name by adding it to /etc/hosts. 다음 스크립트를 사용하면 /etc/hostsvi로 편집할 수 있습니다.The following script lets you edit /etc/hosts with vi.

    sudo vi /etc/hosts
    

    다음 예제와 /etc/hosts 라는 두 개의 노드에 대 한 추가 내용은 sqlfcivm1sqlfcivm2합니다.The following example shows /etc/hosts with additions for two nodes named sqlfcivm1 and sqlfcivm2.

    127.0.0.1   localhost localhost4 localhost4.localdomain4
    ::1       localhost localhost6 localhost6.localdomain6
    10.128.18.128 sqlfcivm1
    10.128.16.77 sqlfcivm2
    

저장소를 구성 및 데이터베이스 파일 이동Configure storage & move database files

두 노드에서 액세스할 수 있는 저장소를 제공 해야 합니다.You need to provide storage that both nodes can access. ISCSI, NFS 또는 SMB를 사용할 수 있습니다.You can use iSCSI, NFS, or SMB. 저장소 구성, 저장소는 클러스터 노드를 표시 하 고 새 저장소에 데이터베이스 파일을 이동 합니다.Configure storage, present the storage to the cluster nodes, and then move the database files to the new storage. 다음 문서에서는 각 저장소 형식에 대 한 단계를 설명합니다.The following articles explain the steps for each storage type:

설치 하 고 각 클러스터 노드에서 Pacemaker 구성Install and configure Pacemaker on each cluster node

  1. 두 클러스터 노드에서 모두 Pacemaker 로그인을 위한 SQL Server 사용자 이름 및 암호를 저장할 파일을 만듭니다.On both cluster nodes, create a file to store the SQL Server username and password for the Pacemaker login.

    다음 명령은 이 파일을 만들고 채웁니다.The following command creates and populates this file:

    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    
    
  2. 두 클러스터 노드에서 모두 Pacemaker 방화벽 포트를 엽니다.On both cluster nodes, open the Pacemaker firewall ports. firewalld를 사용하여 이러한 포트를 열려면 다음 명령을 실행합니다.To open these ports with firewalld, run the following command:

    sudo firewall-cmd --permanent --add-service=high-availability
    sudo firewall-cmd --reload
    

    기본 제공된 고가용성 구성이 없는 또 다른 방화벽을 사용 중인 경우 Pacemaker가 클러스터의 다른 노드와 통신할 수 있으려면 다음 포트를 열어야 합니다.If you’re using another firewall that doesn’t have a built-in high-availability configuration, the following ports need to be opened for Pacemaker to be able to communicate with other nodes in the cluster

    • TCP: 포트 2224, 3121, 21064TCP: Ports 2224, 3121, 21064
    • UDP: 포트 5405UDP: Port 5405
  3. 각 노드에 Pacemaker 패키지를 설치합니다.Install Pacemaker packages on each node.

    sudo yum install pacemaker pcs fence-agents-all resource-agents
    
  4. Pacemaker 및 Corosync 패키지를 설치할 때 생성된 기본 사용자의 암호를 설정합니다.Set the password for for the default user that is created when installing Pacemaker and Corosync packages. 두 노드에서 모두 같은 암호를 사용합니다.Use the same password on both nodes.

    sudo passwd hacluster
    
  5. pcsd 서비스 및 Pacemaker를 사용하도록 설정하고 시작합니다.Enable and start pcsd service and Pacemaker. 이렇게 하면 다시 시작된 후 노드가 클러스터에 다시 조인할 수 있습니다.This will allow nodes to rejoin the cluster after the reboot. 두 노드에서 모두 다음 명령을 실행합니다.Run the following command on both nodes.

    sudo systemctl enable pcsd
    sudo systemctl start pcsd
    sudo systemctl enable pacemaker
    
  6. SQL Server용 FCI 리소스 에이전트를 설치합니다.Install the FCI resource agent for SQL Server. 두 노드에서 모두 다음 명령을 실행합니다.Run the following commands on both nodes.

    sudo yum install mssql-server-ha
    

장애 조치 클러스터 인스턴스 구성Configure the failover cluster instance

FCI는 리소스 그룹에 생성 됩니다.The FCI will be created in a resource group. 이 리소스 그룹 제약 조건에 대 한 필요성을 줄여 줍니다. 때문에 좀 더 쉽습니다.This is a little bit easier since the resource group alleviates the need for constraints. 그러나 시작 해야 하는 순서로 리소스 그룹에 리소스를 추가 합니다.However, add the resources into the resource group in the order they should start. 시작 하는 순서는.The order they should start is:

  1. 저장소 리소스Storage resource
  2. 네트워크 리소스Network resource
  3. 응용 프로그램 리소스Application resource

이 예제에서는 NewLinFCIGrp 그룹에 FCI 만들어집니다.This example will create an FCI in the group NewLinFCIGrp. 리소스 그룹의 이름을 Pacemaker에서 만든 모든 리소스에서 고유 해야 합니다.The name of the resource group must be unique from any resource created in Pacemaker.

  1. 디스크 리소스를 만듭니다.Create the disk resource. 문제가 없는 경우에 다시 응답을 받습니다.You will get no response back if there is not a problem. 디스크 리소스를 만들 수 있는 방법은 저장소 형식에 따라 달라 집니다.The way to create the disk resource depends on the storage type. 다음은 각 저장소 형식에 대 한 예입니다.The following is an example for each storage type. 클러스터 된 저장소에 대 한 저장소 형식에 적용 되는 예제를 사용 합니다.Use the example that applies to the storage type for your clustered storage.

    iSCSIiSCSI

    sudo pcs resource create <iSCSIDiskResourceName> Filesystem device="/dev/<VolumeGroupName>/<LogicalVolumeName>" directory="<FolderToMountiSCSIDisk>" fstype="<FileSystemType>" --group RGName
    

    <iSCSIDIskResourceName > iSCSI 디스크와 연결 된 리소스의 이름<iSCSIDIskResourceName> is the name of the resource associated with the iSCSI disk

    <VolumeGroupName > 볼륨 그룹의 이름<VolumeGroupName> is the name of the volume group

    <LogicalVolumeName > 만든 논리 볼륨의 이름<LogicalVolumeName> is the name of the logical volume that was created

    <FolderToMountiSCSIDIsk > 디스크를 탑재 하는 폴더 (시스템 데이터베이스와 기본 위치에 대 한 것 /var/opt/mssql/data)<FolderToMountiSCSIDIsk> is the folder to mount the disk (for system databases and the default location, it would be /var/opt/mssql/data)

    <FileSystemType > 작업의 형식을 지정 된 방법 및 어떤 분포 지원에 따라 EXT4 또는 XFS 것입니다.<FileSystemType> would be EXT4 or XFS depending on how things were formatted and what the distribution supports.

    NFSNFS

    sudo pcs resource create <NFSDiskResourceName> Filesystem device="<IPAddressOfNFSServer>:<FolderOnNFSServer>" directory="<FolderToMountNFSShare>" fstype=nfs4 options=" nfsvers=4.2,timeo=14,intr" --group RGName
    mount -t nfs4 IPAddressOfNFSServer:FolderOnNFSServer /var/opt/mssql/data -o 
    

    <NFSDIskResourceName > NFS 공유와 연결 된 리소스의 이름<NFSDIskResourceName> is the name of the resource associated with the NFS share

    <IPAddressOfNFSServer >는 사용 하고자 하는 NFS 서버의 IP 주소<IPAddressOfNFSServer> is the IP address of the NFS server that you are going to use

    <FolderOnNFSServer > NFS 공유의 이름<FolderOnNFSServer> is the name of the NFS share

    <FolderToMountNFSShare > 디스크를 탑재 하는 폴더 (시스템 데이터베이스와 기본 위치에 대 한 것 /var/opt/mssql/data)<FolderToMountNFSShare> is the folder to mount the disk (for system databases and the default location, it would be /var/opt/mssql/data)

    예는 다음과 같습니다.An example is shown below:

    mount -t nfs4 200.201.202.63:/var/nfs/fci1 /var/opt/mssql/data -o nfsvers=4.2,timeo=14,intr
    

    SMBSMB

    sudo pcs resource create SMBDiskResourceName Filesystem device="//<ServerName>/<ShareName>" directory="<FolderName>" fstype=cifs options="vers=3.0,username=<UserName>,password=<Password>,domain=<ADDomain>,uid=<mssqlUID>,gid=<mssqlGID>,file_mode=0777,dir_mode=0777" --group <RGName>
    

    <서버 이름 >은 SMB 공유를 사용 하 여 서버 이름<ServerName> is the name of the server with the SMB share

    <공유 이름 > 공유의 이름<ShareName> is the name of the share

    <폴더 이름 > 마지막 단계에서 만든 폴더의 이름<FolderName> is the name of the folder created in the last step

    <사용자 이름 > 공유에 액세스 하려면 사용자의 이름<UserName> is the name of the user to access the share

    <암호 > 사용자에 대 한 암호<Password> is the password for the user

    <ADDomain >은 AD DS 도메인 (해당 하는 경우 Windows Server 기반 SMB 공유를 사용 하는 경우)<ADDomain> is the AD DS domain (if applicable when using a Windows Server-based SMB share)

    <mssqlUID > mssql 사용자 UID은<mssqlUID> is the UID of the mssql user

    <mssqlGID > mssql 사용자 GID은<mssqlGID> is the GID of the mssql user

    <RGName > 리소스 그룹의 이름<RGName> is the name of the resource group

  2. FCI에서 사용할 IP 주소를 만듭니다.Create the IP address that will be used by the FCI. 문제가 없는 경우에 다시 응답을 받습니다.You will get no response back if there is not a problem.

    sudo pcs resource create <IPResourceName> ocf:heartbeat:IPaddr2 ip=<IPAddress> nic=<NetworkCard> cidr_netmask=<NetMask> --group <RGName>
    

    <IPResourceName >은 IP 주소와 연결 된 리소스의 이름<IPResourceName> is the name of the resource associated with the IP address

    <Ip 주소 >은 FCI에 대 한 IP 주소<IPAddress> is the IP address for the FCI

    <NetworkCard > (예: eth0) 서브넷에 연결 된 네트워크 카드<NetworkCard> is the network card associated with the subnet (i.e. eth0)

    <네트워크 마스크 >은 서브넷 (즉, 24)의 네트워크 마스크<NetMask> is the netmask of the subnet (i.e. 24)

    <RGName > 리소스 그룹의 이름<RGName> is the name of the resource group

  3. FCI 리소스를 만듭니다.Create the FCI resource. 문제가 없는 경우에 다시 응답을 받습니다.You will get no response back if there is not a problem.

    sudo pcs resource create FCIResourceName ocf:mssql:fci op defaults timeout=60s --group RGName
    

    <FCIResourceName >는 리소스의 이름 뿐만 아니라 FCI와 연결 된 이름이 됩니다.<FCIResourceName> is not only the name of the resource, but the friendly name that is associated with the FCI. 어떤 사용자와 응용 프로그램이 연결 하기 위해 사용할입니다.This is what users and applications will use to connect.

    <RGName > 리소스 그룹의 이름입니다.<RGName> is the name of the resource group.

  4. 명령을 실행 sudo pcs resource합니다.Run the command sudo pcs resource. FCI는 온라인 상태 여야 합니다.The FCI should be online.

  5. SSMS 또는 sqlcmd FCI의 DNS/리소스 이름을 사용 하 여 FCI에 연결 합니다.Connect to the FCI with SSMS or sqlcmd using the DNS/resource name of the FCI.

  6. 문을 실행 SELECT @@SERVERNAME합니다.Issue the statement SELECT @@SERVERNAME. FCI의 이름을 반환 합니다.It should return the name of the FCI.

  7. 문을 실행 SELECT SERVERPROPERTY('ComputerNamePhysicalNetBIOS')합니다.Issue the statement SELECT SERVERPROPERTY('ComputerNamePhysicalNetBIOS'). FCI에서 실행 되는 노드의 이름을 반환 합니다.It should return the name of the node that the FCI is running on.

  8. FCI에 다른 노드를 수동으로 실패 합니다.Manually fail the FCI to the other node(s). 지침 참조 Operate 장애 조치 클러스터 인스턴스-Linux에서 SQL Server합니다.See the instructions under Operate failover cluster instance - SQL Server on Linux.

  9. 마지막으로 다시 원래 노드를 FCI 실패 하 고 공동 배치 제약 조건을 제거 합니다.Finally, fail the FCI back to the original node and remove the colocation constraint.

요약Summary

이 자습서에서는 다음 작업을 완료 합니다.In this tutorial you completed the following tasks.

  • 설정 및 Linux 구성Set up and configure Linux
  • SQL Server 설치 및 구성Install and configure SQL Server
  • 호스트 파일 구성Configure the hosts file
  • 공유 저장소를 구성 하 고 데이터베이스 파일 이동Configure shared storage and move the database files
  • 설치 하 고 각 클러스터 노드에서 Pacemaker 구성Install and configure Pacemaker on each cluster node
  • 장애 조치 클러스터 인스턴스 구성Configure the failover cluster instance

다음 단계Next steps