Konfigurasikan grup ketersediaan Selalu Aktif di VM Azure dengan PowerShell

Sebelum Anda mulai, pertimbangkan bahwa Anda sekarang dapat menyelesaikan tugas ini dalam model manajer sumber daya Azure. Kami merekomendasikan model pengelola sumber daya Azure untuk penyebaran baru. Lihat grup ketersediaan SQL Server Always On di komputer virtual Azure.

Penting

Sebaiknya sebagian besar penerapan baru menggunakan model Resource Manager. Azure memiliki dua model penyebaran yang berbeda untuk membuat dan bekerja dengan sumber daya: Resource Manager dan klasik. Artikel ini membahas tentang menggunakan model penyebaran klasik.

Mesin virtual (VM) Azure dapat membantu administrator database untuk menurunkan biaya sistem SQL Server ketersediaan tinggi. Tutorial ini menunjukkan kepada Anda cara menerapkan grup ketersediaan dengan menggunakan SQL Server Always On end-to-end di dalam lingkungan Azure. Di akhir tutorial, solusi SQL Server Always On Anda di Azure akan terdiri dari elemen-elemen berikut:

  • Jaringan virtual yang berisi beberapa subnet, termasuk front-end dan subnet back-end.
  • Pengontrol domain dengan domain Direktori Aktif.
  • Dua vm SQL Server yang disebarkan ke subnet back-end dan bergabung ke domain Active Directory.
  • Cluster failover Windows tiga node dengan model kuorum Node Majority.
  • Grup ketersediaan dengan dua replika komit sinkron dari database ketersediaan.

Skenario ini adalah pilihan yang baik untuk kesederhanaannya di Azure, bukan karena efektivitas biaya atau faktor lainnya. Misalnya, Anda dapat meminimalkan jumlah VM untuk grup ketersediaan dua replika untuk menghemat jam komputasi di Azure dengan menggunakan pengontrol domain sebagai saksi berbagi file kuorum dalam kluster failover dua simpul. Metode ini mengurangi jumlah VM satu per satu dari konfigurasi di atas.

Tutorial ini dimaksudkan untuk menunjukkan kepada Anda langkah-langkah yang diperlukan untuk menyiapkan solusi yang dijelaskan di atas, tanpa menguraikan detail setiap langkah. Oleh karena itu, alih-alih memberikan langkah-langkah konfigurasi GUI, ia menggunakan skrip PowerShell untuk membawa Anda dengan cepat melalui setiap langkah. Tutorial ini mengasumsikan sebagai berikut:

