Untuk mencapai ketersediaan tinggi SQL Server di dua zona berbeda di Compute Engine, Anda dapat men-deploy Instance Cluster Failover (FCI) SQL Server di Linux yang menggunakan disk multi-writer. Tidak seperti arsitektur shared-nothing tradisional, konfigurasi ini memungkinkan Anda melampirkan node secara bersamaan di zona yang berbeda ke disk yang sama. Panduan ini menjelaskan cara men-deploy FCI SQL Server dengan ketersediaan tinggi di Linux di Compute Engine menggunakan replikasi sinkron latensi rendah Google Cloud Hyperdisk.
Desain ini memastikan bahwa SQL Server tetap tersedia meskipun terjadi pemadaman layanan di zona tertentu. Menggabungkan Pacemaker untuk orkestrasi cluster dengan ketahanan lintas zona Compute Engine memberikan solusi yang andal dan berperforma tinggi untuk workload database penting yang memerlukan kesederhanaan penyimpanan bersama.
Manfaat penerapan ketersediaan tinggi dengan disk multi-writer
Menggunakan FCI SQL Server dengan disk multi-writer, bukan Grup Ketersediaan (AG) Always On di Linux, akan menghilangkan kompleksitas pengelolaan beberapa salinan data dan overhead sinkronisasi yang ditimbulkan oleh konfigurasi AG.
Arsitektur volume bersama juga lebih efisien dalam penyimpanan jika dibandingkan dengan arsitektur AG yang menggunakan replika data lengkap di setiap node. Volume bersama juga dapat mengurangi biaya disk dalam skenario pencerminan.
Sorotan Utama Arsitektur ini
- Redundansi Zonal: Perlindungan data jika terjadi kegagalan node atau pemadaman layanan zona yang jarang terjadi.
- Pengelolaan yang disederhanakan: Mengurangi kompleksitas pengelolaan beberapa salinan data dibandingkan dengan Grup Ketersediaan Always On.
- Efisiensi penyimpanan: menggunakan satu volume bersama untuk data dan log, yang dioptimalkan menggunakan kemampuan multi-penulis.
- Orkestrasi Native Linux: Menggunakan ekstensi ketersediaan tinggi (HAE) standar industri untuk failover yang lancar.
Di lingkungan lokal, Anda dapat mengizinkan WSFC melakukan pengumuman ARP jika terjadi failover untuk memberi tahu peralatan jaringan tentang perubahan alamat IP. Cloud de Confiance, namun, mengabaikan pengumuman ARP. Oleh karena itu, Anda harus mengimplementasikan load balancer internal (lihat Menjalankan Cluster Failover Windows Server)

