IBM Cloud Docs
SQL 서버

SQL 서버

이 섹션에서는 SQL 서버를 작성하는 데 필요한 빌드 태스크를 단계별로 설명한다. 고객은 VPC에 가상 서버 인스턴스를 주문한 후에 사전 구성된 설치로 번들 오퍼링을 사용하거나 사용자 소유 라이센스 가져오기 (BYOL) 및 Do It Yourself (DIY) 빌드 프로세스를 사용하도록 선택할 수 있습니다. 고객은 요구사항과 일치하는 접근 방법을 판별하고 이에 따라 진행해야 합니다. 아래 정보는 사용자 요구에 맞게 서버 프로파일을 선택하는 방법을 설명합니다.

가상 서버 주문

다음 스펙의 가상 서버가 이러한 배치 패턴의 SQL 서버 호스트에 대해 선택되었습니다. 순서를 지정하려면 UI를 사용하여 가상 서버 인스턴스 작성의 지시사항을 따르십시오.

  • 프로파일: mx2d-4x32
  • 유형: 공용
  • OS: Windows 2019
  • NIC Qty: 1
  • 인스턴스 스토리지: 150GB
  • 데이터 볼륨:
    • sqldb01-data: 1024GB, Tiered-5IOPS/GB, 제공자 관리 암호화
    • sqldb01-log: 1024GB, Tiered-5IOPS/GB, 제공자 관리 암호화

컴퓨팅

VPC에 대한 IBM Cloud 가상 서버를 프로비저닝할 때 세 가지 프로파일 (밸런스, 계산 및 메모리) 중 하나에서 인스턴스 프로파일 을 선택합니다.

  • 밸런스드-균형 프로파일은 계산의 1 vCPU 마다 메모리 4 GiB의 비율을 갖는다.
  • 계산 계산 프로파일에는 연산 1 vCPU 마다 2 GiB의 메모리 비율이 있습니다.
  • 메모리-메모리 프로파일은 데이터베이스 애플리케이션과 같은 메모리 집약적 워크로드에 가장 적합하며, 1 vCPU의 모든 메모리에 대해 8 GiB의 메모리를 사용할 수 있습니다.

온라인 트랜잭션 프로세싱 (OLTP) 은 전형적으로 많은 수의 사용자들에 의해 많은 수의 트랜잭션들에 의해 데이터베이스 내의 소량의 데이터를 삽입, 업데이트, 삭제하는 것을 포함한다. 프로덕션 MS SQL OLTP 환경에 대해 권장되는 최소값은 메모리 프로파일 제품군 ( mx2-4x32) 에서 32GB의 메모리를 사용하는 4 vCore입니다. 더 큰 요구사항의 경우, 메모리 프로파일 은 128vCPU, 1024 GiB RAM및 80Gbps네트워크 대역폭 캡이 있는 mx2-128x1024 까지 확장됩니다.

SQL Server 데이터 웨어하우스 환경에서는 8:1이상의 vCPU 요구사항에 더 많은 메모리가 필요합니다. 따라서 메모리 요구사항을 충족시키기 위해 vCPU에 대한 프로비저닝을 초과해야 할 수도 있습니다.

메모리 프로파일 제품군에는 인스턴스 스토리지가 프로비저닝된 프로파일이 포함되어 있습니다. 인스턴스 스토리지 는 인스턴스가 프로비저닝될 때 가상 서버 인스턴스에 직접 연결된 SSD (Solid State Drive) 를 제공합니다. 인스턴스 스토리지 디스크는 트랜잭션 처리를 포함하여 많은 워크로드의 성능을 향상시키기 위해 빠른 임시 스토리지를 제공합니다.

스토리지