Koneksi langganan Azure Anda dan membuat jaringan virtual

  1. Di jendela PowerShell di komputer lokal Anda, impor modul Azure, unduh file pengaturan penerbitan ke komputer Anda, dan hubungkan sesi PowerShell Anda ke langganan Azure Anda dengan mengimpor pengaturan penerbitan yang diunduh.

    Import-Module "C:\Program Files (x86)\Microsoft SDKs\Azure\PowerShell\Azure\Azure.psd1"
    Get-AzurePublishSettingsFile
    Import-AzurePublishSettingsFile <publishsettingsfilepath>
    

    Perintah Get-AzurePublishSettingsFile secara otomatis menghasilkan sertifikat manajemen dengan Azure dan mengunduhnya ke komputer Anda. Browser dibuka secara otomatis, dan Anda diminta untuk memasukkan kredensial akun Microsoft untuk langganan Azure Anda. File .publishsettings yang diunduh berisi semua informasi yang Anda butuhkan untuk mengelola langganan Azure Anda. Setelah menyimpan file ini ke direktori lokal, impor dengan menggunakan perintah Import-AzurePublishSettingsFile .

    Catatan

    File .publishsettings berisi kredensial Anda (unencoded) yang digunakan untuk mengelola langganan dan layanan Azure Anda. Praktik terbaik keamanan untuk file ini adalah menyimpannya sementara di luar direktori sumber Anda (misalnya, di folder Libraries\Documents), lalu menghapusnya setelah impor selesai. Pengguna berbahaya yang mendapatkan akses ke file .publishsettings dapat mengedit, membuat, dan menghapus layanan Azure Anda.

  2. Tentukan serangkaian variabel yang akan Anda gunakan untuk membuat infrastruktur TI cloud Anda.

    $location = "West US"
    $affinityGroupName = "ContosoAG"
    $affinityGroupDescription = "Contoso SQL HADR Affinity Group"
    $affinityGroupLabel = "IaaS BI Affinity Group"
    $networkConfigPath = "C:\scripts\Network.netcfg"
    $virtualNetworkName = "ContosoNET"
    $storageAccountName = "<uniquestorageaccountname>"
    $storageAccountLabel = "Contoso SQL HADR Storage Account"
    $storageAccountContainer = "https://" + $storageAccountName + ".blob.core.windows.net/vhds/"
    $winImageName = (Get-AzureVMImage | where {$_.Label -like "Windows Server 2008 R2 SP1*"} | sort PublishedDate -Descending)[0].ImageName
    $sqlImageName = (Get-AzureVMImage | where {$_.Label -like "SQL Server 2012 SP1 Enterprise*"} | sort PublishedDate -Descending)[0].ImageName
    $dcServerName = "ContosoDC"
    $dcServiceName = "<uniqueservicename>"
    $availabilitySetName = "SQLHADR"
    $vmAdminUser = "AzureAdmin"
    $vmAdminPassword = "Contoso!000"
    $workingDir = "c:\scripts\"
    

    Perhatikan hal-hal berikut untuk memastikan bahwa perintah Anda akan berhasil nanti:

    • Variabel $storageAccountName dan $dcServiceName harus unik karena digunakan untuk mengidentifikasi akun penyimpanan cloud dan server cloud Anda, masing-masing, di Internet.
    • Nama yang Anda tentukan untuk variabel $affinityGroupName dan $virtualNetworkName dikonfigurasi dalam dokumen konfigurasi jaringan virtual yang akan Anda gunakan nanti.
    • $sqlImageName menentukan nama terbaru dari gambar VM yang berisi SQL Server 2012 Service Pack 1 Enterprise Edition.
    • Untuk kesederhanaan, Contoso!000 adalah kata sandi yang sama yang digunakan di seluruh tutorial.
  3. Buat grup afinitas.

    New-AzureAffinityGroup `
        -Name $affinityGroupName `
        -Location $location `
        -Description $affinityGroupDescription `
        -Label $affinityGroupLabel
    
  4. Buat jaringan virtual dengan mengimpor file konfigurasi.

    Set-AzureVNetConfig `
        -ConfigurationPath $networkConfigPath
    

    File konfigurasi berisi dokumen XML berikut. Singkatnya, ini menentukan jaringan virtual yang disebut ContosoNET dalam kelompok afinitas yang disebut ContosoAG. Ini memiliki ruang alamat 10.10.0.0/16 dan memiliki dua subnet, masing-masing subnet depan dan subnet belakang. Subnet depan adalah tempat Anda dapat menempatkan aplikasi klien seperti Microsoft SharePoint. Subnet belakang adalah tempat Anda akan menempatkan VM SQL Server. Jika Anda mengubah variabel $affinityGroupName dan $virtualNetworkName sebelumnya, Anda juga harus mengubah nama yang sesuai di bawah ini.

    <NetworkConfiguration xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns="https://schemas.microsoft.com/ServiceHosting/2011/07/NetworkConfiguration">
      <VirtualNetworkConfiguration>
        <Dns />
        <VirtualNetworkSites>
          <VirtualNetworkSite name="ContosoNET" AffinityGroup="ContosoAG">
            <AddressSpace>
              <AddressPrefix>10.10.0.0/16</AddressPrefix>
            </AddressSpace>
            <Subnets>
              <Subnet name="Front">
                <AddressPrefix>10.10.1.0/24</AddressPrefix>
              </Subnet>
              <Subnet name="Back">
                <AddressPrefix>10.10.2.0/24</AddressPrefix>
              </Subnet>
            </Subnets>
          </VirtualNetworkSite>
        </VirtualNetworkSites>
      </VirtualNetworkConfiguration>
    </NetworkConfiguration>
    ```xml
    
    
  5. Buat akun penyimpanan yang terkait dengan grup afinitas yang Anda buat, dan tetapkan sebagai akun penyimpanan saat ini di langganan Anda.

    New-AzureStorageAccount `
        -StorageAccountName $storageAccountName `
        -Label $storageAccountLabel `
        -AffinityGroup $affinityGroupName
    Set-AzureSubscription `
        -SubscriptionName (Get-AzureSubscription).SubscriptionName `
        -CurrentStorageAccount $storageAccountName
    
  6. Buat server pengontrol domain di kumpulan layanan dan ketersediaan cloud baru.

    New-AzureVMConfig `
        -Name $dcServerName `
        -InstanceSize Medium `
        -ImageName $winImageName `
        -MediaLocation "$storageAccountContainer$dcServerName.vhd" `
        -DiskLabel "OS" |
        Add-AzureProvisioningConfig `
            -Windows `
            -DisableAutomaticUpdates `
            -AdminUserName $vmAdminUser `
            -Password $vmAdminPassword |
            New-AzureVM `
                -ServiceName $dcServiceName `
                –AffinityGroup $affinityGroupName `
                -VNetName $virtualNetworkName
    

    Perintah pipa ini melakukan hal-hal berikut:

    • New-AzureVMConfig membuat konfigurasi VM.
    • Add-AzureProvisioningConfig memberikan parameter konfigurasi server Windows mandiri.
    • Add-AzureDataDisk menambahkan disk data yang akan Anda gunakan untuk menyimpan data Active Directory, dengan opsi caching diatur ke None.
    • New-AzureVM membuat layanan cloud baru dan membuat Azure VM baru di layanan cloud baru.
  7. Tunggu VM baru disediakan sepenuhnya, dan unduh file desktop jarak jauh ke direktori kerja Anda. Karena VM Azure baru membutuhkan waktu lama untuk provisi, while loop terus mensurvei VM baru sampai siap digunakan.

    $VMStatus = Get-AzureVM -ServiceName $dcServiceName -Name $dcServerName
    
    While ($VMStatus.InstanceStatus -ne "ReadyRole")
    {
        write-host "Waiting for " $VMStatus.Name "... Current Status = " $VMStatus.InstanceStatus
        Start-Sleep -Seconds 15
        $VMStatus = Get-AzureVM -ServiceName $dcServiceName -Name $dcServerName
    }
    
    Get-AzureRemoteDesktopFile `
        -ServiceName $dcServiceName `
        -Name $dcServerName `
        -LocalPath "$workingDir$dcServerName.rdp"
    

