SQL Server에 대 한 SLES 공유 디스크 클러스터를 구성 합니다.Configure SLES shared disk cluster for SQL Server

이 항목은 다음에 적용됩니다. 아니요Windows의 SQL Server예Linux의 SQL Server아니요Azure SQL Database아니요Azure SQL Data Warehouse아니요병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO: noSQL Server on WindowsyesSQL Server on LinuxnoAzure SQL DatabasenoAzure SQL Data WarehousenoParallel Data Warehouse

이 가이드를 SQL Server SUSE Linux Enterprise Server (SLES)에 대 한 2 노드 공유 디스크 클러스터를 만드는 지침을 제공 합니다.This guide provides instructions to create a two-nodes shared disk cluster for SQL Server on SUSE Linux Enterprise Server (SLES). 클러스터링 레이어 SUSE 기반 높은 가용성 확장 (HAE) 기반으로 구축 Pacemaker합니다.The clustering layer is based on SUSE High Availability Extension (HAE) built on top of Pacemaker.

클러스터 구성, 리소스 에이전트 옵션, 관리, 모범 사례 및 권장 사항에 대 한 자세한 내용은 참조 하십시오. SUSE Linux Enterprise 높은 가용성 확장 12 SP2합니다.For more details on cluster configuration, resource agent options, management, best practices, and recommendations, see SUSE Linux Enterprise High Availability Extension 12 SP2.

필수 구성 요소Prerequisites

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

설정 하 고 각 클러스터 노드에서 운영 체제를 구성 합니다.Setup and configure the operating system on each cluster node