IBM Cloud VPC에서 SQL Server 를 계획할 때 고려할 세 가지 스토리지 구성요소, 부트 볼륨, 데이터 볼륨 및 인스턴스 스토리지가 있습니다.

  • 부트 볼륨-가상 서버가 작성되면 블록 스토리지에서 100 GB, 3 IOPS/GB 부트 볼륨이 작성되어 인스턴스에 연결됩니다. 기본적으로 부트 볼륨은 IBM로 암호화되지만 고객 관리 암호화는 옵션입니다. 부트 볼륨은 분리되거나, 삭제되거나, 크기가 증가되거나 감소될 수 없습니다. 부트 볼륨은 가상 서버가 삭제될 때 항상 삭제됩니다. 부트 볼륨에는 운영 체제 파일이 포함되어 있습니다.

  • 데이터 볼륨-데이터 볼륨은 VPC용 블록 스토리지를 활용하며, 단일 구성요소의 장애로 인한 데이터 손실을 방지하기 위해 가용성 영역 (AZ) 의 여러 물리적 디스크에 중복적으로 저장되는 고성능의 고성능 데이터 스토리지를 제공합니다. 데이터 볼륨의 범위는 10 GB-2000 GB이며 최대 IOPS는 볼륨 크기와 선택된 IOPS 계층 프로파일에 따라 다릅니다. 예를 들어, 2000 GB의 5 IOPS/GB 볼륨에 대한 최대 IOPS는 10,000 IOPS 이다. 볼륨 프로파일을 세 개의 사전 정의된 IOPS 티어 또는 사용자 정의 IOPS 프로파일로 사용할 수 있으므로 사용자의 요구사항에 가장 적합한 볼륨 프로파일을 선택할 수 있습니다.

    • 3 IOPS/GB-범용 티어 프로파일은 가상 서버 인스턴스 균형 프로파일에 적합한 IOPS/GB 성능을 제공한다.
    • 5 IOPS/GB-이 프로파일은 가상 서버 인스턴스 계산 프로파일에 적합한 IOPS/GB 성능을 제공합니다.
    • 10 IOPS/GB-일반적으로 가상 서버 인스턴스 메모리 프로파일에 사용됩니다.

    자세한 정보는 IOPS 계층을 참조하십시오. 가상 서버에 연결할 수 있는 볼륨 수는 가상 서버가 포함하는 vCPU수에 따라 다릅니다. 자세한 정보는 볼륨 연결 제한을 참조하십시오. 필요에 따라 데이터 볼륨을 분리하여 가상 서버에 접속할 수 있습니다. 데이터 볼륨은 기본적으로 IBM 관리 암호화에 의해 암호화됩니다. 자체 루트 키를 사용하여 데이터 볼륨을 암호화할 수도 있습니다. 최적 블록 스토리지 볼륨 크기 및 성능 레벨 선택에 대한 블록 스토리지 용량 및 성능 조언을 참조하십시오.

  • 인스턴스 스토리지-선택적으로 가상 서버에는 인스턴스가 프로비저닝될 때 가상 서버 인스턴스에 직접 연결된 SSD (Solid State Drive) 를 제공하는 인스턴스 스토리지 가 포함될 수 있습니다. 인스턴스 스토리지 디스크는 트랜잭션 처리를 포함하여 많은 워크로드의 성능을 향상시키기 위해 빠른 임시 스토리지를 제공합니다. 인스턴스 스토리지에 저장된 데이터는 임시적이며, 인스턴스의 라이프사이클에 직접 연결됨을 의미합니다. 인스턴스 스토리지 디스크는 인스턴스를 사용하여 자동으로 작성되고 영구 삭제됩니다. 그러나 인스턴스 스토리지 데이터는 인스턴스가 다시 부팅될 때 유실되지 않습니다. 성능이 문제가 되면 MS SQL Server tempdb를 인스턴스 스토리지에 배치할 수 있습니다.

자세한 정보는 Block Storage for VPC정보를 참조하십시오.

드물게 유지보수 작업을 수행하면 가상 서버를 새 호스트로 마이그레이션하는 것이 필요할 수 있습니다. 가상 서버는 약 10초 동안 잠시 일시정지되며, 일부 경우에는 최대 30초가 발생합니다. 가상 서버 인스턴스는 해당 프로세스의 일부로 다시 부팅되지 않습니다. 그러나 인스턴스 스토리지가 있는 가상 서버의 경우 서버가 다시 시작됩니다. 자세한 정보는 클라우드 유지보수 조작 이해 를 참조하십시오.

서버에 연결

Refer to Windows 인스턴스에 연결하기 to access the Windows Administrator's password, however, in short the following commands are used from your laptop, where the instances command returns the <INSTANCE_ID> of the virtual server:

ibmcloud is instances
ibmcloud is instance-initialization-values <INSTANCE_ID> --private-key @~/.ssh/id_rsa

도메인 가입하기

이 태스크는 AD 서버가 설치된 후에야 시작되어야 한다.

SQL 서버의 Powershell 프롬프트에서 서버가 도메인에 참여할 수 있도록 하는 다음 명령을 입력한다.

  • Get-DnsClientServerAddress 는 IPv4 이더넷 인터페이스에 대한 인터페이스 색인을 캡처하여 DNS를 IBM Cloud DNS 서버에서 ADDNS 서버로 변경할 수 있도록 합니다. 서버가 도메인 컨트롤러를 찾을 수 없으므로 이 단계가 누락되면 Add-Computer 명령이 실패합니다. Add-Computer -Server 는 FQDN만 허용합니다.
  • Add-Computer 명령은 ADDNS 서버 <ad_server_fqdn> 를 사용하여 <domain> 도메인에 서버를 추가한 후 서버를 다시 시작하여 변경사항을 적용합니다.