Server pengontrol domain sekarang berhasil disediakan. Selanjutnya, Anda akan mengonfigurasi domain Active Directory di server pengontrol domain ini. Biarkan jendela PowerShell terbuka di komputer lokal Anda. Anda akan menggunakannya lagi nanti untuk membuat dua VM SQL Server.

Mengonfigurasi pengendali domain

  1. Koneksi ke server pengontrol domain dengan meluncurkan file desktop jarak jauh. Gunakan nama pengguna administrator mesin AzureAdmin dan kata sandi Contoso!000, yang Anda tentukan saat Anda membuat VM baru.

  2. Buka jendela PowerShell dalam mode administrator.

  3. Jalankan perintah DCPROMO.EXE berikut untuk menyiapkan domain corp.contoso.com , dengan direktori data di drive M.

    dcpromo.exe `
        /unattend `
        /ReplicaOrNewDomain:Domain `
        /NewDomain:Forest `
        /NewDomainDNSName:corp.contoso.com `
        /ForestLevel:4 `
        /DomainNetbiosName:CORP `
        /DomainLevel:4 `
        /InstallDNS:Yes `
        /ConfirmGc:Yes `
        /CreateDNSDelegation:No `
        /DatabasePath:"C:\Windows\NTDS" `
        /LogPath:"C:\Windows\NTDS" `
        /SYSVOLPath:"C:\Windows\SYSVOL" `
        /SafeModeAdminPassword:"Contoso!000"
    

    Setelah perintah selesai, VM dimulai ulang secara otomatis.

  4. Koneksi ke server pengontrol domain lagi dengan meluncurkan file desktop jarak jauh. Kali ini, masuk sebagai CORP\Administrator.

  5. Buka jendela PowerShell dalam mode administrator, dan impor modul Active Directory PowerShell dengan menggunakan perintah berikut:

    Import-Module ActiveDirectory
    
  6. Jalankan perintah berikut untuk menambahkan tiga pengguna ke domain.

    $pwd = ConvertTo-SecureString "Contoso!000" -AsPlainText -Force
    New-ADUser `
        -Name 'Install' `
        -AccountPassword  $pwd `
        -PasswordNeverExpires $true `
        -ChangePasswordAtLogon $false `
        -Enabled $true
    New-ADUser `
        -Name 'SQLSvc1' `
        -AccountPassword  $pwd `
        -PasswordNeverExpires $true `
        -ChangePasswordAtLogon $false `
        -Enabled $true
    New-ADUser `
        -Name 'SQLSvc2' `
        -AccountPassword  $pwd `
        -PasswordNeverExpires $true `
        -ChangePasswordAtLogon $false `
        -Enabled $true
    

    CORP\Install digunakan untuk mengonfigurasi segala sesuatu yang terkait dengan instans layanan SQL Server, kluster failover, dan grup ketersediaan. CORP\SQLSvc1 dan CORP\SQLSvc2 digunakan sebagai akun layanan SQL Server untuk dua VM SQL Server.

  7. Selanjutnya, jalankan perintah berikut untuk memberi CORP\Instal izin untuk membuat objek komputer di domain.

    Cd ad:
    $sid = new-object System.Security.Principal.SecurityIdentifier (Get-ADUser "Install").SID
    $guid = new-object Guid bf967a86-0de6-11d0-a285-00aa003049e2
    $ace1 = new-object System.DirectoryServices.ActiveDirectoryAccessRule $sid,"CreateChild","Allow",$guid,"All"
    $corp = Get-ADObject -Identity "DC=corp,DC=contoso,DC=com"
    $acl = Get-Acl $corp
    $acl.AddAccessRule($ace1)
    Set-Acl -Path "DC=corp,DC=contoso,DC=com" -AclObject $acl
    

    GUID yang ditentukan di atas adalah GUID untuk jenis objek komputer. Akun CORP\Install memerlukan izin Baca Semua Properti dan Buat Objek Komputer untuk membuat objek Langsung Aktif untuk kluster failover. Izin Baca Semua Properti sudah diberikan kepada CORP\Install secara default, jadi Anda tidak perlu memberikannya secara eksplisit. Untuk informasi selengkapnya tentang izin yang diperlukan untuk membuat kluster failover, lihat Panduan Langkah demi Langkah Kluster Failover: Mengonfigurasi Akun di Direktori Aktif.

    Sekarang setelah Anda selesai mengonfigurasi Active Directory dan objek pengguna, Anda akan membuat dua VM SQL Server dan bergabung dengan mereka ke domain ini.

Membuat VM SQL Server

  1. Terus gunakan jendela PowerShell yang terbuka di komputer lokal Anda. Tentukan variabel tambahan berikut:

    $domainName= "corp"
    $FQDN = "corp.contoso.com"
    $subnetName = "Back"
    $sqlServiceName = "<uniqueservicename>"
    $quorumServerName = "ContosoQuorum"
    $sql1ServerName = "ContosoSQL1"
    $sql2ServerName = "ContosoSQL2"
    $availabilitySetName = "SQLHADR"
    $dataDiskSize = 100
    $dnsSettings = New-AzureDns -Name "ContosoBackDNS" -IPAddress "10.10.0.4"
    

    Alamat IP 10.10.0.4 biasanya ditetapkan ke VM pertama yang Anda buat di subnet 10.10.0.0/16 dari jaringan virtual Azure Anda. Anda harus memverifikasi bahwa ini adalah alamat server pengontrol domain Anda dengan menjalankan IPCONFIG.

  2. Jalankan perintah perpipaan berikut untuk membuat VM pertama di kluster failover, bernama ContosoQuorum:

    New-AzureVMConfig `
        -Name $quorumServerName `
        -InstanceSize Medium `
        -ImageName $winImageName `
        -MediaLocation "$storageAccountContainer$quorumServerName.vhd" `
        -AvailabilitySetName $availabilitySetName `
        -DiskLabel "OS" |
        Add-AzureProvisioningConfig `
            -WindowsDomain `
            -AdminUserName $vmAdminUser `
            -Password $vmAdminPassword `
            -DisableAutomaticUpdates `
            -Domain $domainName `
            -JoinDomain $FQDN `
            -DomainUserName $vmAdminUser `
            -DomainPassword $vmAdminPassword |
            Set-AzureSubnet `
                -SubnetNames $subnetName |
                New-AzureVM `
                    -ServiceName $sqlServiceName `
                    –AffinityGroup $affinityGroupName `
                    -VNetName $virtualNetworkName `
                    -DnsSettings $dnsSettings
    

    Perhatikan hal-hal berikut mengenai perintah di atas:

    • New-AzureVMConfig membuat konfigurasi VM dengan nama set ketersediaan yang diinginkan. VM berikutnya akan dibuat dengan nama set ketersediaan yang sama sehingga mereka bergabung dengan set ketersediaan yang sama.
    • Add-AzureProvisioningConfig bergabung dengan VM ke domain Active Directory yang Anda buat.
    • Set-AzureSubnet menempatkan VM di subnet belakang.
    • New-AzureVM membuat layanan cloud baru dan membuat Azure VM baru di layanan cloud baru. Parameter DnsSettings menentukan bahwa server DNS untuk server di layanan cloud baru memiliki alamat IP 10.10.0.4. Ini adalah alamat IP dari server pengontrol domain. Parameter ini diperlukan untuk mengaktifkan VM baru di layanan cloud untuk bergabung ke domain Active Directory dengan sukses. Tanpa parameter ini, Anda harus mengatur pengaturan IPv4 secara manual di VM Anda untuk menggunakan server pengontrol domain sebagai server DNS utama setelah VM disediakan, dan kemudian bergabung dengan VM ke domain Active Directory.
  3. Jalankan perintah pipa berikut untuk membuat VM SQL Server, bernama ContosoSQL1 dan ContosoSQL2.

    # Create ContosoSQL1...
    New-AzureVMConfig `
        -Name $sql1ServerName `
        -InstanceSize Large `
        -ImageName $sqlImageName `
        -MediaLocation "$storageAccountContainer$sql1ServerName.vhd" `
        -AvailabilitySetName $availabilitySetName `
        -HostCaching "ReadOnly" `
        -DiskLabel "OS" |
        Add-AzureProvisioningConfig `
            -WindowsDomain `
            -AdminUserName $vmAdminUser `
            -Password $vmAdminPassword `
            -DisableAutomaticUpdates `
            -Domain $domainName `
            -JoinDomain $FQDN `
            -DomainUserName $vmAdminUser `
            -DomainPassword $vmAdminPassword |
            Set-AzureSubnet `
                -SubnetNames $subnetName |
                Add-AzureEndpoint `
                    -Name "SQL" `
                    -Protocol "tcp" `
                    -PublicPort 1 `
                    -LocalPort 1433 |
                    New-AzureVM `
                        -ServiceName $sqlServiceName
    
    # Create ContosoSQL2...
    New-AzureVMConfig `
        -Name $sql2ServerName `
        -InstanceSize Large `
        -ImageName $sqlImageName `
        -MediaLocation "$storageAccountContainer$sql2ServerName.vhd" `
        -AvailabilitySetName $availabilitySetName `
        -HostCaching "ReadOnly" `
        -DiskLabel "OS" |
        Add-AzureProvisioningConfig `
            -WindowsDomain `
            -AdminUserName $vmAdminUser `
            -Password $vmAdminPassword `
            -DisableAutomaticUpdates `
            -Domain $domainName `
            -JoinDomain $FQDN `
            -DomainUserName $vmAdminUser `
            -DomainPassword $vmAdminPassword |
            Set-AzureSubnet `
                -SubnetNames $subnetName |
                Add-AzureEndpoint `
                    -Name "SQL" `
                    -Protocol "tcp" `
                    -PublicPort 2 `
                    -LocalPort 1433 |
                    New-AzureVM `
                        -ServiceName $sqlServiceName
    

    Perhatikan hal-hal berikut mengenai perintah di atas:

    • New-AzureVMConfig menggunakan nama set ketersediaan yang sama dengan server pengontrol domain, dan menggunakan gambar SQL Server 2012 Service Pack 1 Enterprise Edition di galeri mesin virtual. Ini juga mengatur disk sistem operasi hanya untuk membaca-caching (tidak ada caching tulis). Sebaiknya migrasikan file database ke disk data terpisah yang Anda lampirkan ke VM, dan konfigurasikan tanpa caching baca atau tulis. Namun, hal terbaik berikutnya adalah menghapus caching tulis pada disk sistem operasi karena Anda tidak dapat menghapus caching baca pada disk sistem operasi.
    • Add-AzureProvisioningConfig bergabung dengan VM ke domain Active Directory yang Anda buat.
    • Set-AzureSubnet menempatkan VM di subnet belakang.
    • Add-AzureEndpoint menambahkan titik akhir akses sehingga aplikasi klien dapat mengakses instans layanan SQL Server ini di Internet. Port yang berbeda diberikan ke ContosoSQL1 dan ContosoSQL2.
    • New-AzureVM membuat VM SQL Server baru di layanan cloud yang sama dengan ContosoQuorum. Anda harus menempatkan VM di layanan cloud yang sama jika Anda ingin mereka berada dalam set ketersediaan yang sama.
  4. Tunggu setiap VM disediakan sepenuhnya dan untuk setiap VM mengunduh file desktop jarak jauhnya ke direktori kerja Anda. Loop for siklus melalui tiga VM baru dan mengeksekusi perintah di dalam kurung keriting tingkat atas untuk masing-masing dari mereka.

    Foreach ($VM in $VMs = Get-AzureVM -ServiceName $sqlServiceName)
    {
        write-host "Waiting for " $VM.Name "..."
    
        # Loop until the VM status is "ReadyRole"
        While ($VM.InstanceStatus -ne "ReadyRole")
        {
            write-host "  Current Status = " $VM.InstanceStatus
            Start-Sleep -Seconds 15
            $VM = Get-AzureVM -ServiceName $VM.ServiceName -Name $VM.InstanceName
        }
    
        write-host "  Current Status = " $VM.InstanceStatus
    
        # Download remote desktop file
        Get-AzureRemoteDesktopFile -ServiceName $VM.ServiceName -Name $VM.InstanceName -LocalPath "$workingDir$($VM.InstanceName).rdp"
    }
    

    VM SQL Server sekarang disediakan dan berjalan, tetapi diinstal dengan SQL Server dengan opsi default.