클러스터 노드에서 운영 체제를 구성 하는 첫 번째 단계가입니다.The first step is to configure the operating system on the cluster nodes. 이 연습 과정에 대 한 유효한 구독으로 SLES HA 추가 기능에 대해 사용 합니다.For this walk through, use SLES with a valid subscription for the HA add-on.

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

  1. 설치 하 고 SQL Server를 두 노드에 모두 설치 합니다.Install and setup 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/옵트인/mssql/보안/시스템 키에 배치 합니다.At setup 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
    

    'Sa' 계정으로 SQL Server 마스터 데이터베이스에 연결 하 고 다음을 실행 합니다.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>'
    GRANT VIEW SERVER STATE TO <loginName>
    
  5. 주 노드에서 중지 하 고 SQL Server를 사용 하지 않도록 설정 합니다.On the primary node, stop and disable SQL Server.
  6. 지침을 따르고 SUSE 설명서에서 를 구성 하 여 각 클러스터 노드에 대 한 호스트 파일을 업데이트 합니다.Follow the directions in the SUSE documentation to configure and update the hosts file for each cluster node. 호스트 파일에는 IP 주소 및 모든 클러스터 노드의 이름이 포함 되어야 합니다.The ‘hosts’ file must include the IP address and name of every cluster node.

    실행 하는 현재 노드에의 IP 주소를 확인 합니다.To check the IP address of the current node run:

    sudo ip addr show
    

    각 노드에서 다음 컴퓨터 이름을 설정 합니다.Set the computer name on each node. 각 노드의 고유한 이름을 15 자 이하인 합니다.Give each node a unique name that is 15 characters or less. 컴퓨터 이름을 추가 하 여 설정 /etc/hostname 를 사용 하 여 yast 또는 수동으로합니다.Set the computer name by adding it to /etc/hostname using yast or manually.

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

    127.0.0.1   localhost
    10.128.18.128 SLES1
    10.128.16.77 SLES2
    

    참고

    모든 클러스터 노드에 SSH를 통해 서로 액세스할 수 있어야 합니다.All cluster nodes must be able to access each other via SSH. hb_report 또는 crm_report(문제 해결용), Hawk의 History Explorer 등의 도구에는 노드 간에 암호 없는 SSH 액세스가 필요합니다. 그렇지 않으면 현재 노드에서만 데이터를 수집할 수 있습니다.Tools like hb_report or crm_report (for troubleshooting) and Hawk's History Explorer require passwordless SSH access between the nodes, otherwise they can only collect data from the current node. -X 옵션을 사용 하는 비표준 SSH 포트를 사용 하는 경우 (매뉴얼 페이지를 참조).In case you use a non-standard SSH port, use the -X option (see man page). 예를 들어 SSH 포트가 3479 이면와 crm_report를 호출 합니다.For example, if your SSH port is 3479, invoke an crm_report with:

    crm_report -X "-p 3479" [...]
    

    자세한 내용은 [관리 가이드에서]를 참조 하세요. (https://www.suse.com/documentation/sle-ha-12/singlehtml/book_sleha/book_sleha.html#sec.ha.troubleshooting.misc)For more information, see [the Administration Guide].(https://www.suse.com/documentation/sle-ha-12/singlehtml/book_sleha/book_sleha.html#sec.ha.troubleshooting.misc)

다음 섹션에서 공유 저장소를 구성 하 고 해당 저장소에 데이터베이스 파일 이동 합니다.In the next section you will configure shared storage and move your database files to that storage.

공유 저장소를 구성 하 고 데이터베이스 파일 이동Configure shared storage and move database files

공유 저장소를 제공 하는 솔루션의 여러 가지가 있습니다.There are a variety of solutions for providing shared storage. 이 연습이 NFS를 사용 하 여 공유 저장소를 구성 하는 방법을 보여 줍니다.This walk-through demonstrates configuring shared storage with NFS. 모범 사례를 따르고 NFS를 보호 하기 위해 Kerberos를 사용 하려면이 좋습니다.We recommend to follow best practices and use Kerberos to secure NFS:

이 지침을 준수 하지 않는 경우 데이터 파일에 액세스할 수 SQL 노드의 IP 주소를 스푸핑 하 고 네트워크에 액세스할 수 있는 모든 사용자.If you do not follow this guidance, anyone who can access your network and spoof the IP address of a SQL node will be able to access your data files. 늘 그렇듯이 위협을 하면 프로덕션 환경에서 사용 하기 전에 시스템을 모델링 해야 합니다.As always, make sure you threat model your system before using it in production.

또 다른 저장소 옵션 SMB 파일 공유를 사용 하는 것입니다.Another storage option is to use SMB file share:

NFS 서버 구성Configure an NFS server

NFS 서버를 구성 하려면 SUSE 설명서에서 다음 단계를 참조: NFS 서버 구성합니다.To configure an NFS server, refer to the following steps in the SUSE documentation: Configuring NFS Server.

NFS 공유 저장소에 연결 하려면 모든 클러스터 노드 구성Configure all cluster nodes to connect to the NFS shared storage

SQL Server 데이터베이스 파일 경로 탑재 하도록 NFS를 공유 저장소 위치를 가리키도록 클라이언트를 구성 하기 전에 임시 위치로 복사할 나중에 공유 하려면 데이터베이스 파일을 저장 해야 합니다.Before configuring the client NFS to mount the SQL Server database files path to point to the shared storage location, make sure you save the database files to a temporary location to be able to copy them later on the share:

  1. 주 노드의, 데이터베이스 파일을 임시 위치에 저장 합니다.On the primary node only, save the database files to a temporary location. 다음 스크립트에서는 새로운 임시 디렉터리를 만듭니다 하 고, 데이터베이스 파일을 새 디렉터리를 복사, 오래 된 데이터베이스 파일을 제거 합니다.The following script, creates a new temporary directory, copies the database files to the new directory, and removes the old database files. SQL Server mssql 로컬 사용자로 실행 되는 탑재 된 공유에 데이터 전송, 후 로컬 사용자가 공유에 대 한 읽기 / 쓰기 액세스 있는지 확인 해야 합니다.As SQL Server runs as local user mssql, you need to make sure that after data transfer to the mounted share, local user has read-write access to the share.

    su mssql
    mkdir /var/opt/mssql/tmp
    cp /var/opt/mssql/data/* /var/opt/mssql/tmp
    rm /var/opt/mssql/data/*
    exit
    

    모든 클러스터 노드에서 NFS 클라이언트를 구성 합니다.Configure the NFS client on all cluster nodes:

  2. SQL Server 새 파일 경로에 성공적으로 시작을 확인 합니다.Validate that SQL Server starts successfully with the new file path. 각 노드에서이 작업을 수행 합니다.Do this on each node. 이 시점에서 한 번에 하나의 노드만 SQL Server를 실행 해야 합니다.At this point only one node should run SQL Server at a time. 실행할 수 없습니다 둘 다 동시에는 둘 다 동시에 (을 방지 하려면 실수로 두 노드에서 모두 SQL Server를 시작 하는 파일 시스템 클러스터 리소스를 사용 하 여 공유의 다른 노드에 의해 두 번 탑재 되어 있지 않으면 되도록) 데이터 파일에 액세스 하려면 시도 하기 때문에.They cannot both run at the same time because they will both try to access the data files simultaneously (to avoid accidentally starting SQL Server on both nodes, use a File System cluster resource to make sure the share is not mounted twice by the different nodes). 다음 명령을 SQL Server를 시작 하 고 상태를 확인 한 다음 SQL Server를 중지 합니다.The following commands start SQL Server, check the status, and then stop SQL Server.

    sudo systemctl start mssql-server
    sudo systemctl status mssql-server
    sudo systemctl stop mssql-server
    

이 시점에서 SQL Server의 두 인스턴스는 공유 저장소에 있는 데이터베이스 파일을 사용 하 여 실행 하도록 구성 됩니다.At this point both instances of SQL Server are configured to run with the database files on the shared storage. 다음 단계 Pacemaker에 대 한 SQL Server를 구성 하는 것입니다.The next step is to configure SQL Server for Pacemaker.

설치 하 고 각 클러스터 노드에서 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. 모든 클러스터 노드는 SSH를 통해 서로 액세스할 수 있어야 합니다.All cluster nodes must be able to access each other via SSH. hb_report 또는 crm_report(문제 해결용), Hawk의 History Explorer 등의 도구에는 노드 간에 암호 없는 SSH 액세스가 필요합니다. 그렇지 않으면 현재 노드에서만 데이터를 수집할 수 있습니다.Tools like hb_report or crm_report (for troubleshooting) and Hawk's History Explorer require passwordless SSH access between the nodes, otherwise they can only collect data from the current node. 표준이 아닌 SSH 포트를 사용할 경우 -X 옵션을 사용합니다(기본 페이지 참조).In case you use a non-standard SSH port, use the -X option (see man page). 예를 들어 SSH 포트가 3479이면 함께 hb_report를 호출합니다.For example, if your SSH port is 3479, invoke an hb_report with:

    crm_report -X "-p 3479" [...]
    

    자세한 내용은 System Requirements and Recommendations in the SUSE documentation(SUSE 설명서의 시스템 요구 사항 및 권장 사항)을 참조하세요.For more information, see System Requirements and Recommendations in the SUSE documentation.

  3. 고가용성 확장을 설치합니다.Install the High Availability extension. 확장을 설치하려면 다음 SUSE 항목의 단계를 따릅니다.To install the extension, follow the steps in the following SUSE topic:

    Installation and Setup Quick Start(설치 및 설정 빠른 시작)Installation and Setup Quick Start

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

    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
    
  5. 첫 번째 노드를 자동으로 설정합니다.Automatically set up the first node. 다음 단계에서는 첫 번째 노드 SLES1을 구성하여 실행 중인 단일 노드 클러스터를 설정합니다.The next step is to setup a running one-node cluster by configuring the first node, SLES1. SUSE 항목 Setting Up the First Node(첫 번째 노드 설정)의 지침을 따릅니다.Follow the instructions in the SUSE topic, Setting Up the First Node.

    완료되면 crm status를 사용하여 클러스터 상태를 확인합니다.When finished, check the cluster status with crm status:

    crm status
    

    단일 노드 SLES1이 구성된 것으로 표시됩니다.It should show that one node, SLES1, is configured.

  6. 기존 클러스터에 노드를 추가합니다.Add nodes to an existing cluster. 그 다음에 SLES2 노드를 클러스터에 조인합니다.Next join the SLES2 node to the cluster. SUSE 항목 Adding the Second Node(두 번째 노드 추가)의 지침을 따릅니다.Follow the instructions in the SUSE topic, Adding the Second Node.

    완료되면 crm status를 사용하여 클러스터 상태를 확인합니다.When finished, check the cluster status with crm status. 두 번째 노드를 성공적으로 추가한 경우 출력이 다음과 같이 표시됩니다.If you have successfully added a second node, the output will be similar to the following:

    2 nodes configured
    1 resource configured
    Online: [ SLES1 SLES2 ]
    Full list of resources:
    admin_addr     (ocf::heartbeat:IPaddr2):       Started SLES1
    

    참고

    admin_addr는 초기 단일 노드 클러스터 설정 중에 구성된 가상 IP 클러스터 리소스입니다.admin_addr is the virtual IP cluster resource which is configured during initial one-node cluster setup.

  7. 제거 절차.Removal procedures. 클러스터에서 노드를 제거해야 할 경우 ha-cluster-remove 부트스트랩 스크립트를 사용합니다.If you need to remove a node from the cluster, use the ha-cluster-remove bootstrap script. 자세한 내용은 Overview of the Bootstrap Scripts(부트스트랩 스크립트 개요)를 참조하세요.For more information, see Overview of the Bootstrap Scripts.

SQL Server에 대 한 클러스터 리소스를 구성 합니다.Configure the cluster resources for SQL Server

다음 단계에서는 SQL Server에 대 한 클러스터 리소스를 구성 하는 방법에 설명 합니다.The following steps explain how to configure the cluster resource for SQL Server. 사용자 지정 하는 두 가지 설정이 있습니다.There are two settings that you need to customize.

  • SQL Server 리소스 이름: 클러스터 된 SQL Server 리소스에 대 한 이름입니다.SQL Server Resource Name: A name for the clustered SQL Server resource.
  • 제한 시간 값: 시간 제한 값은 클러스터 된 리소스가 온라인 상태가 되는 동안 대기 하는 시간입니다.Timeout Value: The timeout value is the amount of time that the cluster waits while a resource is brought online. SQL Server 하기 위해 수행할 수 있어야 하는 경우 SQL server는 master 데이터베이스를 온라인 상태로 있습니다.For SQL Server, this is the time that you expect SQL Server to take to bring the master database online.

사용자 환경에 대 한 아래의 스크립트에서 값을 업데이트 합니다.Update the values from the script below for your environment. 구성 및 클러스터 된 서비스를 시작 하는 노드 하나에서 실행 합니다.Run on one node to configure and start the clustered service.

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에서 클러스터 된 리소스를 만듭니다.For example, the following script creates a SQL Server clustered resource named mssqlha.

sudo crm configure
primitive mssqlha ocf:mssql:fci op start timeout=60s
colocation admin_addr_mssqlha inf: admin_addr mssqlha
show
commit
exit

구성이 커밋된 후 가상 IP 리소스와 동일한 노드에서 SQL Server가 시작 됩니다.After the configuration is committed, SQL Server will start on the same node as the virtual IP resource.

자세한 내용은 참조 구성 및 관리 클러스터 리소스 (명령줄)합니다.For more information, see Configuring and Managing Cluster Resources (Command Line).

SQL Server가 시작 되었는지 확인 합니다.Verify that SQL Server is started.

SQL Server 시작 되어 있는지를 확인 하려면 실행는 crm 상태 명령:To verify that SQL Server is started, run the crm status command:

crm status

다음 예에서는 클러스터형 리소스로 Pacemaker가 성공적으로 시작 하는 경우 결과 보여줍니다.The following examples shows the results when Pacemaker has successfully started as clustered resource.

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

클러스터 리소스 관리Managing cluster resources

클러스터 리소스를 관리 하려면 다음 SUSE 항목을 참조: 클러스터 리소스 관리To manage your cluster resources, refer to the following SUSE topic: Managing Cluster Resources

수동 장애 조치(Failover)Manual failover

자동으로 장애 조치 (또는 마이그레이션)을 하드웨어 또는 소프트웨어 오류가 발생할 경우 클러스터의 다른 노드로 구성 된 리소스가 있지만 Pacemaker GUI 또는 명령줄을 사용 하는 클러스터의 다른 노드로 리소스를 직접 이동할 수 있습니다.Although resources are configured to automatically fail over (or migrate) to other nodes of the cluster in the event of a hardware or software failure, you can also manually move a resource to another node in the cluster using either the Pacemaker GUI or the command line.

이 작업에 대 한 마이그레이션 명령을 사용 합니다.Use the migrate command for this task. 예를 들어 마이그레이션할 SQL 리소스 클러스터 노드 이름 SLES2 실행 합니다.For example, to migrate the SQL resource to a cluster node names SLES2 execute:

crm resource
migrate mssqlha SLES2

추가 리소스Additional resources

SUSE Linux Enterprise 고가용성 확장-관리 가이드SUSE Linux Enterprise High Availability Extension - Administration Guide