Share via


SQL Server on Linux에 대한 가용성 그룹 만들기 및 구성

적용 대상:SQL Server - Linux

이 자습서에서는 SQL Server on Linux용 AG(가용성 그룹)를 만들고 구성하는 방법을 설명합니다. SQL Server 2016(13.x) 및 이전 버전의 Windows와 달리 기본 Pacemaker 클러스터를 먼저 만들거나 만들지 않고 AG를 사용하도록 설정할 수 있습니다. 필요한 경우 클러스터와의 통합은 나중에 수행되지 않습니다.

이 자습서에는 다음 작업이 포함됩니다.

  • 가용성 그룹을 사용하도록 설정합니다.
  • 가용성 그룹 엔드포인트 및 인증서를 만듭니다.
  • SSMS(SQL Server Management Studio) 또는 Transact-SQL을 사용하여 가용성 그룹을 만듭니다.
  • Pacemaker에 대한 SQL Server 로그인 및 권한을 만듭니다.
  • Pacemaker 클러스터에서 가용성 그룹 리소스를 만듭니다(외부 형식에만 해당).

필수 조건

Linux의 SQLServer에 대한 Pacemaker 클러스터 배포에 설명된 대로 Pacemaker 고가용성 클러스터를 배포합니다.

가용성 그룹 기능 사용

Windows와 달리 PowerShell 또는 SQL Server 구성 관리자 사용하여 AG(가용성 그룹) 기능을 사용하도록 설정할 수 없습니다. Linux에서 기능을 사용하도록 설정하는 데 사용해야 mssql-conf 합니다. 가용성 그룹 기능을 사용하도록 설정하는 방법에는 유틸리티를 사용 mssql-conf 하거나 파일을 수동으로 편집하는 mssql.conf 두 가지 방법이 있습니다.

Important

SQL Server Express에서도 구성 전용 복제본(replica) AG 기능을 사용하도록 설정해야 합니다.

mssql-conf 유틸리티 사용

프롬프트에서 다음 명령을 실행합니다.

sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1

mssql.conf 파일 편집

폴더 아래에 /var/opt/mssql 있는 파일을 수정 mssql.conf 하여 다음 줄을 추가할 수도 있습니다.

[hadr]

hadr.hadrenabled = 1

SQL Server 다시 시작

Windows에서와 같이 가용성 그룹을 사용하도록 설정한 후 다음 명령을 사용하여 SQL Server를 다시 시작해야 합니다.

sudo systemctl restart mssql-server

가용성 그룹 엔드포인트 및 인증서 만들기

가용성 그룹은 통신에 TCP 엔드포인트를 사용합니다. Linux에서 AG에 대한 엔드포인트는 인증서가 인증에 사용되는 경우에만 지원됩니다. 동일한 AG에서 복제본(replica) 참여하는 다른 모든 인스턴스의 한 인스턴스에서 인증서를 복원해야 합니다. 구성 전용 복제본의 경우에도 인증서 프로세스가 필요합니다.

엔드포인트를 만들고 인증서를 복원하는 작업은 Transact-SQL을 통해서만 수행할 수 있습니다. SQL Server에서 생성되지 않은 인증서도 사용할 수 있습니다. 만료되는 인증서를 관리하고 교체하는 프로세스도 필요합니다.

Important

SQL Server Management Studio 마법사를 사용하여 AG를 만들려는 경우에도 Linux에서 Transact-SQL을 사용하여 인증서를 만들고 복원해야 합니다.

다양한 명령(보안 포함)에 사용할 수 있는 옵션에 대한 전체 구문은 다음을 참조하세요.

참고 항목

가용성 그룹을 만드는 중이지만 일부 기본 측면이 현재 사용되지 않는 기능과 공유되었으므로 엔드포인트 유형이 사용됩니다 FOR DATABASE_MIRRORING.