$dns = "<ADDNS_IP_Address>"
$adserver = "<ad_server_fqdn>"
$domain = "<domain>"
$user = $domain + "\Administrator"
$password = "<password>"
$out=Get-DnsClientServerAddress -InterfaceAlias Ethernet -AddressFamily IPv4 | Select-Object -Property InterfaceIndex
Set-DnsClientServerAddress -InterfaceIndex $out.InterfaceIndex -ServerAddresses ($dns)
$password = ConvertTo-SecureString $password -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential ($user, $password)
Add-Computer -DomainName $domain -Server $adserver -Restart -Credential $credential

기본 호스트 SMB 공유에 연결

다음과 같은 PowerShell 명령을 사용하여 다음을 수행한다.

  • SMB2의 상태를 확인하려면 일반적으로 이 프로토콜을 가상 서버 이미지에서 사용할 수 없습니다. 사용하지 않는 경우, SMB가 작동하는 데 필요하므로 Set-SmbServerConfiguration 를 사용하여 사용 가능하게 할 수 있습니다.
  • Connect to the share on <bastion_hostname>\Downloads,as the Z: drive using the user <smbuser> and the password <share_password>
$bastion = "<bastion_hostname>"
$user = "<smbuser>"
$shareuser = $bastion + '\' + $user
$sharepassword = "<share_password>"
$path = '\\' + $bastion + '\' + 'Downloads'
Get-SmbServerConfiguration | Select EnableSMB2Protocol
Set-SmbServerConfiguration -EnableSMB2Protocol $true -Force
New-SmbMapping -LocalPath 'Z:' -RemotePath $path -UserName $shareuser -Password $sharepassword -Persistent $true

스토리지 구성

Microsoft SQL은 VPC 배치 패턴을 사용하여 Microsoft 스토리지 공간을 활용합니다. 스토리지 스페이스는 RAID와 개념적으로 유사하며 운영 체제에서 구현되는 Windows Server의 기술입니다. 스토리지 스페이스를 사용하여 데이터 볼륨을 스토리지 풀에 함께 그룹화한 후 풀의 용량을 사용하여 스토리지 공간 (가상 디스크) 을 작성할 수 있습니다. 스토리지 공간은 형식화된 볼륨을 작성할 수 있는 일반 드라이브로 Windows 운영 체제에 표시됩니다.

스토리지 공간 구성

IBM Cloud 콘솔에서 SQL Server에 대한 스토리지 볼륨 정보를 캡처하십시오. 예:

sqldb01-data: 0787-ff88b86a-1e29-4f0d-8a69-67b4deda3d5c-lpcn2
sqldb01-log: 0787-1d41b85e-4e8a-499e-b889-13b96db5251c-2w2n2

다음 PowerShell 명령은 후속 PowerShell 명령에서 사용하기 위해 SerialNumber의 Windows OS 보기를 캡처하는 데 사용됩니다. Get-StoragePool -IsPrimordial $true | Get-PhysicalDisk -CanPool $True. 다음 예제에서 알 수 있듯이, 일련 번호를 캡처할 수 있습니다.

Number FriendlyName       SerialNumber                         MediaType   CanPool OperationalStatus HealthStatus Usage           Size
------ ------------       ------------                         ---------   ------- ----------------- ------------ -----           ----
1      QEMU QEMU HARDDISK cloud-init-0787_1c6e0975-a584-43ca-b Unspecified True    OK                Healthy      Auto-Select   378 KB
5      Red Hat VirtIO     cloud-init-                          Unspecified True    OK                Healthy      Auto-Select    44 KB
3      Red Hat VirtIO     0787-ff88b86a-1e29-4                 Unspecified True    OK                Healthy      Auto-Select     1 TB
4      Red Hat VirtIO     0787-1d41b85e-4e8a-4                 Unspecified True    OK                Healthy      Auto-Select     1 TB
2      Red Hat VirtIO     70ab84c0-0e12-4fc2-a                 Unspecified True    OK                Healthy      Auto-Select 139.7 GB

sql데이터풀 스토리지 풀 작성