Menginisialisasi VM kluster failover

Di bagian ini, Anda perlu memodifikasi tiga server yang akan Anda gunakan di kluster failover dan instalasi SQL Server. Khususnya:

  • Semua server: Anda perlu menginstal fitur Failover Clustering .

  • Semua server: Anda perlu menambahkan CORP\Install sebagai administrator mesin.

  • ContosoSQL1 dan ContosoSQL2 saja: Anda perlu menambahkan CORP\Install sebagai peran sysadmin dalam database default.

  • ContosoSQL1 dan ContosoSQL2 saja: Anda perlu menambahkan NT AUTHORITY\System sebagai masuk dengan izin berikut:

    • Mengubah grup ketersediaan apa pun
    • Koneksi SQL
    • Lihat status server
  • ContosoSQL1 dan ContosoSQL2 saja: Protokol TCP sudah diaktifkan pada SQL Server VM. Namun, Anda masih perlu membuka firewall untuk akses jarak jauh SQL Server.

Sekarang, Anda siap untuk memulai. Dimulai dengan ContosoQuorum, ikuti langkah-langkah di bawah ini:

  1. Koneksi ke ContosoQuorum dengan meluncurkan file desktop jarak jauh. Gunakan nama pengguna administrator mesin AzureAdmin dan kata sandi Contoso!000, yang Anda tentukan saat membuat VM.

  2. Verifikasi bahwa komputer telah berhasil bergabung untuk corp.contoso.com.

  3. Tunggu instalasi SQL Server selesai menjalankan tugas inisialisasi otomatis sebelum melanjutkan.

  4. Buka jendela PowerShell dalam mode administrator.

  5. Instal fitur Windows Failover Clustering.

    Import-Module ServerManager
    Add-WindowsFeature Failover-Clustering
    
  6. Tambahkan CORP\Install sebagai administrator lokal.

    net localgroup administrators "CORP\Install" /Add
    
  7. Keluar dari ContosoQuorum. Anda sudah selesai dengan server ini sekarang.

    logoff.exe
    