이 예제에서는 3노드 구성에 대한 인증서를 만듭니다. 인스턴스 이름은 LinAGN1, LinAGN2LinAGN3.

  1. 다음 스크립트 LinAGN1 를 실행하여 마스터 키, 인증서 및 엔드포인트를 만들고 인증서를 백업합니다. 이 예제에서는 5022의 일반적인 TCP 포트가 엔드포인트에 사용됩니다.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<StrongPassword>';
    GO
    
    CREATE CERTIFICATE LinAGN1_Cert
        WITH SUBJECT = 'LinAGN1 AG Certificate';
    GO
    
    BACKUP CERTIFICATE LinAGN1_Cert TO FILE = '/var/opt/mssql/data/LinAGN1_Cert.cer';
    GO
    
    CREATE ENDPOINT AGEP STATE = STARTED AS TCP (
        LISTENER_PORT = 5022,
        LISTENER_IP = ALL
    )
    FOR DATABASE_MIRRORING(AUTHENTICATION = CERTIFICATE LinAGN1_Cert, ROLE = ALL);
    GO
    
  2. 다음에서 동일한 작업을 수행합니다.LinAGN2

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<StrongPassword>';
    GO
    
    CREATE CERTIFICATE LinAGN2_Cert
    WITH SUBJECT = 'LinAGN2 AG Certificate';
    GO
    
    BACKUP CERTIFICATE LinAGN2_Cert
    TO FILE = '/var/opt/mssql/data/LinAGN2_Cert.cer';
    GO
    
    CREATE ENDPOINT AGEP
    STATE = STARTED
    AS TCP (
        LISTENER_PORT = 5022,
        LISTENER_IP = ALL)
    FOR DATABASE_MIRRORING (
        AUTHENTICATION = CERTIFICATE LinAGN2_Cert,
        ROLE = ALL);
    GO
    
  3. 마지막으로 다음에서 동일한 시퀀스를 수행합니다.LinAGN3

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<StrongPassword>';
    GO
    
    CREATE CERTIFICATE LinAGN3_Cert
        WITH SUBJECT = 'LinAGN3 AG Certificate';
    GO
    
    BACKUP CERTIFICATE LinAGN3_Cert TO FILE = '/var/opt/mssql/data/LinAGN3_Cert.cer';
    GO
    
    CREATE ENDPOINT AGEP STATE = STARTED AS TCP (
        LISTENER_PORT = 5022,
        LISTENER_IP = ALL
    )
    FOR DATABASE_MIRRORING(AUTHENTICATION = CERTIFICATE LinAGN3_Cert, ROLE = ALL);
    GO
    
  4. 또는 다른 유틸리티를 사용하여 scp AG의 일부가 될 각 노드에 인증서의 백업을 복사합니다.

    이 예제에서는 다음과 같이 복사합니다.

    • 다음으로 LinAGN2 복사 LinAGN1_Cert.cer 합니다.LinAGN3
    • 다음으로 LinAGN1 복사 LinAGN2_Cert.cer 합니다.LinAGN3
    • 다음으로 LinAGN1 복사 LinAGN3_Cert.cer 합니다.LinAGN2
  5. 복사한 인증서 파일과 연결된 소유권 및 그룹을 다음으로 변경합니다 mssql.

    sudo chown mssql:mssql <CertFileName>
    
  6. 에 연결된 LinAGN2LinAGN3 인스턴스 수준 로그인 및 사용자를 만듭니다 LinAGN1.

    CREATE LOGIN LinAGN2_Login WITH PASSWORD = '<StrongPassword>';
    CREATE USER LinAGN2_User FOR LOGIN LinAGN2_Login;
    GO
    
    CREATE LOGIN LinAGN3_Login WITH PASSWORD = '<StrongPassword>';
    CREATE USER LinAGN3_User FOR LOGIN LinAGN3_Login;
    GO
    
  7. 복원 LinAGN2_CertLinAGN3_Cert 켜기 LinAGN1 다른 복제본의 인증서를 유지하는 것이 AG 통신 및 보안의 중요한 측면입니다.

    CREATE CERTIFICATE LinAGN2_Cert AUTHORIZATION LinAGN2_User
    FROM FILE = '/var/opt/mssql/data/LinAGN2_Cert.cer';
    GO
    
    CREATE CERTIFICATE LinAGN3_Cert AUTHORIZATION LinAGN3_User
    FROM FILE = '/var/opt/mssql/data/LinAGN3_Cert.cer';
    GO
    
  8. 에 연결된 LinAG2 로그인 및 LinAGN3 엔드포인트에 연결할 수 있는 권한을 부여합니다 LinAGN1.

    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN2_Login;
    GO
    
    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN3_Login;
    GO
    
  9. 에 연결된 LinAGN1LinAGN3 인스턴스 수준 로그인 및 사용자를 만듭니다 LinAGN2.

    CREATE LOGIN LinAGN1_Login WITH PASSWORD = '<StrongPassword>';
    CREATE USER LinAGN1_User FOR LOGIN LinAGN1_Login;
    GO
    
    CREATE LOGIN LinAGN3_Login WITH PASSWORD = '<StrongPassword>';
    CREATE USER LinAGN3_User FOR LOGIN LinAGN3_Login;
    GO
    
  10. 복원 LinAGN1_CertLinAGN3_Cert 켜기 LinAGN2

    CREATE CERTIFICATE LinAGN1_Cert
    AUTHORIZATION LinAGN1_User
    FROM FILE = '/var/opt/mssql/data/LinAGN1_Cert.cer';
    GO
    
    CREATE CERTIFICATE LinAGN3_Cert
    AUTHORIZATION LinAGN3_User
    FROM FILE = '/var/opt/mssql/data/LinAGN3_Cert.cer';
    GO
    
  11. 에 연결된 LinAG1 로그인 및 LinAGN3 엔드포인트에 연결할 수 있는 권한을 부여합니다 LinAGN2.

    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN1_Login;
    GO
    
    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN3_Login;
    GO
    
  12. 에 연결된 LinAGN1LinAGN2 인스턴스 수준 로그인 및 사용자를 만듭니다 LinAGN3.

    CREATE LOGIN LinAGN1_Login WITH PASSWORD = '<StrongPassword>';
    CREATE USER LinAGN1_User FOR LOGIN LinAGN1_Login;
    GO
    
    CREATE LOGIN LinAGN2_Login WITH PASSWORD = '<StrongPassword>';
    CREATE USER LinAGN2_User FOR LOGIN LinAGN2_Login;
    GO
    
  13. 복원 LinAGN1_CertLinAGN2_Cert 켜기 LinAGN3

    CREATE CERTIFICATE LinAGN1_Cert
    AUTHORIZATION LinAGN1_User
    FROM FILE = '/var/opt/mssql/data/LinAGN1_Cert.cer';
    GO
    
    CREATE CERTIFICATE LinAGN2_Cert
    AUTHORIZATION LinAGN2_User
    FROM FILE = '/var/opt/mssql/data/LinAGN2_Cert.cer';
    GO
    
  14. 에 연결된 LinAG1 로그인 및 LinAGN2 엔드포인트에 연결할 수 있는 권한을 부여합니다 LinAGN3.

    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN1_Login;
    GO
    
    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN2_Login;
    GO
    

