Amazon Web Services 한국 블로그

Amazon Linux 2 및 Ubuntu 기반 SQL Server 2017 구성 방법

Microsoft SQL Server를 AWS에 배포하는 경우 다양한 방법을 통해 애플리케이션의 성능, 가용성, 안정성 및 비용을 최적화할 수 있습니다. Amazon은 여러 SQL Server 버전, 광범위한 컴퓨팅 옵션 및 수많은 라이선스 옵션을 제공하여 사용량을 최적화하고 비용을 절감할 수 있도록 돕습니다. 또한, 사용량 기반 지불(pay-as-you-go) 모델을 선택 후  AWS 라이선스 포함 옵션을 사용하거나 Amazon EC2에서 BYOL(Bring Your Own License)를 선택할 수 있습니다.

EC2 인스턴스에서 SQL Server 2017을 사용할 수 있으며, Amazon EC2를 실행하는 Microsoft Windows 또는 Linux 운영 체제에서 SQL Server 기반 애플리케이션을 유연하게 배포할 수 있습니다. 얼마전 SQL 서버 라이선스 포함 AMI를 새로 제공하면서 Amazon Linux 2 및 Ubuntu 기반 Microsoft SQL Server에 대한 지원을 발표했습니다. 이를 통해 EC2 콘솔에서 직접 라이선스가 포함된 AMI를 사용하여 Amazon Linux 2 LTS Candidate 및 Ubuntu 16.04(HVM) 인스턴스에서 온디맨드로 SQL Server 2017을 시작할 수 있습니다. AMI는 SQL Server Web Edition, SQL Server Express Edition, SQL Server Standard Edition 및 SQL Server Enterprise Edition의 4개 에디션 모두에서 사용할 수 있습니다.

이 블로그 게시물에서는 기존의 Windows 기반 구성과 새로운 Linux SQL Server 설치 간의 관리 차이점에 대해 설명합니다. 또한 Amazon EC2 기반 Linux AMI에서 실행되는 SQL Server를 구성하는 과정에 대해서도 안내합니다.

여기서 설치하는 SQL Server 인스턴스에 연결할 워크스테이션을 VPC에 구성한 것으로 가정합니다. 이 워크스테이션에서는 SSMS(SQL Server Management Studio)를 사용하는 것이 좋습니다. 이 사이트에서 SSMS 비트를 다운로드할 수 있습니다.

Linux 및 Windows 기반 SQL Server 구성의 차이점

Linux에서 실행되는 SQL Server는 Windows에서 실행되는 SQL Server와 다른 방식으로 구성됩니다. 기존의 Windows 환경에서는 SQL Server 구성 관리자를 사용하여 SQL Server 서비스, TCP 포트, 시작 파라미터 또는 다른 모든 인스턴스 레벨 구성 항목에 대한 변경을 관리합니다.

Linux 기반 SQL Server 워크로드의 경우 Microsoft가 만든 구성 스크립트인 mssql-conf를 사용합니다. mssql-conf 스크립트는 기본 데이터 및 로그 파일 위치, TCP 포트 등의 항목에 대한 파라미터를 설정하는 데 사용됩니다.

다음과 같이 구성 과정을 시작하겠습니다.

시작하기 전에

시작하기 전에 몇 가지 설정 작업을 수행해야 합니다.

  1. SQL Server를 실행하는 Linux EC2 인스턴스에 연결한 후 다음 명령을 실행하여 루트 사용자 계정으로 명령을 실행할 수 있도록 합니다.
    sudo su

    Linux 인스턴스에 추가된 볼륨 및 디바이스를 보려면 lsblk 명령을 실행하여 시작 중에 연결한 모든 Amazon EBS 볼륨의 목록을 표시합니다.

    모든 Amazon EBS 볼륨의 목록을 가져오는 lsblk 명령의 스크린샷

  2. 이 AMI에는 SQL Server 2017이 포함되므로 SQL Server 인스턴스의 SA 암호를 재설정해야 합니다. 이 작업을 수행하려면 먼저 다음 명령을 사용하여 SQL Server 인스턴스를 중지합니다.
    sudo systemctl stop mssql-server

    다음 mssql-conf 스크립트를 실행하여 SA 암호를 재설정합니다.

    sudo /opt/mssql/bin/mssql-conf set-sa-password