Selanjutnya, menginisialisasi ContosoSQL1 dan ContosoSQL2. Ikuti langkah-langkah di bawah ini, yang identik untuk VM SQL Server.

  1. Koneksi ke dua VM SQL Server dengan meluncurkan file desktop jarak jauh. Gunakan nama pengguna administrator mesin AzureAdmin dan kata sandi Contoso!000, yang Anda tentukan saat membuat VM.

  2. Verifikasi bahwa komputer telah berhasil bergabung untuk corp.contoso.com.

  3. Tunggu instalasi SQL Server selesai menjalankan tugas inisialisasi otomatis sebelum melanjutkan.

  4. Buka jendela PowerShell dalam mode administrator.

  5. Instal fitur Windows Failover Clustering.

    Import-Module ServerManager
    Add-WindowsFeature Failover-Clustering
    
  6. Tambahkan CORP\Install sebagai administrator lokal.

    net localgroup administrators "CORP\Install" /Add
    
  7. Impor Penyedia PowerShell SQL Server.

    Set-ExecutionPolicy -Execution RemoteSigned -Force
    Import-Module -Name "sqlps" -DisableNameChecking
    
  8. Tambahkan CORP\Install sebagai peran sysadmin untuk instans SQL Server default.

    net localgroup administrators "CORP\Install" /Add
    Invoke-SqlCmd -Query "EXEC sp_addsrvrolemember 'CORP\Install', 'sysadmin'" -ServerInstance "."
    
  9. Tambahkan NT AUTHORITY\System sebagai masuk dengan tiga izin yang dijelaskan di atas.

    Invoke-SqlCmd -Query "CREATE LOGIN [NT AUTHORITY\SYSTEM] FROM WINDOWS" -ServerInstance "."
    Invoke-SqlCmd -Query "GRANT ALTER ANY AVAILABILITY GROUP TO [NT AUTHORITY\SYSTEM] AS SA" -ServerInstance "."
    Invoke-SqlCmd -Query "GRANT CONNECT SQL TO [NT AUTHORITY\SYSTEM] AS SA" -ServerInstance "."
    Invoke-SqlCmd -Query "GRANT VIEW SERVER STATE TO [NT AUTHORITY\SYSTEM] AS SA" -ServerInstance "."
    
  10. Buka firewall untuk akses jarak jauh SQL Server.

     netsh advfirewall firewall add rule name='SQL Server (TCP-In)' program='C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Binn\sqlservr.exe' dir=in action=allow protocol=TCP
    
  11. Keluar dari kedua VM.

     logoff.exe
    