가용성 그룹 만들기

이 섹션에서는 SSMS(SQL Server Management Studio) 또는 Transact-SQL을 사용하여 SQL Server에 대한 가용성 그룹을 만드는 방법을 설명합니다.

SQL Server Management Studio 사용

이 섹션에서는 새 가용성 그룹 마법사에서 SSMS를 사용하여 외부 클러스터 형식의 AG를 만드는 방법을 보여 줍니다.

  1. SSMS에서 Always On 고가용성을 확장하고 가용성 그룹 을 마우스 오른쪽 단추로 클릭한 후 새 가용성 그룹 마법사를 선택합니다.

  2. 소개 페이지에서 다음을 선택합니다.

  3. 가용성 그룹 옵션 지정 대화 상자에서 가용성 그룹의 이름을 입력하고 드롭다운 목록에서 클러스터 유형을 EXTERNALNONE 선택합니다. Pacemaker를 배포할 때 외부를 사용해야 합니다. 읽기 스케일 아웃과 같은 특수 시나리오에는 해당되지 않습니다. 데이터베이스 수준 상태 검색 옵션을 선택하는 것은 선택 사항입니다. 이 옵션에 대한 자세한 내용은 가용성 그룹 데이터베이스 수준의 상태 검색 장애 조치(failover) 옵션을 참조하세요. 다음을 선택합니다.

    Screenshot of Create Availability Group showing cluster type.

  4. 데이터베이스 선택 대화 상자에서 AG에 참여할 데이터베이스를 선택합니다. 각 데이터베이스를 AG에 추가하려면 먼저 전체 백업이 있어야 합니다. 다음을 선택합니다.

  5. 복제본 지정 대화 상자에서 복제본 추가를 선택합니다.

  6. 서버로 커넥트 대화 상자에서 보조 복제본(replica) SQL Server의 Linux 인스턴스 이름과 연결할 자격 증명을 입력합니다. 연결을 선택합니다.

  7. 구성 전용 복제본 또는 다른 보조 복제본을 포함할 인스턴스에 대해 앞의 두 단계를 반복합니다.

  8. 이제 세 인스턴스가 모두 복제본 지정 대화 상자에 나열됩니다. 외부 클러스터 유형을 사용하는 경우 실제 보조 복제본(replica) 대한 가용성 모드가 주 복제본(replica) 일치하고 장애 조치(failover) 모드가 외부로 설정되어 있는지 확인합니다. 구성 전용 복제본의 경우 구성 전용 가용성 모드를 선택합니다.

    다음 예제에서는 두 개의 복제본(replica), 클러스터 유형 외부 및 구성 전용 복제본(replica) 있는 AG를 보여 줍니다.

    Screenshot of Create Availability Group showing the readable secondary option.

    다음 예제에서는 두 개의 복제본(replica), 클러스터 유형 없음 및 구성 전용 복제본(replica) 있는 AG를 보여 줍니다.

    Screenshot of Create Availability Group showing the Replicas page.

  9. 백업 기본 설정을 변경하려면 백업 기본 설정 탭을 선택합니다. AG를 사용한 백업 기본 설정에 대한 자세한 내용은 Always On 가용성 그룹의 보조 복제본(replica) 백업 구성을 참조하세요.

  10. 읽기 가능한 보조 데이터베이스를 사용하거나 읽기 확장에 대해 클러스터 유형이 없음인 AG를 만드는 경우 수신기 탭을 선택하여 수신기를 만들 수 있습니다. 수신기는 나중에 추가할 수도 있습니다. 수신기를 만들려면 가용성 그룹 수신기 만들기 옵션을 선택하고 이름, TCP/IP 포트 및 정적 또는 자동으로 할당된 DHCP IP 주소를 사용할지 여부를 입력합니다. 클러스터 유형이 없음인 AG의 경우 IP는 고정적이어야 하며 기본 IP 주소로 설정해야 합니다.

    Screenshot of Create Availability Group showing the listener option.

  11. 읽기 가능한 시나리오를 위해 수신기를 만든 경우 SSMS 17.3 이상에서는 마법사에서 읽기 전용 라우팅을 만들 수 있습니다. 나중에 SSMS 또는 Transact-SQL을 통해 추가할 수도 있습니다. 지금 읽기 전용 라우팅을 추가하려면 다음을 수행합니다.

    1. 읽기 전용 라우팅 탭을 선택합니다.

    2. 읽기 전용 복제본(replica) 대한 URL을 입력합니다. 이러한 URL은 엔드포인트가 아니라 인스턴스의 포트를 사용한다는 점을 제외하고 엔드포인트와 비슷합니다.

    3. 각 URL을 선택하고 아래쪽에서 읽을 수 있는 복제본(replica) 선택합니다. 여러 개를 선택하려면 Shift 키를 누른 채 선택하거나 선택하여 끕니다.

  12. 다음을 선택합니다.

  13. 보조 복제본(replica) 초기화하는 방법을 선택합니다. 기본값은 AG에 참여하는 모든 서버에서 동일한 경로가 필요한 자동 시드를 사용하는 것입니다. 마법사에서 백업, 복사 및 복원을 수행하게 할 수도 있습니다(두 번째 옵션). 복제본(replica) 데이터베이스를 수동으로 백업, 복사 및 복원한 경우 조인하거나(세 번째 옵션) 나중에 데이터베이스를 추가합니다(마지막 옵션). 인증서와 마찬가지로 수동으로 백업을 만들고 복사하는 경우 다른 복제본(replica) 백업 파일에 대한 권한을 설정해야 합니다. 다음을 선택합니다.

  14. 유효성 검사 대화 상자에서 모든 항목이 성공으로 돌아오지 않는 경우 조사합니다. 수신기를 만들지 않는 경우와 같이 일부 경고는 허용되며 치명적이지 않습니다. 다음을 선택합니다.

  15. 요약 페이지에서 마침을 선택합니다. 이제 AG를 만드는 프로세스가 시작됩니다.

  16. AG 만들기가 끝나면 결과에서 닫기를 선택합니다. 이제 동적 관리 뷰의 복제본(replica) 및 SSMS의 Always On 고가용성 폴더에서 AG를 볼 수 있습니다.