1. 대상 디렉터리 생성 및 기본 디렉터리 변경

모범 사례로, 해당 SQL Server 인스턴스의 로그 파일과 데이터 파일을 격리하는 것을 권장합니다. 기본 디렉터리 위치를 변경하려면 먼저 새로운 데이터베이스 데이터 및 로그 파일에 대한 대상 디렉터리를 생성해야 합니다.

다음 단계는 이름이 /SQLServerData인 새 디렉터리를 생성합니다. 그러나 이 작업을 수행하기 전에 파일 시스템을 포맷하고, 디렉터리를 생성하고, 해당 디렉터리를 디바이스(볼륨)에 탑재해야 합니다.

  1. 다음 명령을 사용하여 ext4 파일 시스템을 사용하도록 원하는 볼륨을 포맷합니다.
    sudo mkfs –t ext4 /dev/devicename

    예를 들면 다음과 같습니다. sudo mkfs -t ext4 /dev/xvdc

  2. 디렉터리를 생성합니다. 이 예제에서는 /SQLServerData를 사용합니다.
    sudo mkdir /SQLServerData
  3. 볼륨을 /SQLServerData 디렉터리에 탑재합니다. 다음 명령(이 예제에서는 /dev/xvdc 볼륨을 사용함)을 사용합니다.
    sudo mount /dev/xvdc /SQLServerData
  4. 디렉터리 소유자 및 그룹을 mssql 사용자로 변경합니다.
    sudo chown mssql /SQLServerData sudo chgrp mssql /SQLServerData

    위의 단계들을 완료한 뒤, 이제 설정 명령을 사용하여 기본 데이터 디렉터리를 변경할 수 있습니다. 이 filelocation.defaultdatadirfilelocation.defaultlogdir 설정은 새 데이터베이스 및 로그 파일이 생성되는 위치를 변경합니다. 기본적으로 이 위치는 /var/opt/mssql/data입니다.

  5. 설정을 변경하려면 다음 단계(이 예제에서는 /SQLServerData를 기본 데이터 디렉터리로 사용함)를 수행합니다.
    sudo /opt/mssql/bin/mssql-conf set filelocation.defaultdatadir /SQLServerData

    위의 단계를 완료한 후 SQL Server를 다시 시작하여 새로운 설정을 적용해야 합니다. 그 전에 데이터베이스 로그 파일을 위한 디렉터리에 다른 볼륨을 탑재해야 합니다.

  6. 다음 명령을 실행하여 인스턴스에 연결된 디스크를 나열합니다.
    lsblk

    스크린샷을 보시면 /dev/xvdc/SQLServerData 탑재 지점임을 확인할 수 있습니다. 기본 로그 디렉터리에 대한 탑재 지점설정 또한 위의 과정들과 유사합니다.

  7. ext4 파일 시스템을 사용하도록 볼륨(이 예제에서는 xvdd 볼륨이 사용됨)을 포맷합니다.
    sudo mkfs -t ext4 /dev/xvdd
  8. 새 ext4 볼륨을 탑재할 디렉터리(이 예제에서는 /SQLServerLog를 새 디렉터리 이름으로 사용함)를 생성합니다.
    sudo mkdir /SQLServerLog

2. 볼륨 탑재 및 기본 로그 디렉터리 설정