Akhirnya, Anda siap untuk mengonfigurasi grup ketersediaan. Anda akan menggunakan Penyedia PowerShell SQL Server untuk melakukan semua pekerjaan di ContosoSQL1.

Mengonfigurasi grup ketersediaan

  1. Koneksi ke ContosoSQL1 lagi dengan meluncurkan file desktop jarak jauh. Alih-alih masuk dengan menggunakan akun mesin, masuk dengan menggunakan CORP\Install.

  2. Buka jendela PowerShell dalam mode administrator.

  3. Tentukan variabel berikut:

    $server1 = "ContosoSQL1"
    $server2 = "ContosoSQL2"
    $serverQuorum = "ContosoQuorum"
    $acct1 = "CORP\SQLSvc1"
    $acct2 = "CORP\SQLSvc2"
    $password = "Contoso!000"
    $clusterName = "Cluster1"
    $timeout = New-Object System.TimeSpan -ArgumentList 0, 0, 30
    $db = "MyDB1"
    $backupShare = "\\$server1\backup"
    $quorumShare = "\\$server1\quorum"
    $ag = "AG1"
    
  4. Impor Penyedia PowerShell SQL Server.

    Set-ExecutionPolicy RemoteSigned -Force
    Import-Module "sqlps" -DisableNameChecking
    
  5. Ubah akun layanan SQL Server untuk ContosoSQL1 menjadi CORP\SQLSvc1.

    $wmi1 = new-object ("Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer") $server1
    $wmi1.services | where {$_.Type -eq 'SqlServer'} | foreach{$_.SetServiceAccount($acct1,$password)}
    $svc1 = Get-Service -ComputerName $server1 -Name 'MSSQLSERVER'
    $svc1.Stop()
    $svc1.WaitForStatus([System.ServiceProcess.ServiceControllerStatus]::Stopped,$timeout)
    $svc1.Start();
    $svc1.WaitForStatus([System.ServiceProcess.ServiceControllerStatus]::Running,$timeout)
    
  6. Ubah akun layanan SQL Server untuk ContosoSQL2 menjadi CORP\SQLSvc2.

    $wmi2 = new-object ("Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer") $server2
    $wmi2.services | where {$_.Type -eq 'SqlServer'} | foreach{$_.SetServiceAccount($acct2,$password)}
    $svc2 = Get-Service -ComputerName $server2 -Name 'MSSQLSERVER'
    $svc2.Stop()
    $svc2.WaitForStatus([System.ServiceProcess.ServiceControllerStatus]::Stopped,$timeout)
    $svc2.Start();
    $svc2.WaitForStatus([System.ServiceProcess.ServiceControllerStatus]::Running,$timeout)
    
  7. Unduh CreateAzureFailoverCluster.ps1 dari Buat Kluster Failover untuk Grup Ketersediaan Always On di Azure VM ke direktori kerja lokal. Anda akan menggunakan skrip ini untuk membantu Membuat kluster failover fungsional. Untuk informasi penting tentang bagaimana Windows Failover Clustering berinteraksi dengan jaringan Azure, lihat Ketersediaan tinggi dan pemulihan bencana untuk SQL Server di Azure Virtual Machines.

  8. Ubah ke direktori kerja Anda dan buat kluster failover dengan skrip yang diunduh.

    Set-ExecutionPolicy Unrestricted -Force
    .\CreateAzureFailoverCluster.ps1 -ClusterName "$clusterName" -ClusterNode "$server1","$server2","$serverQuorum"
    
  9. Aktifkan Grup ketersediaan Always On untuk instans SQL Server default di ContosoSQL1 dan ContosoSQL2.

    Enable-SqlAlwaysOn `
        -Path SQLSERVER:\SQL\$server1\Default `
        -Force
    Enable-SqlAlwaysOn `
        -Path SQLSERVER:\SQL\$server2\Default `
        -NoServiceRestart
    $svc2.Stop()
    $svc2.WaitForStatus([System.ServiceProcess.ServiceControllerStatus]::Stopped,$timeout)
    $svc2.Start();
    $svc2.WaitForStatus([System.ServiceProcess.ServiceControllerStatus]::Running,$timeout)
    
  10. Buat direktori cadangan dan berikan izin untuk akun layanan SQL Server. Anda akan menggunakan direktori ini untuk menyiapkan database ketersediaan pada replika sekunder.

    $backup = "C:\backup"
    New-Item $backup -ItemType directory
    net share backup=$backup "/grant:$acct1,FULL" "/grant:$acct2,FULL"
    icacls.exe "$backup" /grant:r ("$acct1" + ":(OI)(CI)F") ("$acct2" + ":(OI)(CI)F")
    
  11. Buat database di ContosoSQL1 yang disebut MyDB1, ambil cadangan penuh dan cadangan log, dan pulihkan di ContosoSQL2dengan opsi WITH NORECOVERY .

    Invoke-SqlCmd -Query "CREATE database $db"
    Backup-SqlDatabase -Database $db -BackupFile "$backupShare\db.bak" -ServerInstance $server1
    Backup-SqlDatabase -Database $db -BackupFile "$backupShare\db.log" -ServerInstance $server1 -BackupAction Log
    Restore-SqlDatabase -Database $db -BackupFile "$backupShare\db.bak" -ServerInstance $server2 -NoRecovery
    Restore-SqlDatabase -Database $db -BackupFile "$backupShare\db.log" -ServerInstance $server2 -RestoreAction Log -NoRecovery
    
  12. Buat titik akhir grup ketersediaan di VM SQL Server dan atur izin yang tepat pada titik akhir.

    $endpoint =
      New-SqlHadrEndpoint MyMirroringEndpoint `
        -Port 5022 `
        -Path "SQLSERVER:\SQL\$server1\Default"
      Set-SqlHadrEndpoint `
        -InputObject $endpoint `
        -State "Started"
    $endpoint =
      New-SqlHadrEndpoint MyMirroringEndpoint `
        -Port 5022 `
        -Path "SQLSERVER:\SQL\$server2\Default"
    Set-SqlHadrEndpoint `
         -InputObject $endpoint `
         -State "Started"
    
    Invoke-SqlCmd -Query "CREATE LOGIN [$acct2] FROM WINDOWS" -ServerInstance $server1
    Invoke-SqlCmd -Query "GRANT CONNECT ON ENDPOINT::[MyMirroringEndpoint] TO [$acct2]" -ServerInstance $server1
    Invoke-SqlCmd -Query "CREATE LOGIN [$acct1] FROM WINDOWS" -ServerInstance $server2
    Invoke-SqlCmd -Query "GRANT CONNECT ON ENDPOINT::[MyMirroringEndpoint] TO [$acct1]" -ServerInstance $server2
    
  13. Buat replika ketersediaan.

    $primaryReplica =
       New-SqlAvailabilityReplica `
         -Name $server1 `
         -EndpointURL "TCP://$server1.corp.contoso.com:5022" `
         -AvailabilityMode "SynchronousCommit" `
         -FailoverMode "Automatic" `
         -Version 11 `
         -AsTemplate
    $secondaryReplica =
       New-SqlAvailabilityReplica `
         -Name $server2 `
         -EndpointURL "TCP://$server2.corp.contoso.com:5022" `
         -AvailabilityMode "SynchronousCommit" `
         -FailoverMode "Automatic" `
         -Version 11 `
         -AsTemplate
    
  14. Terakhir, buat grup ketersediaan dan bergabunglah dengan replika sekunder ke grup ketersediaan.

    New-SqlAvailabilityGroup `
        -Name $ag `
        -Path "SQLSERVER:\SQL\$server1\Default" `
        -AvailabilityReplica @($primaryReplica,$secondaryReplica) `
        -Database $db
    Join-SqlAvailabilityGroup `
        -Path "SQLSERVER:\SQL\$server2\Default" `
        -Name $ag
    Add-SqlAvailabilityDatabase `
        -Path "SQLSERVER:\SQL\$server2\Default\AvailabilityGroups\$ag" `
        -Database $db
    

Langkah berikutnya

Anda sekarang telah berhasil menerapkan SQL Server Selalu Menyala dengan membuat grup ketersediaan di Azure. Untuk mengonfigurasi pendengar untuk grup ketersediaan ini, lihat Mengonfigurasi pendengar ILB untuk grup ketersediaan Always On di Azure.

Untuk informasi lain tentang menggunakan SQL Server di Azure, lihat SQL Server di komputer virtual Azure.