Transact-SQL 사용

이 섹션에서는 Transact-SQL을 사용하여 AG를 만드는 예제를 보여 줍니다. AG를 만든 후 수신기 및 읽기 전용 라우팅을 구성할 수 있습니다. AG 자체는 수정 ALTER AVAILABILITY GROUP할 수 있지만 클러스터 유형 변경은 SQL Server 2017(14.x)에서 수행할 수 없습니다. 클러스터 유형이 외부인 AG를 만들려는 것이 아니라면 해당 AG를 삭제하고 클러스터 유형이 없음으로 다시 만들어야 합니다. 자세한 내용 및 기타 옵션은 다음 링크에서 찾을 수 있습니다.

예제 A: 구성 전용 복제본(replica) 있는 두 복제본(replica)(외부 클러스터 유형)

이 예제에서는 구성 전용 복제본(replica) 사용하는 복제본(replica) AG를 만드는 방법을 보여줍니다.

  1. 데이터베이스의 전체 읽기/쓰기 복사본을 포함하는 기본 복제본(replica) 노드에서 실행합니다. 이 예제에서는 자동 시드를 사용합니다.

    CREATE AVAILABILITY GROUP [<AGName>]
    WITH (CLUSTER_TYPE = EXTERNAL)
    FOR DATABASE <DBName>
    REPLICA ON N'LinAGN1' WITH (
       ENDPOINT_URL = N' TCP://LinAGN1.FullyQualified.Name:5022',
       FAILOVER_MODE = EXTERNAL,
       AVAILABILITY_MODE = SYNCHRONOUS_COMMIT),
    N'LinAGN2' WITH (
       ENDPOINT_URL = N'TCP://LinAGN2.FullyQualified.Name:5022',
       FAILOVER_MODE = EXTERNAL,
       AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
       SEEDING_MODE = AUTOMATIC),
    N'LinAGN3' WITH (
       ENDPOINT_URL = N'TCP://LinAGN3.FullyQualified.Name:5022',
       AVAILABILITY_MODE = CONFIGURATION_ONLY);
    GO
    
  2. 다른 복제본에 연결된 쿼리 창에서 다음을 실행하여 AG에 복제본을 조인하고 주 복제본에서 보조 복제본으로의 시드 프로세스를 시작합니다.

    ALTER AVAILABILITY GROUP [<AGName>] JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    
    ALTER AVAILABILITY GROUP [<AGName>] GRANT CREATE ANY DATABASE;
    GO
    
  3. 복제본(replica) 구성에 연결된 쿼리 창에서 AG에 조인합니다.

    ALTER AVAILABILITY GROUP [<AGName>] JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    

예제 B: 읽기 전용 라우팅이 있는 3개의 복제본(replica)(외부 클러스터 유형)

이 예제에서는 세 가지 전체 복제본(replica) 및 초기 AG 만들기의 일부로 읽기 전용 라우팅을 구성할 수 있는 방법을 보여 줍니다.

  1. 데이터베이스의 전체 읽기/쓰기 복사본을 포함하는 기본 복제본(replica) 노드에서 실행합니다. 이 예제에서는 자동 시드를 사용합니다.

    CREATE AVAILABILITY GROUP [<AGName>] WITH (CLUSTER_TYPE = EXTERNAL)
    FOR DATABASE < DBName > REPLICA ON
        N'LinAGN1' WITH (
            ENDPOINT_URL = N'TCP://LinAGN1.FullyQualified.Name:5022',
            FAILOVER_MODE = EXTERNAL,
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
            PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = (
                (
                    'LinAGN2.FullyQualified.Name',
                    'LinAGN3.FullyQualified.Name'
                    )
                )),
            SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL, READ_ONLY_ROUTING_URL = N'TCP://LinAGN1.FullyQualified.Name:1433')
        ),
        N'LinAGN2' WITH (
            ENDPOINT_URL = N'TCP://LinAGN2.FullyQualified.Name:5022',
            FAILOVER_MODE = EXTERNAL,
            SEEDING_MODE = AUTOMATIC,
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
            PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = (
                (
                    'LinAGN1.FullyQualified.Name',
                    'LinAGN3.FullyQualified.Name'
                    )
                )),
            SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL, READ_ONLY_ROUTING_URL = N'TCP://LinAGN2.FullyQualified.Name:1433')
        ),
        N'LinAGN3' WITH (
            ENDPOINT_URL = N'TCP://LinAGN3.FullyQualified.Name:5022',
            FAILOVER_MODE = EXTERNAL,
            SEEDING_MODE = AUTOMATIC,
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
            PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = (
                (
                    'LinAGN1.FullyQualified.Name',
                    'LinAGN2.FullyQualified.Name'
                    )
                )),
            SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL, READ_ONLY_ROUTING_URL = N'TCP://LinAGN3.FullyQualified.Name:1433')
        )
        LISTENER '<ListenerName>' (
            WITH IP = ('<IPAddress>', '<SubnetMask>'), Port = 1433
        );
    GO
    

    이 구성에 대해 유의해야 할 몇 가지 사항은 다음과 같습니다.

    • AGName 는 가용성 그룹의 이름입니다.
    • DBName 는 가용성 그룹과 함께 사용되는 데이터베이스의 이름입니다. 쉼표로 구분된 이름 목록일 수도 있습니다.
    • ListenerName 은 기본 서버/노드와 다른 이름입니다. 와 함께 IPAddressDNS에 등록됩니다.
    • IPAddress 는 .와 연결된 ListenerNameIP 주소입니다. 또한 서버/노드와 동일하지 않고 고유합니다. 애플리케이션 및 최종 사용자는 AG를 ListenerName 사용하거나 IPAddress AG에 연결합니다.
    • SubnetMask 는 .의 서브넷 마스크입니다 IPAddress. SQL Server 2019(15.x) 및 이전 버전에서는 다음과 같습니다 255.255.255.255. SQL Server 2022(16.x) 이상 버전에서는 다음과 같습니다 0.0.0.0.
  2. 다른 복제본에 연결된 쿼리 창에서 다음을 실행하여 AG에 복제본을 조인하고 주 복제본에서 보조 복제본으로의 시드 프로세스를 시작합니다.

    ALTER AVAILABILITY GROUP [<AGName>] JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    
    ALTER AVAILABILITY GROUP [<AGName>] GRANT CREATE ANY DATABASE;
    GO
    
  3. 세 번째 복제본(replica) 대해 2단계를 반복합니다.