Artikel ini mengasumsikan bahwa Anda memiliki pengetahuan dasar tentang SQL Server, Active Directory, dan Compute Engine.
Tujuan
Tutorial ini menunjukkan cara menyelesaikan tugas berikut untuk mencapai tujuan Anda:- Buat deployment SQL Server di Linux.
- Buat, pasang, dan konfigurasi disk multi-penulis.
- Konfigurasi cluster Pacemaker.
- Siapkan load balancer.
- Lakukan pengujian failover.
Biaya
Tutorial ini menggunakan komponen Cloud de Confiance by S3NSyang dapat ditagih, termasuk:
Gunakan kalkulator harga untuk membuat perkiraan biaya berdasarkan penggunaan yang Anda proyeksikan.
Sebelum memulai
Untuk tutorial ini, Anda memerlukan project Cloud de Confiance . Anda dapat membuat project baru atau memilih project yang sudah dibuat:
-
Di konsol Cloud de Confiance , pada halaman pemilih project, pilih atau buat project Cloud de Confiance .
Peran yang diperlukan untuk memilih atau membuat project
- Pilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project mana pun yang telah diberi peran.
-
Membuat project: Untuk membuat project, Anda memerlukan peran Project Creator
(
roles/resourcemanager.projectCreator), yang berisi izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Verifikasi bahwa penagihan diaktifkan untuk project Cloud de Confiance Anda.
-
Di konsol Cloud de Confiance , aktifkan Cloud Shell.
-
Menyiapkan project dan jaringan
Untuk menyiapkan project Cloud de Confiance dan VPC Anda untuk deployment FCI SQL Server, lakukan hal berikut:
Di konsol Cloud de Confiance , buka Cloud Shell dengan mengklik tombol Activate Cloud Shell
.
Tetapkan project ID default Anda:
gcloud config set project
PROJECT_IDGanti
PROJECT_IDdengan ID project Cloud de Confiance Anda.Tetapkan region default Anda:
gcloud config set compute/region
REGIONGanti
REGIONdengan ID region tempat Anda ingin men-deploy.
Buat node cluster
Deploy dua VM sebagai node cluster dan VM ketiga sebagai klien khusus untuk memvalidasi konektivitas dan performa failover.
Lakukan inisialisasi variabel berikut yang akan digunakan untuk perintah lainnya.
BOOT_DISK_SIZE=50 BOOT_IOPS=10000 BOOT_THROUGHPUT=400 DATA_IOPS=10000 DATA_THROUGHPUT=400 DATA_DISK_SIZE=
200REGION=$(gcloud config get-value compute/region) ZONE1=$REGION-a ZONE2=$REGION-b SUBNET=SUBNET_NAMEMACHINE_TYPE=c3-standard-8 VPC_NAME=VPC_NAMEBuat dua disk regional, satu disk data dan satu lagi untuk log. Untuk mengizinkan kedua instance mengakses disk, aktifkan mode multi-penulis untuk kedua disk dengan tanda --access-mode=READ_WRITE_MANY.
gcloud compute disks create sqlfci-mw-data-disk \ --size=$DATA_DISK_SIZE \ --type=hyperdisk-balanced-high-availability \ --region=$REGION \ --replica-zones=$ZONE1,$ZONE2 \ --provisioned-iops=$DATA_IOPS \ --provisioned-throughput=$DATA_THROUGHPUT \ --access-mode=READ_WRITE_MANY gcloud compute disks create sqlfci-mw-log-disk \ --size=$DATA_DISK_SIZE \ --type=hyperdisk-balanced-high-availability \ --region=$REGION \ --replica-zones=$ZONE1,$ZONE2 \ --provisioned-iops=$DATA_IOPS \ --provisioned-throughput=$DATA_THROUGHPUT \ --access-mode=READ_WRITE_MANY
Buat VM Linux dan pasang disk multi-writer yang Anda buat.
gcloud compute instances create node-1 \ --boot-disk-size=$BOOT_DISK_SIZE \ --boot-disk-type=hyperdisk-balanced \ --boot-disk-provisioned-iops=$BOOT_IOPS \ --boot-disk-provisioned-throughput=$BOOT_THROUGHPUT \ --zone $ZONE1 \ --machine-type $MACHINE_TYPE \ --subnet $SUBNET \ --image-family ubuntu-2204-lts \ --image-project ubuntu-os-cloud \ --disk="name=sqlfci-mw-data-disk,scope=regional,mode=rw" \ --disk="name=sqlfci-mw-log-disk,scope=regional,mode=rw" \ --scopes=compute-rw,trace,service-control,service-management,pubsub,monitoring-write,logging-write,storage-rw \ --tags=sqlfci gcloud compute instances create node-2 \ --boot-disk-size=$BOOT_DISK_SIZE \ --boot-disk-type=hyperdisk-balanced \ --boot-disk-provisioned-iops=$BOOT_IOPS \ --boot-disk-provisioned-throughput=$BOOT_THROUGHPUT \ --zone $ZONE2 \ --machine-type $MACHINE_TYPE \ --subnet $SUBNET \ --image-family ubuntu-2204-lts \ --image-project ubuntu-os-cloud \ --disk="name=sqlfci-mw-data-disk,scope=regional,mode=rw" \ --disk="name=sqlfci-mw-log-disk,scope=regional,mode=rw" \ --scopes=compute-rw,trace,service-control,service-management,pubsub,monitoring-write,logging-write,storage-rw \ --tags=sqlfci
Buat VM klien Windows,
cl-node, yang akan Anda gunakan untuk menguji koneksi.gcloud compute instances create cl-node \ --boot-disk-size=100 \ --boot-disk-type=hyperdisk-balanced \ --machine-type $MACHINE_TYPE \ --image-family windows-2025 \ --image-project windows-cloud \ --zone $ZONE1 \ --subnet $SUBNET \ --scopes=compute-rw,trace,service-control,service-management,pubsub,monitoring-write,logging-write,storage-rw
Buat load balancer internal
Cadangkan alamat IP untuk cluster dan load balancer.
gcloud compute addresses create sqlfci-lb-ipaddress \ --region=$REGION \ --subnet=$SUBNET \ --purpose="SHARED_LOADBALANCER_VIP" CLUSTER_ADDRESS=$(gcloud compute addresses describe sqlfci-lb-ipaddress \ --region $REGION \ --format=value\(address\)) && \ echo "Cluster IP address: $CLUSTER_ADDRESS"
Buat health check untuk cluster.
gcloud compute health-checks create tcp sqlfci-healthcheck \ --port="60008" \ --region=$REGION \ --check-interval=3 \ --timeout=2 \ --unhealthy-threshold=2 \ --healthy-threshold=5
Untuk mengizinkan koneksi ke port health check, buat aturan firewall.
gcloud compute firewall-rules create "allow-sqlfci-healthcheck-60008" \ --allow "tcp:60008" \ --target-tags sqlfci \ --network $VPC_NAME \ --source-ranges="35.191.0.0/16,130.211.0.0/22" \ --priority="1000"
Untuk mengetahui informasi selengkapnya, lihat Aturan firewall untuk health check.
Buat grup instance untuk node cluster.
gcloud compute instance-groups unmanaged create sqlfci-1-uig \ --zone=$ZONE1 gcloud compute instance-groups unmanaged add-instances sqlfci-1-uig \ --zone=$ZONE1 \ --instances=node-1 gcloud compute instance-groups unmanaged create sqlfci-2-uig \ --zone=$ZONE2 gcloud compute instance-groups unmanaged add-instances sqlfci-2-uig \ --zone=$ZONE2 \ --instances=node-2
Buat layanan backend load balancer.
gcloud compute backend-services create sqlfci-backend-services \ --region=$REGION \ --load-balancing-scheme="INTERNAL" \ --protocol="TCP" \ --health-checks=sqlfci-healthcheck \ --health-checks-region=$REGION
gcloud compute backend-services add-backend sqlfci-backend-services \ --region=$REGION \ --instance-group=sqlfci-1-uig \ --instance-group-zone=$ZONE1
gcloud compute backend-services add-backend sqlfci-backend-services \ --region=$REGION \ --instance-group=sqlfci-2-uig \ --instance-group-zone=$ZONE2
Buat aturan penerusan load balancer.
gcloud compute forwarding-rules create "sqlfci-forwarding-rule" \ --load-balancing-scheme=INTERNAL \ --network=$VPC_NAME \ --subnet=$SUBNET \ --region=$REGION \ --address=$CLUSTER_ADDRESS \ --ip-protocol="TCP" \ --ports="ALL" \ --backend-service=sqlfci-backend-services \ --backend-service-region=$REGION
Buat bucket Cloud Storage untuk mentransfer file dari node cluster utama ke sekunder.
gcloud storage buckets create gs://
BUCKET_NAME\ --location=$REGION \ --public-access-preventionGanti
BUCKET_NAMEdengan nama bucket yang akan dibuat.Untuk mengetahui informasi selengkapnya, lihat Membuat Bucket
Instal software yang diperlukan
Download, instal, dan konfigurasi mesin SQL Server dan pengelolaan cluster
di dua VM Linux, node-1 dan node-2, yang akan berpartisipasi dalam Cluster
Failover.
Hubungkan ke setiap VM Anda menggunakan SSH. Untuk mengetahui informasi selengkapnya, lihat Menghubungkan ke VM Linux dan Praktik terbaik untuk mengontrol akses jaringan SSH.
Perbarui
hosts filedinode-1dannode-2.Buka
hosts fileuntuk diedit.sudo vi /etc/hosts
Temukan alamat IP internal untuk setiap VM Linux dan tambahkan entri host ke bagian bawah file.
NODE1_INTERNAL_IPnode-1NODE2_INTERNAL_IPnode-2Ganti
NODE1_INTERNAL_IPdanNODE2_INTERNAL_IPdengan alamat IP internal setiap VM Linux.
Periksa komunikasi antar-VM. Semua VM yang berpartisipasi dalam grup ketersediaan Always On harus dapat berkomunikasi dengan VM lain: Kembali ke setiap VM Linux, jalankan perintah dari setiap VM, dan pastikan semua VM dapat berkomunikasi satu sama lain.
ping -c 4 node-1 ping -c 4 node-2
Output-nya akan tampak mirip dengan berikut ini:
PING node-1 (10.128.0.37) 56(84) bytes of data. 64 bytes from node-1 (10.128.0.37): icmp_seq=1 ttl=128 time=1.91 ms 64 bytes from node-1 (10.128.0.37): icmp_seq=2 ttl=128 time=0.234 ms 64 bytes from node-1 (10.128.0.37): icmp_seq=3 ttl=128 time=0.249 ms 64 bytes from node-1 (10.128.0.37): icmp_seq=4 ttl=128 time=0.263 ms
Instal SQL Server 2025.
Tambahkan repositori SQL Server ke sistem.
curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc curl -fsSL https://packages.microsoft.com/config/ubuntu/22.04/mssql-server-2025.list | sudo tee /etc/apt/sources.list.d/mssql-server-2025.list sudo apt-get update
Instal SQL Server.
sudo apt-get install -y mssql-server
Instal alat developer SQL Server. Download dan instal alat SQL Server di dua VM Linux yang akan berpartisipasi dalam Failover Cluster.
curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install -y mssql-tools18 unixodbc-dev
Instal Pacemaker. Pacemaker adalah software pengelola resource ketersediaan tinggi open source, yang digunakan dengan mesin Cluster Corosync. Di bagian ini, Anda akan menginstal Pacemaker di kedua VM cluster.
Instal Pacemaker di
node-1dannode-2.sudo apt-get install -y pacemaker pcs fence-agents resource-agents pacemaker-cli-utils crmsh
Instal agen resource SQL Server untuk Pacemaker.
sudo apt-get install -y mssql-server-ha
Jika Anda mengaktifkan firewall di VM, buka firewall untuk SQL Server.
Periksa apakah
Uncomplicated Firewalldiinstal dan diaktifkan dengan menjalankan perintah berikut.sudo ufw status
Jika statusnya aktif, jalankan perintah berikut untuk membuka port. Jika layanan firewall tidak berjalan, Anda dapat mengabaikan langkah ini.
sudo ufw allow 1433 sudo ufw allow 5022 sudo ufw reload
Mengonfigurasi node database utama
Di bagian ini, Anda akan melakukan inisialisasi dua disk multi-writer dan menyiapkan setiap disk dengan grup volume dan grup logis.
Konfigurasi LVM.
Konfigurasi setelan LVM.
Buat cadangan konfigurasi yang ada.
sudo cp /etc/lvm/lvm.conf /etc/lvm/lvm.conf.bak
Memperbarui sumber ID sistem:
sudo sed -i 's/^\(\s*system_id_source\s*=\s*\)"none"/\1"uname"/' /etc/lvm/lvm.conf
Pastikan perubahan berhasil dilakukan.
grep 'system_id_source *= *"uname"' /etc/lvm/lvm.conf
Konfigurasi grup volume LVM dan volume logis.
sudo pvcreate /dev/nvme0n2 /dev/nvme0n3 sudo pvs sudo vgcreate vgdata /dev/nvme0n2 sudo lvcreate -l 100%FREE -n lvdata vgdata sudo vgcreate vglogtmp /dev/nvme0n3 sudo lvcreate -l 70%FREE -n lvlog vglogtmp sudo lvcreate -l 100%FREE -n lvtmp vglogtmp sudo vgs -o+systemid
Format volume dengan sistem file
xfsdengan ukuran blok 64 KB.sudo mkfs.xfs -d su=64k,sw=1 -L data /dev/vgdata/lvdata -f sudo mkfs.xfs -d su=64k,sw=1 -L dblog /dev/vglogtmp/lvlog -f sudo mkfs.xfs -d su=64k,sw=1 -L tmp /dev/vglogtmp/lvtmp -f
Pastikan volume telah dibuat.
sudo lvs
Pasang dan format disk
Siapkan titik pemasangan untuk disk bersama dan berikan akses pengguna mssql.
Buat titik pemasangan untuk volume baru.
sudo mkdir /mssql sudo mkdir -p /mssql/db_data sudo mkdir -p /mssql/db_log sudo mkdir -p /mssql/db_temp
Pasang volume LVM ke direktori pemasangan.
sudo mount /dev/vgdata/lvdata /mssql/db_data sudo mount /dev/vglogtmp/lvlog /mssql/db_log sudo mount /dev/vglogtmp/lvtmp /mssql/db_temp
Tetapkan pengguna
mssqlsebagai pemilik titik pemasangan.sudo chown mssql:mssql /mssql/db_data sudo chown mssql:mssql /mssql/db_log sudo chown mssql:mssql /mssql/db_temp
Konfigurasi SQL Server:
Tetapkan variabel yang memindahkan database utama ke penyimpanan bersama dan jalankan alat
mssql-conf.sudo MSSQL_MASTER_DATA_FILE="/mssql/db_data/master.mdf" MSSQL_MASTER_LOG_FILE="/mssql/db_data/mastlog.ldf" /opt/mssql/bin/mssql-conf setup
Pilih edisi Developer untuk edisi SQL Server dan setujui perjanjian lisensi.
Edisi developer mencakup semua fitur enterprise, tetapi Anda hanya dapat menggunakannya untuk lingkungan non-produksi. Informasi selengkapnya tersedia terkait edisi SQL Server dan lisensi Microsoft.
Tentukan sandi untuk akun SA.
Pastikan layanan
mssql-serversedang berjalan.systemctl status mssql-server --no-pager
Mengonfigurasi SQL Server dan Pacemaker
Buat pengguna SQL Server untuk Pacemaker. Ganti
SA_PASSWORDdengan sandi akun SA di SQL Server danPA_PASSWORDdengan sandi yang akan digunakan untuk akun pacemaker.QUERY=" CREATE LOGIN [pacemaker] with PASSWORD= N'
PA_PASSWORD'; ALTER SERVER ROLE [sysadmin] ADD MEMBER [pacemaker]; GO"/opt/mssql-tools18/bin/sqlcmd -No -S localhost -U sa -P '
SA_PASSWORD' -Q "$QUERY"Tambahkan login dan sandi Pacemaker ke folder rahasia SQL Server.
{ echo 'pacemaker' echoPA_PASSWORD' } | sudo tee /var/opt/mssql/secrets/passwd > /dev/null sudo chown root:root /var/opt/mssql/secrets/passwd sudo chmod 400 /var/opt/mssql/secrets/passwdPerbarui konfigurasi SQL Server untuk menggunakan lokasi data, log, dan temp baru. Anda juga akan menyetel setelan yang direkomendasikan untuk SQL Server.
sudo /opt/mssql/bin/mssql-conf set filelocation.defaultdatadir /mssql/db_data sudo /opt/mssql/bin/mssql-conf set filelocation.defaultlogdir /mssql/db_log sudo /opt/mssql/bin/mssql-conf set filelocation.defaultdumpdir /mssql/db_log sudo /opt/mssql/bin/mssql-conf traceflag 9944 3979 on sudo /opt/mssql/bin/mssql-conf set control.alternatewritethrough 0 sudo /opt/mssql/bin/mssql-conf set control.writethrough 1
Memindahkan TempDB ke disk bersama
Dapatkan daftar file TempDB dan gunakan untuk membuat kueri Ubah. Kueri ini akan digunakan pada langkah berikutnya untuk menyetel lokasi baru bagi file TempDB.
QUERY=" SET NOCOUNT ON; SELECT 'ALTER DATABASE tempdb MODIFY FILE (NAME = [' + f.name + '],' + ' FILENAME = ''/mssql/db_temp/' + f.name + CASE WHEN f.type = 1 THEN '.ldf' ELSE '.mdf' END + ''');' FROM sys.master_files f WHERE f.database_id = DB_ID(N'tempdb');"
/opt/mssql-tools18/bin/sqlcmd -No -S localhost -U sa -P '
SA_PASSWORD' -Q "$QUERY"Ambil output dari perintah sebelumnya. Anda akan menggunakan output untuk membentuk perintah berikutnya yang akan dieksekusi.
QUERY="
QUERY_OUTPUT"Contoh kueri menggunakan output:
QUERY=" ALTER DATABASE tempdb MODIFY FILE (NAME = [tempdev], FILENAME = '/mssql/db_temp/tempdev.mdf'); ALTER DATABASE tempdb MODIFY FILE (NAME = [templog], FILENAME = '/mssql/db_temp/templog.ldf'); ALTER DATABASE tempdb MODIFY FILE (NAME = [tempdev2], FILENAME = '/mssql/db_temp/tempdev2.mdf'); ALTER DATABASE tempdb MODIFY FILE (NAME = [tempdev3], FILENAME = '/mssql/db_temp/tempdev3.mdf');"
Jalankan perintah SQL yang dihasilkan untuk memindahkan file TempDB.
/opt/mssql-tools18/bin/sqlcmd -No -S localhost -U sa -P '
SA_PASSWORD' -Q "$QUERY"Mulai ulang layanan SQL Server agar perubahan dapat diterapkan.
sudo systemctl restart mssql-server.service
Verifikasi bahwa file TempDB telah dibuat.
ls -l /mssql/db_temp/
Pastikan layanan SQL Server sedang berjalan.
systemctl status mssql-server --no-pager
Konfigurasi HAProxy
Tetapkan sandi baru untuk
hacluster.sudo passwd hacluster
Untuk menyelesaikan penyiapan dan menguji apakah load balancer jaringan Anda disiapkan dengan benar, instal dan konfigurasi
HAProxy tcp listenerdi kedua node cluster:Instal HAProxy.
sudo apt-get install haproxy
Ketik
Yuntuk menyelesaikan penginstalan.Edit file
haproxy.cfg.sudo vi /etc/haproxy/haproxy.cfg
Di bagian
defaultspadahaproxy.cfg file, ubah mode menjaditcp.Tambahkan bagian berikut di akhir file
haproxy.cfg.#--------------------------------------------------------------- # Set up health check listener for SQL Server Availability Group #--------------------------------------------------------------- listen healthcheck bind *:60008
Mulai layanan HAProxy.
sudo systemctl start haproxy.service sudo systemctl status haproxy.service
Hentikan dan nonaktifkan layanan HAProxy.
sudo systemctl stop haproxy.service sudo systemctl disable haproxy.service
Upload file kunci mesin ke Cloud Storage menggunakan perintah berikut.
sudo gcloud storage cp /var/opt/mssql/secrets/machine-key gs://
BUCKET_NAME/Ganti
BUCKET_NAMEdengan nama bucket yang dibuat.Hentikan dan nonaktifkan layanan SQL Server. Layanan dari titik ini akan dikontrol oleh cluster.
sudo systemctl stop mssql-server.service sudo systemctl disable mssql-server.service
Lepaskan penyimpanan bersama.
sudo umount /mssql/db_data sudo umount /mssql/db_log sudo umount /mssql/db_temp
Hapus konfigurasi cluster default yang ada.
sudo pcs cluster destroy
Mengonfigurasi node sekunder
Buat direktori pemasangan untuk volume LVM. Anda tidak perlu memformat disk karena disk ini dibagikan kepada
node-1. Anda telah memformat disk dan mengonfigurasi volume LVM saat mengonfigurasinode-1.sudo mkdir /mssql sudo mkdir -p /mssql/db_data sudo mkdir -p /mssql/db_log sudo mkdir -p /mssql/db_temp sudo chown mssql:mssql /mssql/db_data sudo chown mssql:mssql /mssql/db_log sudo chown mssql:mssql /mssql/db_temp
Konfigurasi SQL Server.
Untuk memindahkan database utama ke disk data yang dibagikan, tetapkan variabel berikut, lalu jalankan alat
mssql-confuntuk menerapkan perubahan.sudo MSSQL_MASTER_DATA_FILE="/mssql/db_data/master.mdf" MSSQL_MASTER_LOG_FILE="/mssql/db_data/mastlog.ldf" /opt/mssql/bin/mssql-conf setup
Pilih edisi Developer untuk edisi SQL Server dan setujui perjanjian lisensi.
Edisi developer mencakup semua fitur enterprise, tetapi Anda hanya dapat menggunakannya untuk lingkungan non-produksi. Informasi selengkapnya tersedia terkait edisi SQL Server dan lisensi Microsoft.
Tentukan sandi untuk akun SA.
Pastikan layanan
mssql-serversedang berjalan.systemctl status mssql-server --no-pager
Buat pengguna SQL Server untuk cluster Pacemaker. Ganti
SA_PASSWORDdengan sandi akun SA di SQL Server danPA_PASSWORDdengan sandi yang akan digunakan untuk akun pacemaker.QUERY=" CREATE LOGIN [pacemaker] with PASSWORD= N'
PA_PASSWORD'; ALTER SERVER ROLE [sysadmin] ADD MEMBER [pacemaker]; GO"/opt/mssql-tools18/bin/sqlcmd -No -S localhost -U sa -P '
SA_PASSWORD' -Q "$QUERY"Tambahkan login dan sandi Pacemaker ke folder rahasia SQL Server.
{ echo 'pacemaker' echo 'PA_PASSWORD' } | sudo tee /var/opt/mssql/secrets/passwd > /dev/null sudo chown root:root /var/opt/mssql/secrets/passwd sudo chmod 400 /var/opt/mssql/secrets/passwdPerbarui konfigurasi SQL Server untuk menggunakan lokasi data, log, dan temp baru. Anda juga akan menetapkan setelan yang direkomendasikan untuk SQL Server.
sudo /opt/mssql/bin/mssql-conf set filelocation.defaultdatadir /mssql/db_data sudo /opt/mssql/bin/mssql-conf set filelocation.defaultlogdir /mssql/db_log sudo /opt/mssql/bin/mssql-conf set filelocation.defaultdumpdir /mssql/db_log sudo /opt/mssql/bin/mssql-conf traceflag 9944 3979 on sudo /opt/mssql/bin/mssql-conf set control.alternatewritethrough 0 sudo /opt/mssql/bin/mssql-conf set control.writethrough 1
Pindahkan TempDB ke disk data bersama.
Dapatkan daftar file TempDB dan gunakan untuk membuat kueri Ubah.
QUERY=" SET NOCOUNT ON; SELECT 'ALTER DATABASE tempdb MODIFY FILE (NAME = [' + f.name + '],' + ' FILENAME = ''/mssql/db_temp/' + f.name + CASE WHEN f.type = 1 THEN '.ldf' ELSE '.mdf' END + ''');' FROM sys.master_files f WHERE f.database_id = DB_ID(N'tempdb');"
/opt/mssql-tools18/bin/sqlcmd -No -S localhost -U sa -P '
SA_PASSWORD' -Q "$QUERY"Ambil output dari perintah sebelumnya. Anda akan menggunakan output untuk membentuk perintah berikutnya yang akan dieksekusi.
QUERY="
QUERY_OUTPUT"Contoh kueri menggunakan output:
QUERY=" ALTER DATABASE tempdb MODIFY FILE (NAME = [tempdev], FILENAME = '/mssql/db_temp/tempdev.mdf'); ALTER DATABASE tempdb MODIFY FILE (NAME = [templog], FILENAME = '/mssql/db_temp/templog.ldf'); ALTER DATABASE tempdb MODIFY FILE (NAME = [tempdev2], FILENAME = '/mssql/db_temp/tempdev2.mdf'); ALTER DATABASE tempdb MODIFY FILE (NAME = [tempdev3], FILENAME = '/mssql/db_temp/tempdev3.mdf');"
Untuk memindahkan file TempDB, jalankan perintah SQL yang dihasilkan.
/opt/mssql-tools18/bin/sqlcmd -No -S localhost -U sa -P '
SA_PASSWORD' -Q "$QUERY"Agar perubahan diterapkan, mulai ulang layanan SQL Server.
sudo systemctl restart mssql-server.service
Pastikan layanan SQL Server sedang berjalan.
sudo systemctl status mssql-server --no-pager
Pastikan file TempDB telah dibuat.
ls -l /mssql/db_temp/
Hentikan dan nonaktifkan sementara layanan SQL Server.
sudo systemctl stop mssql-server.service sudo systemctl disable mssql-server.service
Untuk memastikan kedua node menggunakan kunci yang sama untuk SQL Server, download file kunci mesin dari
node-1.sudo rm /var/opt/mssql/secrets/machine-key sudo gcloud storage cp gs://
BUCKET_NAME/machine-key /var/opt/mssql/secrets/machine-key sudo chown mssql:mssql /var/opt/mssql/secrets/machine-key sudo chmod 0600 /var/opt/mssql/secrets/machine-keyKonfigurasi setelan LVM.
Mencadangkan konfigurasi yang ada.
sudo cp /etc/lvm/lvm.conf /etc/lvm/lvm.conf.bak
Perbarui sumber ID sistem.
sudo sed -i 's/^\(\s*system_id_source\s*=\s*\)"none"/\1"uname"/' /etc/lvm/lvm.conf
Verifikasi perubahan dengan menjalankan:
cat /etc/lvm/lvm.conf | grep uname
Output-nya akan tampak mirip dengan berikut ini:
# Set the system ID from the hostname (uname) of the system. system_id_source = "uname"
Pastikan perubahan berhasil dilakukan.
grep 'system_id_source *= *"uname"' /etc/lvm/lvm.conf
Tetapkan sandi baru untuk
hacluster.sudo passwd hacluster
Untuk menyelesaikan penyiapan dan menguji apakah load balancer jaringan Anda telah disiapkan dengan benar, instal dan konfigurasi
HAProxy tcp listenerdi kedua node cluster.Instal HAProxy.
sudo apt-get install haproxy
Pilih
Yuntuk menyelesaikan penginstalan.Edit file
haproxy.cfg.sudo vi /etc/haproxy/haproxy.cfg
Di bagian default
haproxy.cfg file, ubah mode menjaditcp.Tambahkan bagian berikut di akhir file
haproxy.cfg.#--------------------------------------------------------------- # Set up health check listener for SQL Server Availability Group #--------------------------------------------------------------- listen healthcheck bind *:60008
Mulai layanan HAProxy.
sudo systemctl start haproxy.service sudo systemctl status haproxy.service
Hentikan dan nonaktifkan layanan HAProxy.
sudo systemctl stop haproxy.service sudo systemctl disable haproxy.service
Hapus konfigurasi cluster default yang ada.
sudo pcs cluster destroy
Menyelesaikan konfigurasi cluster
Kembali ke node-1 untuk melanjutkan konfigurasi cluster.
Lakukan autentikasi sebagai pengguna
hacluster.sudo pcs host auth node-1 node-2 -u hacluster -p "
HA_PASSWORD"Buat cluster bernama
ubuntu_fci.sudo pcs cluster setup ubuntu_fci node-1 addr="
NODE1_INTERNAL_IP" node-2 addr="NODE2_INTERNAL_IP" --start --enableMenetapkan no-quorum-policy untuk cluster dua node.
sudo pcs property set no-quorum-policy="ignore"
Buat resource cluster alamat IP Virtual.
sudo pcs resource create pcs-cluster-vip ocf:heartbeat:IPaddr2 ip="
CLUSTER_ADDRESS" cidr_netmask=32 nic=ens3 op monitor interval=30sGanti
CLUSTER_ADDRESSdengan alamat IP yang dicadangkan sebelumnya.Buat objek resource cluster untuk semua volume bersama.
sudo pcs resource create vgdata ocf:heartbeat:LVM-activate vgname=vgdata vg_access_mode=system_id activation_mode=exclusive sudo pcs resource create vglogtmp ocf:heartbeat:LVM-activate vgname=vglogtmp vg_access_mode=system_id activation_mode=exclusive sudo pcs resource create data_dir ocf:heartbeat:Filesystem device="/dev/mapper/vgdata-lvdata" directory="/mssql/db_data" fstype="xfs" sudo pcs resource create log_dir ocf:heartbeat:Filesystem device="/dev/mapper/vglogtmp-lvlog" directory="/mssql/db_log" fstype="xfs" sudo pcs resource create tmp_dir ocf:heartbeat:Filesystem device="/dev/mapper/vglogtmp-lvtmp" directory="/mssql/db_temp" fstype="xfs"
Buat grup resource dan tambahkan semua objek yang dibuat ke grup baru.
sudo pcs resource group add sql_group pcs-cluster-vip vgdata vglogtmp data_dir log_dir tmp_dir
Buat resource cluster untuk layanan Microsoft SQL Server dan tambahkan ke grup resource yang ada.
sudo pcs resource create sql_fci ocf:mssql:fci op stop timeout=60s --group sql_group
Buat resource cluster untuk HAProxy dan tambahkan ke grup yang sama.
sudo pcs resource create pcs-healthcheck systemd:haproxy.service op monitor interval=20s timeout=30s --group sql_group
Buat batasan cluster yang mengontrol urutan mulai untuk resource.
sudo pcs constraint order set pcs-cluster-vip vgdata vglogtmp data_dir log_dir tmp_dir sql_fci pcs-healthcheck
Menyiapkan pagar STONITH
STONITH adalah strategi pagar untuk menjaga integritas node dalam cluster HA. Layanan STONITH berfungsi di tingkat node dan melindungi cluster dari node yang tidak responsif atau dalam status tidak diketahui. Sebaiknya gunakan fence_gce perangkat pembatasan yang dikhususkan untuk Compute Engine di Cloud de Confiance by S3NS.
Menyiapkan perangkat pagar
Periksa apakah agen
fence_gce- Fence untuk Compute Engine diinstal dinode-1.sudo pcs stonith list | grep fence_gce
Untuk informasi selengkapnya, lihat:
- Agen pembatasan untuk Google Compute Engine.
Untuk melihat parameter yang terkait dengan agen, jalankan perintah berikut:
sudo pcs stonith describe fence_gce
Mengonfigurasi resource pagar cluster.
sudo pcs stonith create node-1-fence fence_gce \ plug=node-1 \ zone=
ZONE1\ project=PROJECT_ID\ pcmk_reboot_timeout=300 pcmk_monitor_retries=4 pcmk_delay_max=30 \ op monitor interval="300s" timeout="120s" \ op start interval="0" timeout="60s" sudo pcs stonith create node-2-fence fence_gce \ plug=node-2 \ zone=ZONE2\ project=PROJECT_ID\ pcmk_reboot_timeout=300 pcmk_monitor_retries=4 pcmk_delay_max=30 \ op monitor interval="300s" timeout="120s" \ op start interval="0" timeout="60s"Ganti
ZONE1danZONE2dengan zona tempat VM Linux di-deploy dan gantiPROJECT_IDdengan project ID Anda.Anda dapat menguji status agen pembatasan dengan menjalankan perintah status.
sudo fence_gce -o status -n node-1 --zone=
ZONE1sudo fence_gce -o status -n node-2 --zone=ZONE2Output-nya akan tampak mirip dengan berikut ini:
Status: ON
Ganti ZONE1 dan ZONE2 dengan zona tempat VM Linux di-deploy.
Buat batasan lokasi untuk perangkat pagar Anda guna memastikan perangkat tersebut hanya berjalan di instance yang dimaksud.
sudo pcs constraint location node-1-fence avoids node-1 sudo pcs constraint location node-2-fence avoids node-2
Aktifkan pembatasan di cluster pacemaker Anda dan tetapkan waktu tunggu pembatasan cluster.
sudo pcs -f stonith_cfg property set stonith-enabled=true sudo pcs property set stonith-timeout="300s"
Membersihkan proses startup cluster.
sudo pcs resource cleanup
Periksa status cluster.
sudo crm status
Output-nya akan tampak mirip dengan berikut ini:
Cluster Summary: * Stack: corosync * Current DC: node-1 (version 2.1.2-ada5c3b36e2) - partition with quorum * Last updated: Tue Jun 2 21:36:47 2026 * Last change: Mon Apr 27 12:31:58 2026 by root via crm_resource on node-1 * 2 nodes configured * 10 resource instances configured Node List: * Online: [ node-1 node-2 ] Full List of Resources: * Resource Group: sql_group: * pcs-cluster-vip (ocf:heartbeat:IPaddr2): Started node-2 * vgdata (ocf:heartbeat:LVM-activate): Started node-2 * vglogtmp (ocf:heartbeat:LVM-activate): Started node-2 * data_dir (ocf:heartbeat:Filesystem): Started node-2 * log_dir (ocf:heartbeat:Filesystem): Started node-2 * tmp_dir (ocf:heartbeat:Filesystem): Started node-2 * sql_fci (ocf:mssql:fci): Started node-2 * pcs-healthcheck (systemd:haproxy.service): Started node-2 * node-1-fence (stonith:fence_gce): Started node-2 * node2-fence (stonith:fence_gce): Started node-1
Menguji perangkat pagar
Setelah penyiapan perangkat pembatasan, sebaiknya Anda mengujinya menggunakan langkah-langkah berikut.
Hentikan pagar di
node-2.Hubungkan ke
node-1dan jalankan perintah berikut untuk menguji perangkat pagar yang terkait dengannode-2dari cluster Anda.fence_gce -o off -n node-2 --zone=
ZONE2Output-nya akan tampak mirip dengan berikut ini:
Success: Powered OFF
Periksa status cluster.
sudo crm status
Output-nya akan tampak mirip dengan berikut ini:
Cluster Summary: * Stack: corosync * Current DC: node-1 (version 2.1.2-ada5c3b36e2) - partition with quorum * Last updated: Tue Jun 2 21:52:00 2026 * Last change: Mon Apr 27 12:31:58 2026 by root via crm_resource on node-1 * 2 nodes configured * 10 resource instances configured Node List: * Online: [ node-1 ] * OFFLINE: [ node-2 ] Full List of Resources: * Resource Group: sql_group: * pcs-cluster-vip (ocf:heartbeat:IPaddr2): Started node-1 * vgdata (ocf:heartbeat:LVM-activate): Started node-1 * vglogtmp (ocf:heartbeat:LVM-activate): Started node-1 * data_dir (ocf:heartbeat:Filesystem): Started node-1 * log_dir (ocf:heartbeat:Filesystem): Started node-1 * tmp_dir (ocf:heartbeat:Filesystem): Started node-1 * sql_fci (ocf:mssql:fci): Started node-1 * pcs-healthcheck (systemd:haproxy.service): Started node-1 * node-1-fence (stonith:fence_gce): Stopped * node-2-fence (stonith:fence_gce): Started node-1Anda juga akan melihat bahwa
node-2dinonaktifkan di Compute Engine.
Mulai ulang pagar pada
node-2.Kembali ke
node-1dan mulai ulang instance lagi dengan menjalankan perintah berikut.fence_gce -o on -n node-2 --zone=
ZONE2Output-nya akan tampak mirip dengan berikut ini:
Success: Powered ON
Periksa status cluster di Pacemaker dan Compute Engine. Setelah beberapa saat, Anda akan melihat bahwa
node-2kembali online.$ sudo crm status
Menguji failover
Sekarang Anda siap untuk menguji apakah failover berfungsi seperti yang diharapkan.
- Buat nama pengguna dan sandi untuk instance VM
- Hubungkan ke VM menggunakan Desktop Jarak Jauh dan login menggunakan nama pengguna dan sandi yang dibuat di langkah sebelumnya.
- Hubungkan ke VM Windows di
cl-nodemelalui Desktop Jarak Jauh. - Buka sesi PowerShell.
Hubungkan ke server dengan menjalankan skrip berikut. Setiap lima detik, skrip akan terhubung ke SQL Server menggunakan pemroses grup ketersediaan dan mengkueri nama server.
while ($True){ try { $Conn = New-Object System.Data.SqlClient.SqlConnection $Conn.ConnectionString = "Server=CLUSTER_ADDRESS;User ID=sa;Password=SA_PASSWORD;Initial Catalog=master" $Conn.Open() $Cmd = $Conn.CreateCommand() $Cmd.CommandText = "SELECT SERVERPROPERTY('ComputerNamePhysicalNetBIOS')" $Result = $Cmd.ExecuteReader() if ($Result.Read()) { $currentNode = $Result.GetString(0) Write-Host "Current Node: $currentNode at $(Get-Date)" } $Conn.Close() Start-Sleep -Seconds 5 } catch { Write-Host "SQL Connection Failed at $(Get-Date). Retrying..." Start-Sleep -Seconds 15 # Wait before retrying } }Ganti
CLUSTER_ADDRESSdengan alamat IP pendengar danSA_PASSWORDdengan sandi akun SA di SQL Server.Output-nya akan tampak mirip dengan berikut ini:
Current Node: node-1 at 06/09/2026 20:24:35 Current Node: node-1 at 06/09/2026 20:24:40 Current Node: node-1 at 06/09/2026 20:24:45 Current Node: node-1 at 06/09/2026 20:24:50 Current Node: node-1 at 06/09/2026 20:24:55
Biarkan skrip berjalan.
Picu failover ke
node-2: darinode-1, kembali ke terminal SSH dan jalankan perintah berikut.sudo pcs resource move sql_group node-2
Kembali ke sesi PowerShell di
cl-node.- Amati output skrip yang berjalan dan perhatikan bahwa nama server
berubah dari
node-1menjadinode-2sebagai akibat dari failover.
Output-nya akan tampak mirip dengan berikut ini:
Current Node: node-1 at 06/09/2026 20:28:51 Current Node: node-1 at 06/09/2026 20:28:56 SQL Connection Failed at 06/09/2026 20:29:16. Retrying... Current Node: node-2 at 06/09/2026 20:29:31 Current Node: node-2 at 06/09/2026 20:29:36
- Amati output skrip yang berjalan dan perhatikan bahwa nama server
berubah dari
Mulai failback ke
node-1. Dari command line di node-1, jalankan perintah berikutsudo pcs resource move sql_group node-1
Kembali ke Powershell di
cl-node. Hentikan skrip dengan menekanCtrl+C.
Pembersihan
Setelah menyelesaikan tutorial, Anda dapat membersihkan resource yang dibuat agar tidak lagi menggunakan kuota dan menimbulkan tagihan. Bagian berikut menjelaskan cara menghapus atau menonaktifkan resource ini.
Menghapus project
Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.
Untuk menghapus project:
- Di konsol Cloud de Confiance , buka halaman Manage resources.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.