다음 PowerShell 명령을 사용하여 sql데이터풀 스토리지 풀을 구성하고 <SerialNumber> 를 sqldb01-data 볼륨의 일련 번호로 바꾸십시오. 이 명령은 다음을 달성합니다.

  • sql데이터풀이라는 스토리지 풀을 작성합니다.
  • 이 풀에서 스트라이프 (-ResiliencySettingName 단순) 에 대한 sqldata 라는 가상 디스크를 작성한다.
  • 가상 디스크는 GPT 파티션으로 초기화되고 D의 드라이브 문자가 할당된다.
  • 가상 디스크는 블록 크기가 64KB 이고 SQLDATA의 레이블이 지정된 NTFS 파일 시스템으로 형식화됩니다.
$dataserial = "<SerialNumber>"
New-StoragePool -FriendlyName "sqldatapool" -StorageSubsystemFriendlyName "Windows Storage*" -PhysicalDisks (Get-PhysicalDisk -SerialNumber $dataserial) | New-VirtualDisk -FriendlyName "sqldata" -Interleave 65536 -NumberOfColumns 1 -ResiliencySettingName simple –UseMaximumSize | Initialize-Disk -PartitionStyle GPT -PassThru | New-Partition -DriveLetter "D" -UseMaximumSize | Format-Volume -FileSystem NTFS -NewFileSystemLabel "SQLDATA" -AllocationUnitSize 65536 -Confirm:$false -UseLargeFRS

성능 향상을 위해 다중 데이터 볼륨을 사용하는 경우에는 이 PowerShell 명령을 수정해야 한다. 2개의 디스크에 대한 예제:

New-StoragePool -FriendlyName "sqldatapool" -StorageSubsystemFriendlyName "Windows Storage*" -PhysicalDisks (Get-PhysicalDisk | where {($_.SerialNumber -eq "<Disk1_SerialNumber>") -or ($_.SerialNumber -eq "<Disk2_SerialNumber>")}) | New-VirtualDisk -FriendlyName "sqldata" -Interleave 65536 -NumberOfColumns 2 -ResiliencySettingName simple –UseMaximumSize | Initialize-Disk -PartitionStyle GPT -PassThru | New-Partition -DriveLetter "D" -UseMaximumSize | Format-Volume -FileSystem NTFS -NewFileSystemLabel "SQLDATA" -AllocationUnitSize 65536 -Confirm:$false -UseLargeFRS

-NumberOfColumns 는 스트라이프 데이터에 대한 디스크 수와 일치한다.

sqllogpool 스토리지 풀 만들기

다음 PowerShell 명령을 사용하여 sqllogpool 스토리지 풀을 구성하고 <SerialNumber> 를 sqldb01-log 볼륨의 일련 번호로 바꾸십시오. 이 명령은 다음을 달성합니다.

  • sqllogpool 이라는 스토리지 풀을 작성한다.
  • 이 풀에서 스트라이프 (-ResiliencySettingName 단순) 에 대한 sqllog 라는 가상 디스크를 작성한다.
  • 가상 디스크는 GPT 파티션으로 초기화되고 E의 드라이브 이름이 할당된다.
  • 가상 디스크는 블록 크기가 64KB 이고 SQLLOG 레이블이 지정된 NTFS 파일 시스템으로 형식화됩니다.
$logserial = "<SerialNumber>"
New-StoragePool -FriendlyName "sqllogpool" -StorageSubsystemFriendlyName "Windows Storage*" -PhysicalDisks (Get-PhysicalDisk -SerialNumber $logserial) | New-VirtualDisk -FriendlyName "sqllog" -Interleave 65536 -NumberOfColumns 1 -ResiliencySettingName simple –UseMaximumSize | Initialize-Disk -PartitionStyle GPT -PassThru | New-Partition -DriveLetter "E" -UseMaximumSize | Format-Volume -FileSystem NTFS -NewFileSystemLabel "SQLLOG" -AllocationUnitSize 65536 -Confirm:$false -UseLargeFRS

tempdb의 인스턴스 스토리지 초기화하기

tempdb 드라이브는 스토리지 스페이스를 인스턴스 스토리지로 사용하지 않으며 단일 볼륨으로만 구성됩니다. 다음 PowerShell 명령을 사용하여 볼륨을 구성하고 <SerialNumber> 를 인스턴스 스토리지 볼륨의 일련 번호로 바꾸십시오. 이 명령은 다음을 달성합니다.

  • GPT 파티션으로 초기화된 드라이브를 작성하고 F의 드라이브 이름을 지정했습니다.
  • 드라이브는 블록 크기가 64KB 이고 TEMPDB의 레이블이 지정된 NTFS 파일 시스템으로 형식화됩니다.
$tempdbserial = "<SerialNumber>"
Get-Disk | Where SerialNumber -eq $tempdbserial | Initialize-Disk -PartitionStyle GPT -PassThru | New-Partition -DriveLetter "F" -UseMaximumSize | Format-Volume -FileSystem NTFS -NewFileSystemLabel "TEMPDB" -AllocationUnitSize 65536 -Confirm:$false -UseLargeFRS