예제 C: 읽기 전용 라우팅이 있는 두 복제본(replica)(클러스터 유형 없음)

이 예제에서는 None의 클러스터 형식을 사용하여 2 복제본(replica) 구성을 만드는 방법을 보여줍니다. 장애 조치(failover)가 필요하지 않은 읽기 확장 시나리오에 사용됩니다. 이렇게 하면 라운드 로빈 기능을 사용하여 실제로 기본 복제본(replica) 수신기와 읽기 전용 라우팅이 만들어집니다.

  1. 데이터베이스의 전체 읽기/쓰기 복사본을 포함하는 기본 복제본(replica) 노드에서 실행합니다. 이 예제에서는 자동 시드를 사용합니다.
CREATE AVAILABILITY
GROUP [<AGName>]
WITH (CLUSTER_TYPE = NONE)
FOR DATABASE <DBName> REPLICA ON
    N'LinAGN1' WITH (
        ENDPOINT_URL = N'TCP://LinAGN1.FullyQualified.Name: <PortOfEndpoint>',
        FAILOVER_MODE = MANUAL,
        AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
        PRIMARY_ROLE(
            ALLOW_CONNECTIONS = READ_WRITE,
            READ_ONLY_ROUTING_LIST = (('LinAGN1.FullyQualified.Name'.'LinAGN2.FullyQualified.Name'))
        ),
        SECONDARY_ROLE(
            ALLOW_CONNECTIONS = ALL,
            READ_ONLY_ROUTING_URL = N'TCP://LinAGN1.FullyQualified.Name:<PortOfInstance>'
        )
    ),
    N'LinAGN2' WITH (
        ENDPOINT_URL = N'TCP://LinAGN2.FullyQualified.Name:<PortOfEndpoint>',
        FAILOVER_MODE = MANUAL,
        SEEDING_MODE = AUTOMATIC,
        AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
        PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = (
                 ('LinAGN1.FullyQualified.Name',
                    'LinAGN2.FullyQualified.Name')
                 )),
        SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL, READ_ONLY_ROUTING_URL = N'TCP://LinAGN2.FullyQualified.Name:<PortOfInstance>')
    ),
    LISTENER '<ListenerName>' (WITH IP = (
             '<PrimaryReplicaIPAddress>',
             '<SubnetMask>'),
            Port = <PortOfListener>
    );
