다음을 통해 공유


SMB 스토리지 장애 조치(failover) 클러스터 인스턴스 구성 - SQL Server on Linux

적용 대상: SQL Server - Linux

이 문서에서는 Linux에서 FCI(장애 조치(failover) 클러스터 인스턴스)용 SMB 스토리지를 구성하는 방법을 설명합니다.

Windows가 아닌 환경에서 SMB는 CIFS(공용 인터넷 파일 시스템) 공유라고도 하며 Samba를 통해 구현됩니다. Windows 환경에서는 \\SERVERNAME\SHARENAME과 같은 방법으로 SMB 공유에 액세스합니다. Linux 기반 SQL Server 설치에서는 SMB 공유를 폴더로 탑재해야 합니다.

중요한 소스 및 서버 정보

다음은 SMB를 성공적으로 사용하기 위한 몇 가지 팁과 참고 사항입니다.

  • SMB 공유는 Windows, Linux 또는 SMB 3.0 이상 버전을 사용하는 어플라이언스에서도 사용할 수 있습니다. Samba 및 SMB 3.0에 대한 자세한 내용은 SMB 3.0 을 참조하여 Samba 구현이 SMB 3.0을 준수하는지 확인하세요.
  • SMB 공유는 가용성이 높아야 합니다.
  • SMB 공유에 보안을 올바르게 설정해야 합니다. 다음은 /etc/samba/smb.conf의 예입니다. 여기서 SQLData는 공유의 이름입니다.
[SQLData]
path=/var/smb/SQLData
read only = no
browseable = yes
guest ok = no
writeable = yes
valid users = SQLSambaUser