이제 디렉터리가 생성되었으니 새 디렉터리에 원하는 볼륨을 탑재합니다.

  1. 다음 명령을 사용하여 볼륨(이 예제에서는 /dev/xvdd 볼륨을 사용함)을 탑재합니다.
    sudo mount /dev/xvdd /SQLServerLog
  2. 볼륨을 탑재한 후 디렉터리의 소유자 및 그룹을 mssql 사용자로 변경합니다.
    sudo chown mssql /SQLServerLog
    sudo chgrp mssql /SQLServerLog

    디렉터리를 생성하고 볼륨을 탑재했으니 이제 두 개의 위치가 만들어졌습니다. 한 디렉터리는 데이터베이스 데이터 파일을 위한 것이고, 다른 디렉터리는 데이터베이스 로그 파일을 위한 것입니다.

  3. 블록 디바이스를 나열하여 현재 탑재 지점을 보려면 lsblk 명령을 실행합니다.lsblk 명령 출력의 스크린샷스크린샷을 보시면 데이터베이스 데이터와 로그 파일에 대한 두 개의 탑재 지점이 있는 것을 볼 수 있습니다.
  4. 이제 로그 파일에 대한 디렉터리가 있으니 mssql-conf 스크립트를 사용하여 SQL Server 인스턴스에 기본 로그 디렉터리를 설정할 수 있습니다. 다음 명령을 실행하여 이 작업을 수행합니다.
    sudo /opt/mssql/bin/mssql-conf set filelocation.defaultlogdir /SQLServerLog

    기본 디렉터리가 설정되면 다음 메시지가 표시됩니다.

  5. 기본 로그 디렉터리를 설정할 때에는 mssql-server를 다시 시작하라는 메시지가 표시됩니다. 다음 명령을 실행하여 이 작업을 수행합니다.
    sudo systemctl restart mssql-server

3. 기본 백업 위치 변경

기본 백업 위치를 변경하려면 파일 시스템을 생성할 때와 동일한 단계를 수행합니다. 이러한 단계에서는 디렉터리를 생성하고, 볼륨을 디렉터리에 탑재하고, 탑재 지점의 소유권 및 그룹을 변경하고, 기본 위치를 변경하고, mssql-server 서비스를 다시 시작합니다.

  1. 다음 명령을 실행하여 기본 백업 디렉터리를 변경합니다.
    sudo /opt/mssql/bin/mssql-conf set defaultbackupdir /YourNewBackupDirectory
  2. 세 개의 기본 디렉터리가 모두 설정되면 lsblk 명령을 실행하여 탑재 지점에 연결된 디바이스 및 볼륨을 확인합니다. 결과는 다음과 같아야 합니다.
  3. SSMS를 열고, 서버에 대한 상황에 맞는 메뉴(마우스 오른쪽 클릭)를 열고, [Properties]를 선택합니다.
  4. [Database Settings] 탭을 선택하고 새 데이터베이스 기본 위치가 읽는 항목을 확인합니다. 이 탭은 데이터베이스 데이터, 로그 및 백업 파일의 위치를 분리할 목적으로 생성하고 탑재한 디렉터리를 읽고 참조해야 합니다.

4. 필요에 따라 메모리 소비량 설정

SQL Server가 Linux 인스턴스에서 소비할 수 있는 메모리의 양을 설정하는 것이 애플리케이션에 중요하다면 mssql-conf 스크립트에서 memory.memorylimitmb 설정을 사용하여 메모리 소비량을 설정할 수 있습니다.

  1.  mssql-conf스크립트에서 memory.memorylimitmb설정하는 다음 명령을 통해 메모리 제한을 3328MB로 설정합니다.
    sudo /opt/mssql/bin/mssql-conf set memory.memorylimitmb 3328
  2. 다음 명령을 실행하여 서비스를 다시 시작합니다. 앞서 수행한 구성 변경을 따르려면 서비스를 다시 시작해야 합니다.
    sudo systemctl restart mssql-server

5. 추적 플래그 활성화 또는 비활성화

SQL Server 서비스 시작에 대한 추적 플래그를 활성화하고 비활성화할 수 있습니다. 교착 상태 진단 시 유용한 추적 플래그 1222를 설정하는 것이 좋습니다.

  1. 추적 플래그를 활성화하고 비활성화하려면 다음 명령을 사용합니다.
    • 추적 플래그를 활성화하려면 다음 명령을 실행합니다.
      sudo /opt/mssql/bin/mssql-conf traceflag 1222 on
    • 추적 플래그를 비활성화하려면 다음 명령을 실행합니다.
      sudo /opt/mssql/bin/mssql-conf traceflag 1222 off

    앞의 명령을 사용하여 추적 플래그를 설정하면 추적 플래그가 글로벌로 구성되어 SQL Server를 다시 시작할 때마다 추적 플래그가 포함됩니다( mssql-server.service에 대한 시작 파라미터).

  2. 다음 명령을 실행하여 mssql-server.service 서비스를 다시 시작합니다.
    sudo systemctl restart mssql-server