GO

여기서

  • AGName 는 가용성 그룹의 이름입니다.
  • DBName 는 가용성 그룹과 함께 사용할 데이터베이스의 이름입니다. 쉼표로 구분된 이름 목록일 수도 있습니다.
  • PortOfEndpoint 는 만든 엔드포인트에서 사용하는 포트 번호입니다.
  • PortOfInstance 는 SQL Server 인스턴스에서 사용하는 포트 번호입니다.
  • ListenerName은 기본 복제본(replica)와 다르지만 실제로 사용되지 않는 이름입니다.
  • PrimaryReplicaIPAddress는 기본 복제본(replica) IP 주소입니다.
  • SubnetMask 는 .의 서브넷 마스크입니다 IPAddress. SQL Server 2019(15.x) 및 이전 버전에서는 다음과 같습니다 255.255.255.255. SQL Server 2022(16.x) 이상 버전에서는 다음과 같습니다 0.0.0.0.
  1. 보조 복제본(replica) AG에 조인하고 자동 시드를 시작합니다.

    ALTER AVAILABILITY GROUP [<AGName>] JOIN WITH (CLUSTER_TYPE = NONE);
    GO
    
    ALTER AVAILABILITY GROUP [<AGName>] GRANT CREATE ANY DATABASE;
    GO
    

Pacemaker에 대한 SQL Server 로그인 및 권한 만들기

Linux의 SQL Server를 기반으로 하는 Pacemaker 고가용성 클러스터는 SQL Server 인스턴스에 대한 액세스 권한과 가용성 그룹 자체에 대한 권한이 필요합니다. 이러한 단계는 로그인 및 관련 사용 권한과 함께 Pacemaker에 SQL Server에 로그인하는 방법을 알려주는 파일을 만듭니다.

  1. 첫 번째 복제본(replica) 연결된 쿼리 창에서 다음 스크립트를 실행합니다.

    CREATE LOGIN PMLogin WITH PASSWORD ='<StrongPassword>';
    GO
    
    GRANT VIEW SERVER STATE TO PMLogin;
    GO
    
    GRANT ALTER, CONTROL, VIEW DEFINITION ON AVAILABILITY GROUP::<AGThatWasCreated> TO PMLogin;
    GO
    
  2. 노드 1에서 다음 명령을 입력합니다.

    sudo emacs /var/opt/mssql/secrets/passwd
    

    그러면 Emacs 편집기가 열립니다.

  3. 편집기에 다음 두 줄을 입력합니다.

    PMLogin
    
    <StrongPassword>
    
  4. 키를 누른 Ctrl 다음 , 키를 누른 X다음 C파일을 종료하고 저장합니다.

  5. 실행

    sudo chmod 400 /var/opt/mssql/secrets/passwd
    

    파일을 잠급니다.

  6. 복제본(replica) 역할을 할 다른 서버에서 1-5단계를 반복합니다.

Pacemaker 클러스터에서 가용성 그룹 리소스를 만듭니다(외부만 해당).