SQL Server 설치

SQL Server 설치 프로그램은 매체를 다운로드하고 파일을 기본 호스트로 추출하는 데 이미 사용되었습니다. 설치가 로컬 디스크에서 실행되도록 다음 PowerShell 명령 Copy-Item "Z:\SQL2019\Extracted" -Destination "C:\Users\Administrator\Downloads\SQL2019\Extracted\" -Recurse 을 사용하여 SMB에서 SQL 서버의 로컬 디스크에 필요한 파일을 복사하십시오.

이 단계에서는 다음과 같은 세 가지 옵션이 있습니다.

  1. 설치 프로그램을 대화식으로 실행하여 SQL Server를 설치하십시오.
  2. 설치 프로그램을 대화식으로 실행하여 나중에 설치할 구성 파일을 캡처하십시오.
  3. 이 문서 세트를 구성하고 SQL Server를 설치하는 기존 ConfigurationFile.ini를 사용하십시오.

이 문서에서는 옵션 3을 사용 중이라고 가정하고, ConfigurationFile.ini가 작성되었으며 다음 명령을 사용하여 SQL Server를 설치하고 있다고 가정합니다.

C:\Users\Administrator\Downloads\SQL2019\Extracted\SETUP.exe /ConfigurationFile=C:\Users\Administrator\Downloads\ConfigurationFile.ini /TCPENABLED="1" /SQLSVCPASSWORD="<svc_password>" /AGTSVCPASSWORD="<agt_password>"

<svc_password> 는 SQL Server 서비스에 사용되는 도메인 서비스 계정의 비밀번호이고 <agt_password> 는 SQL Agent에 사용되는 도메인 서비스 계정의 비밀번호입니다.

기본적으로 SQL Server 는 TCP 프로토콜을 사용하지 않고 설치되며 /TCPENABLED="1" 는 TCP를 사용합니다.

서버의 인터페이스와 루프백 주소 (127.0.0.1) 에서 TCP/IP를 사용할 수 있는지 확인한다.

  1. SQL 서버에서 SQL Server 구성 관리자를 여십시오.
  2. SQL Server 네트워크 구성 노드를 펼쳐 MSSQLSERVER의 프로토콜을 보십시오.
  3. 세부사항 영역에서 TCP/IP 프로토콜을 마우스 오른쪽 단추로 클릭하고 Properties를 선택한다.
  4. TCP/IP Properties창에서 IP 주소 탭을 선택한다.
  5. 서버의 IPv4 IP 주소 및 루프백 주소 (127.0.0.1) 가 있는 인터페이스를 찾으십시오.
  6. 사용 가능이 예로 설정되었는지 확인하십시오. 아니오로 설정된 경우 예를 선택하십시오.
  7. OK를 클릭하고, OK를 클릭한다.
  8. 변경사항을 적용하려면 서비스를 다시 시작해야 합니다.
  9. SQL Server 서비스를 선택하고 SQL Server 서비스를 다시 시작하십시오.

Windows 방화벽 구성하기

Windows 방화벽을 통해 TCP 1433을 허용하려면 다음 명령을 사용하십시오. New-NetFirewallRule -DisplayName 'SQL-Inbound' -Profile Domain -Direction Inbound -Action Allow -Protocol TCP -LocalPort 1433

가용성 그룹을 구성하려는 경우 다음 명령을 사용하여 Windows 방화벽을 통해 TCP 5022를 허용하십시오. New-NetFirewallRule -DisplayName 'SQL-AG-Inbound' -Profile Domain -Direction Inbound -Action Allow -Protocol TCP -LocalPort 5022

NTP 서버 구성하기

AD 도메인 계층 구조에서 자동으로 시간을 동기화하려면 다음 명령을 실행하십시오.

w32tm /config /syncfromflags:domhier /update
net stop w32time
net start w32time
w32tm /query /status

Powershell SQL Server 모듈 설치

SQL 서버가 인터넷에 연결되어 있지 않기 때문에 모듈을 SQL 서버의 C:\Program Files\WindowsPowerShell\Modules 디렉토리에 복사한 후 설치한 기본 호스트로 다운로드해야 한다. 다음 PowerShell 명령은 기본 호스트에 모듈을 다운로드하고 Z: 드라이브에 연결된 공유를 구성했다고 가정합니다.

Copy-Item "Z:\SqlServer" -Destination "C:\Program Files\WindowsPowerShell\Modules" -Recurse
Import-Module SQLServer