6. TempDB 로그 파일과 데이터 파일 분리

데이터베이스의 예기치 않은 증가가 운영 체제에 미치는 영향을 방지하려면 TempDB 데이터베이스 로그 파일과 데이터 파일을 다른 디렉터리 및 다른 볼륨에 분리하는 것이 좋습니다. 이렇게 하려면 다음 지침을 따릅니다.

  1. ext4 파일 시스템을 사용하도록 볼륨(이 예제에서는xvde 볼륨이 사용됨)을 포맷합니다.
    sudo mkfs -t ext4 /dev/xvde
  2. 새 ext4 볼륨을 탑재할 디렉터리를 생성합니다. 이 예제에서는 /SQLServerTempDB를 새 디렉터리 이름으로 사용합니다.
    sudo mkdir /SQLServerTempDB
  3. 다음 명령을 사용하여 새 디렉터리에 사용할 볼륨(이 예제에서는 /dev/xvde 볼륨을 사용함)을 탑재합니다.
    sudo mount /dev/xvdd /SQLServerTempDB
  4. 디렉터리 소유자 및 그룹을 mssql 사용자로 변경합니다.
    sudo chown mssql /SQLServerTempDB
    sudo chgrp mssql /SQLServerTempDB
  5. TempDB 파일을 새 위치로 이동하려면 Windows 기반 SQL Server에서 TempDB 파일을 이동할 때와 동일한 단계를 수행합니다. SSMS 쿼리 창을 열려면 SSMS를 열고, 서버에 대한 상황에 맞는 메뉴(마우스 오른쪽 클릭)를 연 다음 [New Query]를 선택합니다.
  6. 다음 명령을 실행하여 현재 TempDB 데이터 파일과 로그 파일이 상주하는 위치를 쿼리합니다.앞의 스크린샷에 나와 있는 것처럼 TempDB 데이터 파일과 로그 파일은 동일한 디렉터리 내에 상주합니다.
  7. ALTER DATABASE를 사용하여 각 파일의 위치를 변경합니다.
  8. 다음 명령을 실행하여 SQL Server의 인스턴스를 중지하고 다시 시작합니다.
    sudo systemctl restart mssql-server
  9. 수정을 확인하려면 4단계에서 실행한 것과 동일한 쿼리를 실행합니다. 다음 스크린샷에서 TempDB가 /dev/xvdd/에 탑재된 SQLServerTempDB디렉터리로 이동한 것을 알 수 있습니다.
  10. 10. 시스템 재부팅을 통해 탑재가 지속적으로 유지되도록 하려면 디바이스에 대한 항목을 /etc/fstab 파일에 추가합니다. ‘df’ 명령을 실행하여 모든 탑재 지점 정보(디바이스 이름, 사용된 공간 등)의 목록을 가져올 수 있습니다. /etc/fstab에 시스템의 현재 디바이스 이름(/dev/sda1, /dev/xvda1 등)을 사용할 수 있지만, 디바이스의 128비트 UUID(Universally Unique Identifier)를 사용할 것을 권장합니다.
    'file –s /devicename'명령을 실행하여 UUID를 가져옵니다.

    fstab 파일의 맨 위에 새 줄을 추가하고, 디바이스의 특정 UUID를 붙여 넣고, 탑재 지점(이 예제에서는 /SQLServerData를 사용함)을 추가하고, 파일 시스템 유형(이 예제에서는 ext4)과 탑재 옵션(자세한 내용은 https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-using-volumes.html의 7c 단계 참조)을 입력합니다.

    재부팅 시 지속적으로 유지하려는 모든 탑재 지점과 디바이스에 대해 위의 단계를 반복합니다. 디바이스가 /etc/fstab 파일에 성공적으로 저장되었는지 확인하려면 ‘cat /etc/fstab’ 명령을 실행합니다.

이제 Linux AMI에서 SQL Server 2017을 사용하고 구현된 모범 사례를 통해 편리하게 관리할 수 있습니다.

– Bini Berhe;