SQL Server에서 가용성 그룹을 만든 후에는 클러스터 유형의 외부가 지정된 경우 Pacemaker에서 해당 리소스를 만들어야 합니다. AG와 연결된 리소스에는 AG 자체와 IP 주소라는 두 가지 리소스가 있습니다. 수신기 기능을 사용하지 않는 경우 IP 주소 리소스 구성은 선택 사항이지만 권장됩니다.

만든 AG 리소스는 복제본이라는 리소스의 유형입니다. AG 리소스에는 기본적으로 각 노드에 복사본이 있으며 마스터라는 하나의 제어 리소스가 있습니다. 마스터는 주 복제본을 호스트하는 서버와 연결됩니다. 다른 리소스는 보조 복제본(replica) 호스트하고(일반 또는 구성 전용) 장애 조치(failover)에서 마스터로 승격할 수 있습니다.

참고 항목

바이어스 없는 통신

이 문서에는 이 컨텍스트에서 사용될 때 Microsoft가 불쾌한 표현으로 간주하는 용어인 슬레이브 용어에 대한 참조가 포함되어 있습니다. 이 용어가 이 문서에 나타나는 이유는 현재 소프트웨어에 나타나기 때문입니다. 소프트웨어에서 이 용어가 제거되면 문서에서 제거할 것입니다.

  1. 다음 구문을 사용하여 AG 리소스를 만듭니다.

    sudo pcs resource create <NameForAGResource> ocf:mssql:ag ag_name=<AGName> meta failure-timeout=30s --master meta notify=true
    

    AG에 대해 이 클러스터 리소스에 지정된 고유한 이름은 어디에 NameForAGResource 있으며 AGName 생성된 AG의 이름입니다.

    RHEL 7.7 및 Ubuntu 18.04 이상 버전에서는 사용 --master과 함께 경고가 발생하거나 다음과 같은 sqlag_monitor_0 on ag1 'not configured' (6): call=6, status=complete, exitreason='Resource must be configured with notify=true'오류가 발생할 수 있습니다. 이 상황을 방지하려면 다음을 사용합니다.

    sudo pcs resource create <NameForAGResource> ocf:mssql:ag ag_name=<AGName> meta failure-timeout=30s master notify=true
    
  2. 수신기 기능과 연결될 AG에 대한 IP 주소 리소스를 만듭니다.

    sudo pcs resource create <NameForIPResource> ocf:heartbeat:IPaddr2 ip=<IPAddress> cidr_netmask=<Netmask>
    

    IP 리소스의 고유한 이름은 어디에 NameForIPResource 있으며 IPAddress 리소스에 할당된 고정 IP 주소입니다.

  3. IP 주소와 AG 리소스가 동일한 노드에서 실행되고 있는지 확인하려면 공동 배치 제약 조건을 구성해야 합니다.

    sudo pcs constraint colocation add <NameForIPResource> <NameForAGResource>-master INFINITY with-rsc-role=Master
    

    IP 리소스의 이름은 어디에 NameForIPResource 있으며 NameForAGResource AG 리소스의 이름입니다.

  4. AG 리소스가 IP 주소보다 먼저 가동 상태가 되도록 하려면 정렬 제약 조건을 만듭니다. 공동 배치 제약 조건은 정렬 제약 조건을 암시하지만 정렬 제약 조건이 적용됩니다.

    sudo pcs constraint order promote <NameForAGResource>-master then start <NameForIPResource>
    

    IP 리소스의 이름은 어디에 NameForIPResource 있으며 NameForAGResource AG 리소스의 이름입니다.

다음 단계

이 자습서에서는 SQL Server on Linux에 대한 가용성 그룹을 만들고 구성하는 방법을 알아보았습니다. 다음 방법에 대해 알아보았습니다.

  • 가용성 그룹을 사용하도록 설정합니다.
  • AG 엔드포인트 및 인증서를 만듭니다.
  • SSMS(SQL Server Management Studio) 또는 Transact-SQL을 사용하여 AG를 만듭니다.
  • Pacemaker에 대한 SQL Server 로그인 및 권한을 만듭니다.
  • Pacemaker 클러스터에서 AG 리소스를 만듭니다.

업그레이드 및 장애 조치(failover)를 비롯한 대부분의 AG 관리 작업에 대해서는 다음을 참조하세요.