지침

  1. FCI 구성에 참여할 서버 중 하나를 선택합니다. 어느 것이든 상관 없습니다.

  2. mssql 사용자에 대한 정보를 가져옵니다.

     sudo id mssql
    

    uid, gid 및 그룹을 기록합니다.

  3. sudo smbclient -L //NameOrIP/ShareName -U User를 실행합니다.

    • <NameOrIP>는 SMB 공유를 호스트하는 서버의 DNS 이름 또는 IP 주소입니다.
    • <ShareName>은 SMB 공유의 이름입니다.
  4. 시스템 데이터베이스 또는 기본 데이터 위치에 저장된 항목의 경우 다음 단계를 수행합니다. 그렇지 않은 경우, 5단계로 건너뜁니다.

    1. 작업 중인 서버에서 SQL Server가 중지되었는지 확인합니다.

      sudo systemctl stop mssql-server
      sudo systemctl status mssql-server
      
    2. 슈퍼 사용자로 완전히 전환합니다.

      sudo -i
      
    3. mssql 사용자로 전환합니다.

      su mssql
      
    4. SQL Server 데이터와 로그 파일을 저장할 임시 디렉터리를 만듭니다.

      mkdir <TempDir>
      
      • <TempDir>은 폴더 이름입니다. 다음 예시에서는 /var/opt/mssql/tmp(이)라는 폴더를 만듭니다.
      mkdir /var/opt/mssql/tmp
      
    5. SQL Server 데이터와 로그 파일을 임시 디렉터리에 복사합니다.

      cp /var/opt/mssql/data/* <TempDir>
      
      • <TempDir>는 이전 단계의 폴더 이름입니다.
    6. 파일이 디렉터리에 있는지 확인합니다.

      ls <TempDir>
      

      <TempDir>은 d단계의 폴더 이름입니다.

    7. 기존 SQL Server 데이터 디렉터리에서 파일을 삭제합니다.

      rm - f /var/opt/mssql/data/*
      
    8. 파일이 삭제되었는지 확인합니다.

      ls /var/opt/mssql/data
      
    9. exit를 입력하여 다시 루트 사용자로 전환합니다.

    10. SQL Server 데이터 폴더에 SMB 공유를 탑재합니다. 이 예제에서는 Windows Server 기반 SMB 3.0 공유에 연결하는 구문을 보여 줍니다.

      Mount -t cifs //<ServerName>/<ShareName> /var/opt/mssql/data -o vers=3.0,username=<UserName>,password=<Password>,domain=<domain>,uid=<mssqlUID>,gid=<mssqlGID>,file_mode=0777,dir_mode=0777
      
      • <ServerName>은 SMB 공유가 있는 서버의 이름입니다.
      • <ShareName>은 공유의 이름입니다.
      • <UserName>은 공유에 액세스할 사용자의 이름입니다.
      • <Password>는 사용자의 암호입니다.
      • <domain>은 Active Directory의 이름입니다.
      • <mssqlUID>mssql 사용자의 UID입니다.
      • <mssqlGID>mssql 사용자의 GID입니다.
    11. 스위치 없이 mount를 실행하여 탑재에 성공했는지 확인합니다.

      mount
      
    12. mssql 사용자로 전환합니다.

      su mssql
      
    13. 임시 디렉터리 /var/opt/mssql/data에서 파일을 복사합니다.

      cp /var/opt/mssql/tmp/* /var/opt/mssql/data
      
    14. 해당 위치에 파일이 있는지 확인합니다.

      ls /var/opt/mssql/data
      
    15. mssql이 되지 않도록 하려면 exit를 입력합니다.

    16. root이 되지 않도록 하려면 exit를 입력합니다.

    17. SQL Server를 시작합니다. 모든 항목이 올바르게 복사되고 보안이 올바르게 적용되었다면 SQL Server가 시작됨으로 표시되어야 합니다.

      sudo systemctl start mssql-server
      sudo systemctl status mssql-server
      
    18. 추가로 테스트하려면 데이터베이스를 만들어 사용 권한이 적절한지 확인합니다. 다음 예시에서는 Transact-SQL을 사용합니다. SSMS를 사용할 수 있습니다.

      테스트 데이터베이스 생성을 보여 주는 스크린샷

    19. SQL Server를 중지하고 종료되었는지 확인합니다. 다른 디스크를 추가하거나 테스트하려는 경우 해당 디스크를 추가되고 테스트될 때까지 SQL Server를 종료하지 마세요.

      sudo systemctl stop mssql-server
      sudo systemctl status mssql-server
      
    20. 완료된 경우에만 공유를 분리하세요. 그렇지 않은 경우 테스트를 완료하고 추가 디스크를 추가한 후 분리하세요.

      sudo umount //<IPAddressorServerName>/<ShareName /<FolderMountedIn>
      
      • <IPAddressOrServerName>은 SMB 호스트의 IP 주소 또는 이름입니다.
      • <ShareName>은 공유의 이름입니다.
      • <FolderMountedIn>은 SMB가 탑재된 폴더의 이름입니다.
  5. 사용자 데이터베이스 또는 백업과 같은 시스템 데이터베이스 이외의 항목은 다음 단계를 따르세요. 기본 위치만 사용하는 경우 14단계로 건너뜁니다.

    1. 슈퍼 사용자로 전환합니다.

      sudo -i
      
    2. SQL Server에서 사용할 폴더를 만듭니다.

      mkdir <FolderName>
      

      <FolderName>은 폴더 이름입니다. 올바른 위치에 없으면 폴더의 전체 경로를 지정해야 합니다. 다음 예시에서는 /var/opt/mssql/userdata(이)라는 폴더를 만듭니다.

      mkdir /var/opt/mssql/userdata
      
    3. SQL Server 데이터 폴더에 SMB 공유를 탑재합니다. 이 예시에서는 Samba 기반 SMB 3.0 공유에 연결하는 구문을 보여 줍니다.

      Mount -t cifs //<ServerName>/<ShareName> <FolderName> -o vers=3.0,username=<UserName>,password=<Password>,uid=<mssqlUID>,gid=<mssqlGID>,file_mode=0777,dir_mode=0777
      
      • <ServerName>은 SMB 공유가 있는 서버의 이름입니다.
      • <ShareName>은 공유의 이름입니다.
      • <FolderName>은 마지막 단계에서 만든 폴더의 이름입니다.
      • <UserName>은 공유에 액세스할 사용자의 이름입니다.
      • <Password>는 사용자의 암호입니다.
      • <mssqlUID>mssql 사용자의 UID입니다.
      • <mssqlGID>mssql 사용자의 GID입니다.
    4. 스위치 없이 mount를 실행하여 탑재에 성공했는지 확인합니다.

    5. exit를 입력하여 슈퍼 사용자를 종료합니다.

    6. 테스트하려면 해당 폴더에 데이터베이스를 만듭니다. 다음 예시에서는 sqlcmd를 사용하여 데이터베이스를 만들고, 컨텍스트를 전환하고, 파일이 OS 수준에 있는지 확인한 다음 임시 위치를 삭제합니다. SSMS를 사용할 수 있습니다.

    7. 공유를 분리합니다.

      sudo umount //<IPAddressorServerName>/<ShareName> /<FolderMountedIn>
      
      • <IPAddressOrServerName>은 SMB 호스트의 IP 주소 또는 이름입니다.
      • <ShareName>은 공유의 이름입니다.
      • <FolderMountedIn>은 SMB가 탑재된 폴더의 이름입니다.
  6. 다른 노드에서 단계를 반복합니다.

이제 FCI를 구성할 준비가 되었습니다.