Tutorial: Mengonfigurasi grup ketersediaan untuk SQL Server pada komputer virtual RHEL di Azure
Berlaku untuk: SQL Server di Azure VM
Catatan
Kami menggunakan SQL Server 2017 (14.x) dengan RHEL 7.6 dalam tutorial ini, tetapi dimungkinkan untuk menggunakan SQL Server 2019 (15.x) di RHEL 7 atau RHEL 8 untuk mengonfigurasi ketersediaan tinggi. Perintah untuk mengonfigurasi kluster Pacemaker dan sumber daya grup ketersediaan telah berubah di RHEL 8, dan Anda mungkin ingin melihat artikel Membuat sumber daya grup ketersediaan dan sumber daya RHEL 8 untuk informasi selengkapnya tentang perintah yang benar.
Dalam tutorial ini, Anda akan mempelajari cara:
- Membuat grup sumber daya baru, set ketersediaan, dan komputer virtual Linux (komputer virtual)
- Mengaktifkan ketersediaan tinggi (HA)
- Membuat kluster Pacemaker
- Mengonfigurasi agen anggar dengan membuat perangkat STONITH
- Memasang SQL Server dan mssql-tools di RHEL
- Mengonfigurasikan grup ketersediaan SQL Server Always On
- Mengonfigurasikan sumber daya grup ketersediaan (AG) di kluster Pacemaker
- Menguji kegagalan dan agen anggar
Tutorial ini menggunakan Azure CLI untuk menyebarkan sumber daya di Azure.
Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum Anda memulai.
Prasyarat
Gunakan lingkungan Bash di Azure Cloud Shell. Untuk informasi selengkapnya, lihat Mulai Cepat untuk Bash di Azure Cloud Shell.
Jika Anda lebih suka menjalankan perintah referensi CLI secara lokal, instal Azure CLI. Jika Anda menjalankan Windows atau macOS, pertimbangkan untuk menjalankan Azure CLI dalam kontainer Docker. Untuk informasi lebih lanjut, lihat Cara menjalankan Azure CLI di kontainer Docker.
Jika Anda menggunakan instalasi lokal, masuk ke Azure CLI dengan menggunakan perintah login az. Untuk menyelesaikan proses autentikasi, ikuti langkah-langkah yang ditampilkan di terminal Anda. Untuk opsi masuk lainnya, lihat Masuk dengan Azure CLI.
Saat Anda diminta, instal ekstensi Azure CLI pada penggunaan pertama. Untuk informasi selengkapnya tentang ekstensi, lihat Menggunakan ekstensi dengan Azure CLI.
Jalankan versi az untuk menemukan versi dan pustaka dependen yang diinstal. Untuk meningkatkan ke versi terbaru, jalankan peningkatan az.
- Artikel ini memerlukan Azure CLI versi 2.0.30 atau yang lebih baru. Jika menggunakan Azure Cloud Shell, versi terbaru sudah terinstal.
Buat grup sumber daya
Jika Anda memiliki lebih dari satu langganan, set langganan yang ingin Anda sebarkan sumber daya ini.
Gunakan perintah berikut untuk membuat grup sumber daya <resourceGroupName>
di suatu wilayah. Ganti <resourceGroupName>
dengan nama pilihan Anda. Kami menggunakan tutorial East US 2
ini. Untuk informasi selengkapnya, lihat Mulai Cepat berikut ini.
az group create --name <resourceGroupName> --location eastus2
Membuat set ketersediaan
Langkah selanjutnya adalah membuat kumpulan ketersediaan. Jalankan perintah berikut ini di Azure Cloud Shell, dan ganti <resourceGroupName>
dengan nama grup sumber daya Anda. Pilih nama untuk <availabilitySetName>
.
az vm availability-set create \
--resource-group <resourceGroupName> \
--name <availabilitySetName> \
--platform-fault-domain-count 2 \
--platform-update-domain-count 2
Anda akan mendapatkan hasil berikut setelah perintah selesai:
{
"id": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/availabilitySets/<availabilitySetName>",
"location": "eastus2",
"name": "<availabilitySetName>",
"platformFaultDomainCount": 2,
"platformUpdateDomainCount": 2,
"proximityPlacementGroup": null,
"resourceGroup": "<resourceGroupName>",
"sku": {
"capacity": null,
"name": "Aligned",
"tier": null
},
"statuses": null,
"tags": {},
"type": "Microsoft.Compute/availabilitySets",
"virtualMachines": []
}
Membuat komputer virtual RHEL di dalam set ketersediaan
Peringatan
Jika Anda memilih gambar RHEL Pay-As-You-Go (PAYG), dan mengonfigurasi ketersediaan tinggi (HA), Anda mungkin diharuskan untuk mendaftarkan langganan Anda. Ini dapat menyebabkan Anda membayar dua kali untuk langganan, karena Anda akan dikenakan biaya untuk langganan Microsoft Azure RHEL untuk VM, dan langganan Red Hat. Untuk informasi selengkapnya, lihat https://access.redhat.com/solutions/2458541 .
Untuk menghindari "ditagih ganda", gunakan gambar RHEL HA saat membuat VM Azure. Gambar yang ditawarkan sebagai gambar RHEL-HA juga merupakan gambar PAYG dengan repo HA yang diaktifkan sebelumnya.
Dapatkan daftar gambar komputer virtual yang menawarkan RHEL dengan ketersediaan tinggi:
az vm image list --all --offer "RHEL-HA"
Anda akan melihat hasil berikut ini:
[ { "offer": "RHEL-HA", "publisher": "RedHat", "sku": "7.4", "urn": "RedHat:RHEL-HA:7.4:7.4.2019062021", "version": "7.4.2019062021" }, { "offer": "RHEL-HA", "publisher": "RedHat", "sku": "7.5", "urn": "RedHat:RHEL-HA:7.5:7.5.2019062021", "version": "7.5.2019062021" }, { "offer": "RHEL-HA", "publisher": "RedHat", "sku": "7.6", "urn": "RedHat:RHEL-HA:7.6:7.6.2019062019", "version": "7.6.2019062019" }, { "offer": "RHEL-HA", "publisher": "RedHat", "sku": "8.0", "urn": "RedHat:RHEL-HA:8.0:8.0.2020021914", "version": "8.0.2020021914" }, { "offer": "RHEL-HA", "publisher": "RedHat", "sku": "8.1", "urn": "RedHat:RHEL-HA:8.1:8.1.2020021914", "version": "8.1.2020021914" }, { "offer": "RHEL-HA", "publisher": "RedHat", "sku": "80-gen2", "urn": "RedHat:RHEL-HA:80-gen2:8.0.2020021915", "version": "8.0.2020021915" }, { "offer": "RHEL-HA", "publisher": "RedHat", "sku": "81_gen2", "urn": "RedHat:RHEL-HA:81_gen2:8.1.2020021915", "version": "8.1.2020021915" } ]
Untuk tutorial ini, kami memilih gambar
RedHat:RHEL-HA:7.6:7.6.2019062019
untuk contoh RHEL 7 dan memilihRedHat:RHEL-HA:8.1:8.1.2020021914
untuk contoh RHEL 8.Anda juga dapat memilih SQL Server 2019 (15.x) yang telah diinstal sebelumnya pada gambar RHEL8-HA. Untuk mendapatkan daftar gambar ini, jalankan perintah berikut:
az vm image list --all --offer "sql2019-rhel8"
Anda akan melihat hasil berikut ini:
[ { "offer": "sql2019-rhel8", "publisher": "MicrosoftSQLServer", "sku": "enterprise", "urn": "MicrosoftSQLServer:sql2019-rhel8:enterprise:15.0.200317", "version": "15.0.200317" }, { "offer": "sql2019-rhel8", "publisher": "MicrosoftSQLServer", "sku": "enterprise", "urn": "MicrosoftSQLServer:sql2019-rhel8:enterprise:15.0.200512", "version": "15.0.200512" }, { "offer": "sql2019-rhel8", "publisher": "MicrosoftSQLServer", "sku": "sqldev", "urn": "MicrosoftSQLServer:sql2019-rhel8:sqldev:15.0.200317", "version": "15.0.200317" }, { "offer": "sql2019-rhel8", "publisher": "MicrosoftSQLServer", "sku": "sqldev", "urn": "MicrosoftSQLServer:sql2019-rhel8:sqldev:15.0.200512", "version": "15.0.200512" }, { "offer": "sql2019-rhel8", "publisher": "MicrosoftSQLServer", "sku": "standard", "urn": "MicrosoftSQLServer:sql2019-rhel8:standard:15.0.200317", "version": "15.0.200317" }, { "offer": "sql2019-rhel8", "publisher": "MicrosoftSQLServer", "sku": "standard", "urn": "MicrosoftSQLServer:sql2019-rhel8:standard:15.0.200512", "version": "15.0.200512" } ]
Jika Anda menggunakan salah satu gambar di atas untuk membuat komputer virtual, itu memiliki SQL Server 2019 (15.x) yang telah diinstal sebelumnya. Lompati bagian Pasang SQL Server dan mssql-tools seperti yang dijelaskan dalam artikel ini.
Penting
Nama komputer harus kurang dari 15 karakter untuk menyiapkan grup ketersediaan. Nama pengguna tidak boleh berisi karakter huruf besar, dan kata sandi harus memiliki lebih dari 12 karakter.
Kami ingin membuat 3 komputer virtual dalam set ketersediaan. Ganti nilai-nilai ini dalam perintah berikut:
<resourceGroupName>
<VM-basename>
<availabilitySetName>
<VM-Size>
- Contohnya adalah "Standard_D16_v3"<username>
<adminPassword>
for i in `seq 1 3`; do az vm create \ --resource-group <resourceGroupName> \ --name <VM-basename>$i \ --availability-set <availabilitySetName> \ --size "<VM-Size>" \ --image "RedHat:RHEL-HA:7.6:7.6.2019062019" \ --admin-username "<username>" \ --admin-password "<adminPassword>" \ --authentication-type all \ --generate-ssh-keys done
Perintah di atas membuat VM, dan membuat jaringan virtual default untuk VM tersebut. Untuk informasi selengkapnya tentang konfigurasi yang berbeda, lihat artikel membuat az vm.
Anda akan mendapatkan hasil yang mirip dengan yang berikut setelah perintah selesai untuk setiap komputer virtual:
{
"fqdns": "",
"id": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<VM1>",
"location": "eastus2",
"macAddress": "<Some MAC address>",
"powerState": "VM running",
"privateIpAddress": "<IP1>",
"publicIpAddress": "",
"resourceGroup": "<resourceGroupName>",
"zones": ""
}
Penting
Gambar default yang dibuat dengan perintah di atas membuat disk OS 32GB secara default. Anda berpotensi kehabisan ruang dengan penginstalan default ini. Anda dapat menggunakan parameter berikut yang ditambahkan ke az vm create
perintah di atas untuk membuat disk OS dengan 128GB sebagai contoh: --os-disk-size-gb 128
.
Anda kemudian dapat konfigurasikan Logical Volume Manager (LVM) jika Anda perlu memperluas volume folder yang sesuai untuk mengakomodasi penginstalan Anda.
Pengujian koneksi ke komputer virtual yang telah dibuat
Sambungkan ke komputer virtual1 atau komputer virtual lainnya menggunakan perintah berikut ini di Azure Cloud Shell. Jika Anda tidak dapat menemukan IP VM Anda, ikuti Mulai Cepat ini di Azure Cloud Shell.
ssh <username>@publicipaddress
Jika koneksi berhasil, Anda akan melihat output berikut yang mewakili terminal Linux:
[<username>@<VM1> ~]$
Ketik exit
untuk meninggalkan sesi SSH.
Aktifkan Ketersediaan Tinggi
Penting
Untuk menyelesaikan bagian tutorial ini, Anda harus memiliki langganan RHEL dan Add-on Ketersediaan Tinggi. Jika Anda menggunakan gambar yang direkomendasikan di bagian sebelumnya, Anda tidak perlu mendaftarkan langganan lain.
Sambungkan ke setiap simpul VM dan ikuti panduan ini untuk mengaktifkan KETERSEDIAAN TINGGI. Untuk informasi selengkapnya, lihat mengaktifkan langganan ketersediaan tinggi untuk RHEL.
Tip
Akan lebih mudah jika Anda membuka sesi SSH ke masing-masing komputer virtual secara bersamaan karena perintah yang sama perlu dijalankan pada setiap komputer virtual di seluruh artikel.
Jika Anda menyalin dan menempelkan beberapa sudo
perintah, dan dimintai kata sandi, perintah tambahan tidak akan berjalan. Jalankan setiap perintah secara terpisah.
Untuk membuka port firewall Pacemaker, jalankan perintah berikut pada setiap VM:
sudo firewall-cmd --permanent --add-service=high-availability sudo firewall-cmd --reload
Perbarui dan pasang paket Pacemaker pada semua simpul menggunakan perintah berikut:
Catatan
nmap diinstal sebagai bagian dari blok perintah ini sebagai alat untuk menemukan alamat IP yang tersedia di jaringan Anda. Anda tidak perlu menginstal nmap, tetapi akan berguna nanti dalam tutorial ini.
sudo yum update -y sudo yum install -y pacemaker pcs fence-agents-all resource-agents fence-agents-azure-arm nmap sudo reboot
Set kata sandi untuk pengguna default yang dibuat saat memasang paket Pacemaker. Gunakan kata sandi yang sama pada semua simpul.
sudo passwd hacluster
Gunakan perintah berikut untuk membuka file host dan menyiapkan resolusi nama host. Untuk informasi selengkapnya, lihat Mengonfigurasi AG pada mengonfigurasi file host.
sudo vi /etc/hosts
Di editor vi, masukkan
i
untuk menyisipkan teks, dan pada baris kosong, tambahkan IP Privat dari komputer virtual terkait. Kemudian tambahkan nama komputer virtual setelah spasi di samping IP. Setiap baris harus memiliki entri terpisah.<IP1> <VM1> <IP2> <VM2> <IP3> <VM3>
Penting
Kami menyarankan agar Anda menggunakan alamat IP Privat Anda dalam contoh sebelumnya. Menggunakan alamat IP Publik dalam konfigurasi ini akan menyebabkan penyetelan gagal dan kami tidak menyarankan untuk mengekspos komputer virtual Anda ke jaringan eksternal.
Untuk keluar dari editor vi, pertama-tama tekan kunci Esc, dan kemudian masukkan perintah
:wq
untuk menulis file dan berhenti.
Membuat kluster Pacemaker
Di bagian ini, Anda mengaktifkan dan memulai layanan pcsd, lalu mengonfigurasi kluster. Untuk SQL Server di Linux, sumber daya kluster tidak dibuat secara otomatis. Anda perlu mengaktifkan dan membuat sumber daya Pacemaker secara manual. Untuk informasi selengkapnya, lihat artikel tentang mengonfigurasi instans kluster failover untuk RHEL.
Mengaktifkan dan memulai layanan pcsd dan Pacemaker
Jalankan perintah pada semua simpul. Perintah ini memungkinkan simpul untuk bergabung kembali dengan kluster setelah setiap simpul dimulai ulang.
sudo systemctl enable pcsd sudo systemctl start pcsd sudo systemctl enable pacemaker
Hapus konfigurasi kluster yang ada dari semua simpul. Jalankan perintah berikut:
sudo pcs cluster destroy sudo systemctl enable pacemaker
Pada simpul utama, jalankan perintah berikut untuk siapkan kluster.
- Saat menjalankan
pcs cluster auth
perintah untuk mengautentikasi node kluster, Anda akan dimintai kata sandi. Masukkan kata sandi untuk pengguna hacluster yang dibuat sebelumnya.
RHEL7
sudo pcs cluster auth <VM1> <VM2> <VM3> -u hacluster sudo pcs cluster setup --name az-hacluster <VM1> <VM2> <VM3> --token 30000 sudo pcs cluster start --all sudo pcs cluster enable --all
RHEL8
Untuk RHEL 8, Anda perlu mengautentikasi simpul secara terpisah. Masukkan nama pengguna dan kata sandi secara manual untuk hacluster saat diminta.
sudo pcs host auth <node1> <node2> <node3> sudo pcs cluster setup <clusterName> <node1> <node2> <node3> sudo pcs cluster start --all sudo pcs cluster enable --all
- Saat menjalankan
Jalankan perintah berikut untuk memeriksa bahwa semua simpul sedang online.
sudo pcs status
RHEL 7
Jika semua simpul online, Anda akan melihat output yang mirip dengan contoh berikut:
Cluster name: az-hacluster WARNINGS: No stonith devices and stonith-enabled is not false Stack: corosync Current DC: <VM2> (version 1.1.19-8.el7_6.5-c3c624ea3d) - partition with quorum Last updated: Fri Aug 23 18:27:57 2019 Last change: Fri Aug 23 18:27:56 2019 by hacluster via crmd on <VM2> 3 nodes configured 0 resources configured Online: [ <VM1> <VM2> <VM3> ] No resources Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled
RHEL 8
Cluster name: az-hacluster WARNINGS: No stonith devices and stonith-enabled is not false Cluster Summary: * Stack: corosync * Current DC: <VM2> (version 1.1.19-8.el7_6.5-c3c624ea3d) - partition with quorum * Last updated: Fri Aug 23 18:27:57 2019 * Last change: Fri Aug 23 18:27:56 2019 by hacluster via crmd on <VM2> * 3 nodes configured * 0 resource instances configured Node List: * Online: [ <VM1> <VM2> <VM3> ] Full List of Resources: * No resources Daemon Status: * corosync: active/enabled * pacemaker: active/enabled * pcsd: active/enabled
Set pilihan yang diharapkan di kluster langsung menjadi 3. Perintah ini hanya memengaruhi kluster langsung, dan tidak mengubah file konfigurasi.
Pada semua simpul, tetapkan pilihan suara yang diharapkan dengan perintah berikut:
sudo pcs quorum expected-votes 3
Mengonfigurasi agen anggar
Untuk mengonfigurasi agen anggar, instruksi berikut dimodifikasi untuk tutorial ini. Untuk informasi selengkapnya, lihat membuat perangkat STONITH.
Periksa versi Azure Fence Agent untuk memastikan bahwa azure Fence Agent diperbarui. Gunakan perintah berikut:
sudo yum info fence-agents-azure-arm
Anda akan melihat output serupa dengan contoh di bawah ini.
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
Installed Packages
Name : fence-agents-azure-arm
Arch : x86_64
Version : 4.2.1
Release : 11.el7_6.8
Size : 28 k
Repo : installed
From repo : rhel-ha-for-rhel-7-server-eus-rhui-rpms
Summary : Fence agent for Azure Resource Manager
URL : https://github.com/ClusterLabs/fence-agents
License : GPLv2+ and LGPLv2+
Description : The fence-agents-azure-arm package contains a fence agent for Azure instances.
Mendaftarkan aplikasi baru di ID Microsoft Entra
Untuk mendaftarkan aplikasi baru di ID Microsoft Entra (sebelumnya Azure Active Directory), ikuti langkah-langkah berikut:
- Buka https://portal.azure.com.
- Buka panel Properti ID Microsoft Entra dan tuliskan
Tenant ID
. - Pilih Pendaftaran aplikasi.
- Pilih Pendaftaran baru.
- Masukkan Nama seperti
<resourceGroupName>-app
. Untuk jenis akun yang didukung, pilih Akun hanya di direktori organisasi ini (hanya Microsoft - Penyewa tunggal). - Pilih Web untuk URI Pengalihan, dan masukkan URL (misalnya,
http://localhost
) dan pilih Tambahkan. URL masuk dapat berupa URL yang valid. Setelah selesai, pilih Daftar. - Pilih Sertifikat dan rahasia untuk pendaftaran Aplikasi baru Anda, lalu pilih Rahasia klien baru.
- Masukkan deskripsi untuk kunci baru (rahasia klien), lalu pilih Tambahkan.
- Tuliskan nilai rahasianya. Ini digunakan sebagai kata sandi untuk perwakilan layanan.
- Pilih Ikhtisar. Tuliskan ID Aplikasi. Ini digunakan sebagai nama pengguna (ID masuk dalam langkah-langkah berikut) dari perwakilan layanan.
Membuat peran kustom untuk agen anggar
Ikuti tutorial untuk Membuat peran kustom Azure menggunakan CLI Azure.
File JSON Anda akan terlihat seperti contoh berikut:
- Ganti
<username>
dengan nama pilihan Anda. Hal ini untuk menghindari duplikasi saat membuat definisi peran ini. - Ganti
<subscriptionId>
dengan ID Langganan Azure Anda.
{
"Name": "Linux Fence Agent Role-<username>",
"Id": null,
"IsCustom": true,
"Description": "Allows to power-off and start virtual machines",
"Actions": [
"Microsoft.Compute/*/read",
"Microsoft.Compute/virtualMachines/powerOff/action",
"Microsoft.Compute/virtualMachines/start/action"
],
"NotActions": [
],
"AssignableScopes": [
"/subscriptions/<subscriptionId>"
]
}
Untuk menambahkan peran, jalankan perintah berikut:
- Ganti
<filename>
dengan nama file. - Jika Anda menjalankan perintah dari jalur selain folder tempat file disimpan, sertakan jalur folder file dalam perintah.
az role definition create --role-definition "<filename>.json"
Anda akan menemukan output berikut:
{
"assignableScopes": [
"/subscriptions/<subscriptionId>"
],
"description": "Allows to power-off and start virtual machines",
"id": "/subscriptions/<subscriptionId>/providers/Microsoft.Authorization/roleDefinitions/<roleNameId>",
"name": "<roleNameId>",
"permissions": [
{
"actions": [
"Microsoft.Compute/*/read",
"Microsoft.Compute/virtualMachines/powerOff/action",
"Microsoft.Compute/virtualMachines/start/action"
],
"dataActions": [],
"notActions": [],
"notDataActions": []
}
],
"roleName": "Linux Fence Agent Role-<username>",
"roleType": "CustomRole",
"type": "Microsoft.Authorization/roleDefinitions"
}
Menetapkan peran kustom untuk Kepala Sekolah Layanan
Tetapkan peran kustom Linux Fence Agent Role-<username>
yang dibuat pada langkah terakhir ke Perwakilan layanan. Jangan gunakan peran Pemilik lagi.
- Buka https://portal.azure.com
- Buka panel Semua sumber daya
- Pilih komputer virtual dari simpul kluster pertama
- Pilih Kontrol akses (IAM)
- Pilih Tambahkan penetapan peran
- Pilih peran
Linux Fence Agent Role-<username>
dari daftar Peran - Di daftar Pilih, masukkan nama aplikasi yang Anda buat sebelumnya,
<resourceGroupName>-app
- Pilih Simpan
- Ulangi langkah-langkah ini untuk semua node kluster.
Membuat perangkat STONITH
Jalankan perintah berikut pada simpul 1:
- Ganti
<ApplicationID>
dengan nilai ID dari pendaftaran aplikasi Anda. - Ganti
<servicePrincipalPassword>
nilai dengan dari rahasia klien. - Ganti
<resourceGroupName>
dengan grup sumber daya dari langganan Anda yang digunakan untuk tutorial ini. - Ganti
<tenantID>
dan<subscriptionId>
dari Langganan Azure Anda.
sudo pcs property set stonith-timeout=900
sudo pcs stonith create rsc_st_azure fence_azure_arm login="<ApplicationID>" passwd="<servicePrincipalPassword>" resourceGroup="<resourceGroupName>" tenantId="<tenantID>" subscriptionId="<subscriptionId>" power_timeout=240 pcmk_reboot_timeout=900
Karena kami sudah menambahkan aturan ke firewall kami untuk memungkinkan layanan ketersediaan tinggi (--add-service=high-availability
), tidak perlu membuka port firewall berikut pada semua simpul: 2224, 3121, 21064, 5405. Namun, jika Anda mengalami semua jenis masalah koneksi dengan KETERSEDIAAN TINGGI, gunakan perintah berikut untuk membuka port ini yang terkait dengan KETERSEDIAAN TINGGI.
Tip
Anda dapat secara opsional menambahkan semua port dalam tutorial ini sekaligus untuk menghemat waktu. Port yang perlu dibuka dijelaskan di bagian relevannya yang mengikuti. Jika Anda ingin menambahkan semua port sekarang, tambahkan port tambahan: 1433 dan 5022.
sudo firewall-cmd --zone=public --add-port=2224/tcp --add-port=3121/tcp --add-port=21064/tcp --add-port=5405/tcp --permanent
sudo firewall-cmd --reload
Memasang SQL Server dan mssql-tools
Catatan
Jika Anda telah membuat VM dengan SQL Server 2019 (15.x) yang telah diinstal sebelumnya pada RHEL8-HA maka Anda dapat melewati langkah-langkah di bawah ini untuk menginstal SQL Server dan mssql-tools dan memulai bagian Konfigurasikan Grup Ketersediaan setelah Anda menyiapkan kata sandi sa pada semua VM dengan menjalankan perintah sudo /opt/mssql/bin/mssql-conf set-sa-password
pada semua VM.
Gunakan bagian di bawah ini untuk memasang SQL Server dan mssql-tools pada komputer virtual. Anda dapat memilih salah satu sampel di bawah ini untuk menginstal SQL Server 2017 (14.x) pada RHEL 7 atau SQL Server 2019 (15.x) di RHEL 8. Lakukan masing-masing tindakan ini pada semua simpul. Untuk informasi selengkapnya, lihat Memasang SQL Server pada komputer virtual Red Hat.
Menginstal SQL Server pada VM
Perintah berikut ini digunakan untuk memasang SQL Server:
RHEL 7 dengan SQL Server 2017
sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-2017.repo
sudo yum install -y mssql-server
sudo /opt/mssql/bin/mssql-conf setup
sudo yum install mssql-server-ha
RHEL 8 dengan SQL Server 2019
sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/8/mssql-server-2019.repo
sudo yum install -y mssql-server
sudo /opt/mssql/bin/mssql-conf setup
sudo yum install mssql-server-ha
Membuka port firewall 1433 untuk sambungan jarak jauh
Anda perlu membuka port 1433 pada VM untuk terhubung dari jarak jauh. Gunakan perintah berikut untuk membuka port 1433 di firewall setiap komputer virtual:
sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent
sudo firewall-cmd --reload
Menginstal alat baris perintah SQL Server
Perintah berikut ini digunakan untuk memasang alat baris-perintah SQL Server. Untuk informasi selengkapnya, lihat memasang alat baris-perintah SQL Server.
RHEL 7
sudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/7/prod.repo
sudo yum install -y mssql-tools unixODBC-devel
RHEL 8
sudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/8/prod.repo
sudo yum install -y mssql-tools unixODBC-devel
Catatan
Untuk kenyamanan, tambahkan /opt/mssql-tools/bin/ ke variabel lingkungan JALUR Anda. Ini memungkinkan Anda untuk menjalankan alat tanpa menentukan jalur lengkap. Jalankan perintah berikut untuk memodifikasi PATH untuk sesi login dan sesi interaktif/non-login:echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
Periksa status SQL Server
Setelah selesai dengan konfigurasi, Anda dapat memeriksa status SQL Server dan memverifikasi bahwa konfigurasi sedang berjalan:
systemctl status mssql-server --no-pager
Anda akan menemukan output berikut:
● mssql-server.service - Microsoft SQL Server Database Engine
Loaded: loaded (/usr/lib/systemd/system/mssql-server.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2019-12-05 17:30:55 UTC; 20min ago
Docs: https://learn.microsoft.com/sql/linux
Main PID: 11612 (sqlservr)
CGroup: /system.slice/mssql-server.service
├─11612 /opt/mssql/bin/sqlservr
└─11640 /opt/mssql/bin/sqlservr
Mengonfigurasi grup ketersediaan
Gunakan langkah-langkah berikut untuk mengonfigurasi grup ketersediaan SQL Server Always On untuk komputer virtual Anda. Untuk informasi selengkapnya, lihat Mengonfigurasi grup ketersediaan AlwaysOn SQL Server untuk ketersediaan tinggi di Linux.
Aktifkan Grup Ketersediaan AlwaysOn dan hidupkan ulang mssql-server
Aktifkan Grup Ketersediaan AlwaysOn pada setiap simpul yang menghosting instans SQL Server. Kemudian hidupkan ulang mssql-server. Jalankan skrip berikut:
sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1
sudo systemctl restart mssql-server
Membuat sertifikat
Saat ini kami tidak mendukung autentikasi AD ke titik akhir AG. Oleh karena itu, kita harus menggunakan sertifikat untuk enkripsi titik akhir AG.
Sambungkan ke semua simpul menggunakan SQL Server Management Studio (SSMS) atau sqlcmd. Jalankan perintah berikut untuk mengaktifkan sesi AlwaysOn_health dan buat kunci master:
Penting
Jika Anda terhubung dari jarak jauh ke instans SQL Server, Anda harus membuka port 1433 di firewall Anda. Anda juga harus mengizinkan koneksi masuk ke port 1433 di NSG Anda untuk setiap komputer virtual. Untuk informasi selengkapnya, lihat Membuat aturan keamanan untuk membuat aturan keamanan masuk.
- Ganti
<Master_Key_Password>
dengan kata sandi Anda sendiri.
ALTER EVENT SESSION AlwaysOn_health ON SERVER WITH (STARTUP_STATE=ON); GO CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Master_Key_Password>';
- Ganti
Sambungkan ke replika utama menggunakan SSMS atau sqlcmd. Perintah berikut membuat sertifikat di
/var/opt/mssql/data/dbm_certificate.cer
dan kunci privat divar/opt/mssql/data/dbm_certificate.pvk
pada replika SQL Server utama Anda:- Ganti
<Private_Key_Password>
dengan kata sandi Anda sendiri.
CREATE CERTIFICATE dbm_certificate WITH SUBJECT = 'dbm'; GO BACKUP CERTIFICATE dbm_certificate TO FILE = '/var/opt/mssql/data/dbm_certificate.cer' WITH PRIVATE KEY ( FILE = '/var/opt/mssql/data/dbm_certificate.pvk', ENCRYPTION BY PASSWORD = '<Private_Key_Password>' ); GO
- Ganti
Keluar dari sesi sqlcmd dengan menjalankan exit
perintah, dan kembali ke sesi SSH Anda.
Salin sertifikat ke replika sekunder dan buat sertifikat di server
Salin dua file yang dibuat ke lokasi yang sama di semua server yang akan menghosting replika ketersediaan.
Pada server utama, jalankan
scp
perintah berikut ini untuk menyalin sertifikat ke server target:- Ganti
<username>
dan<VM2>
dengan nama pengguna dan nama VM target yang Anda gunakan. - Jalankan perintah ini untuk semua replika sekunder.
Catatan
Anda tidak perlu jalankan
sudo -i
, yang memberi Anda lingkungan akar. Anda hanya bisa menjalankansudo
perintah di depan setiap perintah seperti yang kami lakukan sebelumnya dalam tutorial ini.# The below command allows you to run commands in the root environment sudo -i
scp /var/opt/mssql/data/dbm_certificate.* <username>@<VM2>:/home/<username>
- Ganti
Pada server target, jalankan perintah berikut ini:
- Ganti
<username>
dengan nama pengguna Anda. - Perintah
mv
memindahkan file atau direktori dari satu tempat ke tempat lain. - Perintah
chown
ini digunakan untuk mengubah pemilik dan grup file, direktori, atau tautan. - Jalankan perintah ini untuk semua replika sekunder.
sudo -i mv /home/<username>/dbm_certificate.* /var/opt/mssql/data/ cd /var/opt/mssql/data chown mssql:mssql dbm_certificate.*
- Ganti
Skrip Transact-SQL berikut ini membuat sertifikat dari cadangan yang Anda buat pada replika SQL Server utama. Perbarui skrip dengan kata sandi yang kuat. Kata sandi dekripsi adalah kata sandi yang sama dengan yang Anda gunakan untuk membuat file .pvk di langkah sebelumnya. Untuk membuat sertifikat, jalankan skrip berikut menggunakan sqlcmd atau SSMS di semua server sekunder:
CREATE CERTIFICATE dbm_certificate FROM FILE = '/var/opt/mssql/data/dbm_certificate.cer' WITH PRIVATE KEY ( FILE = '/var/opt/mssql/data/dbm_certificate.pvk', DECRYPTION BY PASSWORD = '<Private_Key_Password>' ); GO
Membuat titik akhir pencerminan database pada semua replika
Jalankan skrip berikut pada semua instans SQL Server menggunakan sqlcmd atau SSMS:
CREATE ENDPOINT [Hadr_endpoint]
AS TCP (LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING (
ROLE = ALL,
AUTHENTICATION = CERTIFICATE dbm_certificate,
ENCRYPTION = REQUIRED ALGORITHM AES
);
GO
ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED;
GO
Membuat grup ketersediaan
Sambungkan ke instans SQL Server yang menghosting replika utama menggunakan sqlcmd atau SSMS. Jalankan perintah berikut untuk membuat grup ketersediaan:
- Ganti
ag1
dengan nama Grup Ketersediaan yang diinginkan. - Ganti nilai
<VM1>
,<VM2>
, dan<VM3>
dengan nama instans SQL Server yang menghosting replika.
CREATE AVAILABILITY GROUP [ag1]
WITH (DB_FAILOVER = ON, CLUSTER_TYPE = EXTERNAL)
FOR REPLICA ON
N'<VM1>'
WITH (
ENDPOINT_URL = N'tcp://<VM1>:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = EXTERNAL,
SEEDING_MODE = AUTOMATIC
),
N'<VM2>'
WITH (
ENDPOINT_URL = N'tcp://<VM2>:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = EXTERNAL,
SEEDING_MODE = AUTOMATIC
),
N'<VM3>'
WITH(
ENDPOINT_URL = N'tcp://<VM3>:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = EXTERNAL,
SEEDING_MODE = AUTOMATIC
);
GO
ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;
GO
Membuat data masuk SQL Server untuk Pacemaker
Pada semua instans SQL Server, buat login SQL Server untuk Pacemaker. Transact-SQL berikut ini membuat login.
- Ganti
<password>
dengan kata sandi kompleks Anda sendiri.
USE [master]
GO
CREATE LOGIN [pacemakerLogin] with PASSWORD= N'<password>';
GO
ALTER SERVER ROLE [sysadmin] ADD MEMBER [pacemakerLogin];
GO
Pada semua instans SQL Server, simpan informasi masuk yang digunakan untuk login SQL Server.
Buat file :
sudo vi /var/opt/mssql/secrets/passwd
Tambahkan baris berikut ke file :
pacemakerLogin <password>
Untuk keluar dari editor vi, pertama-tama tekan kunci Esc, dan kemudian masukkan perintah
:wq
untuk menulis file dan berhenti.Buat file hanya dapat dibaca oleh root:
sudo chown root:root /var/opt/mssql/secrets/passwd sudo chmod 400 /var/opt/mssql/secrets/passwd
Bergabung dengan replika sekunder ke grup ketersediaan
Untuk menggabungkan replika sekunder ke AG, Anda perlu membuka port 5022 pada firewall untuk semua server. Jalankan perintah berikut ini di sesi SSH Anda:
sudo firewall-cmd --zone=public --add-port=5022/tcp --permanent sudo firewall-cmd --reload
Pada replika sekunder Anda, jalankan perintah berikut untuk menggabungkan mereka ke AG:
ALTER AVAILABILITY GROUP [ag1] JOIN WITH (CLUSTER_TYPE = EXTERNAL); GO ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE; GO
Jalankan skrip Transact-SQL berikut pada replika utama dan setiap replika sekunder:
GRANT ALTER, CONTROL, VIEW DEFINITION ON AVAILABILITY GROUP::ag1 TO pacemakerLogin; GO GRANT VIEW SERVER STATE TO pacemakerLogin; GO
Setelah replika sekunder digabungkan, Anda dapat melihatnya di SQL Server Management Studio Object Explorer dengan meluaskan simpul Always On High Availability:
Menambahkan database ke Grup Ketersediaan
Kami mengikuti artikel mengonfigurasi grup ketersediaan tentang menambahkan database.
Perintah Transact-SQL berikut digunakan dalam langkah ini. Jalankan perintah ini pada replika utama:
CREATE DATABASE [db1]; -- creates a database named db1
GO
ALTER DATABASE [db1] SET RECOVERY FULL; -- set the database in full recovery model
GO
BACKUP DATABASE [db1] -- backs up the database to disk
TO DISK = N'/var/opt/mssql/data/db1.bak';
GO
ALTER AVAILABILITY GROUP [ag1] ADD DATABASE [db1]; -- adds the database db1 to the AG
GO
Memverifikasi bahwa database dibuat di server sekunder
Pada setiap replika SQL Server sekunder, jalankan kueri berikut untuk melihat apakah database db1 dibuat dan berada dalam status DISINKRONKAN:
SELECT * FROM sys.databases WHERE name = 'db1';
GO
SELECT DB_NAME(database_id) AS 'database', synchronization_state_desc FROM sys.dm_hadr_database_replica_states;
Jika synchronization_state_desc
daftar DISINKRONKAN untuk db1
, ini berarti replika disinkronkan. Sekunder ditampilkan di db1
replika utama.
Membuat sumber daya grup ketersediaan di kluster Pacemaker
Kami mengikuti panduan untuk membuat sumber daya grup ketersediaan di kluster Pacemaker.
Catatan
Komunikasi bebas bias
Artikel ini berisi referensi ke istilah budak, istilah yang dianggap menyinggung Microsoft saat digunakan dalam konteks ini. Istilah muncul dalam artikel ini karena saat ini muncul di perangkat lunak. Ketika istilah dihapus dari perangkat lunak, kami akan menghapusnya dari artikel.
Membuat sumber daya kluster AG
Gunakan salah satu perintah berikut berdasarkan lingkungan yang dipilih sebelumnya untuk membuat sumber daya
ag_cluster
dalam grup ketersediaanag1
.RHEL 7
sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 meta failure-timeout=30s master notify=true
RHEL 8
sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 meta failure-timeout=30s promotable notify=true
Pastikan sumber daya Anda online sebelum melanjutkan, menggunakan perintah berikut:
sudo pcs resource
Anda akan menemukan output berikut:
RHEL 7
[<username>@VM1 ~]$ sudo pcs resource Master/Slave Set: ag_cluster-master [ag_cluster] Masters: [ <VM1> ] Slaves: [ <VM2> <VM3> ]
RHEL 8
[<username>@VM1 ~]$ sudo pcs resource * Clone Set: ag_cluster-clone [ag_cluster] (promotable): * ag_cluster (ocf::mssql:ag) : Slave VMrhel3 (Monitoring) * ag_cluster (ocf::mssql:ag) : Master VMrhel1 (Monitoring) * ag_cluster (ocf::mssql:ag) : Slave VMrhel2 (Monitoring)
Membuat sumber daya IP virtual
Gunakan alamat IP statik yang tersedia dari jaringan Anda untuk membuat sumber daya IP virtual. Anda dapat menemukannya menggunakan alat perintah
nmap
.nmap -sP <IPRange> # For example: nmap -sP 10.0.0.* # The above will scan for all IP addresses that are already occupied in the 10.0.0.x space.
Atur properti berkemampuan stonith ke false:
sudo pcs property set stonith-enabled=false
Buat sumber daya IP virtual dengan menggunakan perintah berikut. Ganti
<availableIP>
dengan alamat IP yang tidak digunakan.sudo pcs resource create virtualip ocf:heartbeat:IPaddr2 ip=<availableIP>
Menambahkan batasan
Untuk memastikan bahwa alamat IP dan sumber daya AG berjalan pada simpul yang sama, batasan kolokasi harus dikonfigurasi. Jalankan perintah berikut:
RHEL 7
sudo pcs constraint colocation add virtualip ag_cluster-master INFINITY with-rsc-role=Master
RHEL 8
sudo pcs constraint colocation add virtualip with master ag_cluster-clone INFINITY with-rsc-role=Master
Buat batasan pemesanan untuk memastikan bahwa sumber daya AG sudah siap dan berjalan sebelum alamat IP. Sementara batasan kolokasi menyiratkan batasan pemesanan, ini menegakkannya.
RHEL 7
sudo pcs constraint order promote ag_cluster-master then start virtualip
RHEL 8
sudo pcs constraint order promote ag_cluster-clone then start virtualip
Untuk memverifikasi batasan, jalankan perintah berikut:
sudo pcs constraint list --full
Anda akan menemukan output berikut:
RHEL 7
Location Constraints: Ordering Constraints: promote ag_cluster-master then start virtualip (kind:Mandatory) (id:order-ag_cluster-master-virtualip-mandatory) Colocation Constraints: virtualip with ag_cluster-master (score:INFINITY) (with-rsc-role:Master) (id:colocation-virtualip-ag_cluster-master-INFINITY) Ticket Constraints:
RHEL 8
Location Constraints: Ordering Constraints: promote ag_cluster-clone then start virtualip (kind:Mandatory) (id:order-ag_cluster-clone-virtualip-mandatory) Colocation Constraints: virtualip with ag_cluster-clone (score:INFINITY) (with-rsc-role:Master) (id:colocation-virtualip-ag_cluster-clone-INFINITY) Ticket Constraints:
Aktifkan kembali stonith
Kami siap untuk pengujian. Aktifkan kembali stonith di kluster dengan menjalankan perintah berikut pada Simpul 1:
sudo pcs property set stonith-enabled=true
Periksa status kluster
Anda dapat memeriksa status sumber daya kluster Anda menggunakan perintah berikut:
[<username>@VM1 ~]$ sudo pcs status
Cluster name: az-hacluster
Stack: corosync
Current DC: <VM3> (version 1.1.19-8.el7_6.5-c3c624ea3d) - partition with quorum
Last updated: Sat Dec 7 00:18:38 2019
Last change: Sat Dec 7 00:18:02 2019 by root via cibadmin on VM1
3 nodes configured
5 resources configured
Online: [ <VM1> <VM2> <VM3> ]
Full list of resources:
Master/Slave Set: ag_cluster-master [ag_cluster]
Masters: [ <VM2> ]
Slaves: [ <VM1> <VM3> ]
virtualip (ocf::heartbeat:IPaddr2): Started <VM2>
rsc_st_azure (stonith:fence_azure_arm): Started <VM1>
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
Menguji failover
Untuk memastikan bahwa konfigurasi telah berhasil sejauh ini, kami menguji failover. Untuk informasi selengkapnya, lihat Kegagalan Grup Ketersediaan AlwaysOn di Linux.
Jalankan perintah berikut untuk mengalihkan kegagalan secara manual melalui replika utama ke
<VM2>
. Ganti<VM2>
dengan nilai nama server Anda.RHEL 7
sudo pcs resource move ag_cluster-master <VM2> --master
RHEL 8
sudo pcs resource move ag_cluster-clone <VM2> --master
Anda juga dapat menentukan opsi tambahan sehingga batasan sementara yang dibuat untuk memindahkan sumber daya ke simpul yang diinginkan dinonaktifkan secara otomatis, dan Anda tidak perlu melakukan langkah 2 dan 3 dalam instruksi berikut.
RHEL 7
sudo pcs resource move ag_cluster-master <VM2> --master lifetime=30S
RHEL 8
sudo pcs resource move ag_cluster-clone <VM2> --master lifetime=30S
Alternatif lain untuk mengotomatiskan langkah 2 dan 3, yang menghapus batasan sementara dalam perintah pemindahan sumber daya itu sendiri, adalah dengan menggabungkan beberapa perintah dalam satu baris.
RHEL 7
sudo pcs resource move ag_cluster-master <VM2> --master && sleep 30 && pcs resource clear ag_cluster-master
RHEL 8
sudo pcs resource move ag_cluster-clone <VM2> --master && sleep 30 && pcs resource clear ag_cluster-clone
Jika Anda memeriksa batasan lagi, Anda akan melihat bahwa batasan lain ditambahkan karena failover manual:
RHEL 7
[<username>@VM1 ~]$ sudo pcs constraint list --full Location Constraints: Resource: ag_cluster-master Enabled on: VM2 (score:INFINITY) (role: Master) (id:cli-prefer-ag_cluster-master) Ordering Constraints: promote ag_cluster-master then start virtualip (kind:Mandatory) (id:order-ag_cluster-master-virtualip-mandatory) Colocation Constraints: virtualip with ag_cluster-master (score:INFINITY) (with-rsc-role:Master) (id:colocation-virtualip-ag_cluster-master-INFINITY) Ticket Constraints:
RHEL 8
[<username>@VM1 ~]$ sudo pcs constraint list --full Location Constraints: Resource: ag_cluster-master Enabled on: VM2 (score:INFINITY) (role: Master) (id:cli-prefer-ag_cluster-clone) Ordering Constraints: promote ag_cluster-clone then start virtualip (kind:Mandatory) (id:order-ag_cluster-clone-virtualip-mandatory) Colocation Constraints: virtualip with ag_cluster-clone (score:INFINITY) (with-rsc-role:Master) (id:colocation-virtualip-ag_cluster-clone-INFINITY) Ticket Constraints:
Hapus batasan dengan ID
cli-prefer-ag_cluster-master
menggunakan perintah berikut:RHEL 7
sudo pcs constraint remove cli-prefer-ag_cluster-master
RHEL 8
sudo pcs constraint remove cli-prefer-ag_cluster-clone
Periksa sumber daya kluster Anda menggunakan perintah
sudo pcs resource
, dan Anda akan melihat bahwa instans utama terjadi<VM2>
sekarang.[<username>@<VM1> ~]$ sudo pcs resource Master/Slave Set: ag_cluster-master [ag_cluster] ag_cluster (ocf::mssql:ag): FAILED <VM1> (Monitoring) Masters: [ <VM2> ] Slaves: [ <VM3> ] virtualip (ocf::heartbeat:IPaddr2): Started <VM2> [<username>@<VM1> ~]$ sudo pcs resource Master/Slave Set: ag_cluster-master [ag_cluster] Masters: [ <VM2> ] Slaves: [ <VM1> <VM3> ] virtualip (ocf::heartbeat:IPaddr2): Started <VM2>
Uji anggar
Anda dapat menguji pagar dengan menjalankan perintah berikut. Coba jalankan perintah di bawah ini dari <VM1>
untuk <VM3>
.
sudo pcs stonith fence <VM3> --debug
Catatan
Secara default, tindakan anggar membawa mematikan simpul dan kemudian menyala. Jika Anda hanya ingin membawa simpul offline, gunakan opsi --off
di perintah.
Anda akan menemukan output berikut:
[<username>@<VM1> ~]$ sudo pcs stonith fence <VM3> --debug
Running: stonith_admin -B <VM3>
Return Value: 0
--Debug Output Start--
--Debug Output End--
Node: <VM3> fenced
Untuk informasi selengkapnya tentang pengujian perangkat anggar, lihat artikel Topi Merah berikut ini.
Langkah selanjutnya
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk