Di Google Cloud, cara yang direkomendasikan untuk menerapkan alamat IP virtual (VIP) pada cluster ketersediaan tinggi (HA) berbasis OS untuk SAP adalah dengan menggunakan dukungan failover load balancer TCP/UDP internal.
Jika sudah memiliki cluster HA Red Hat Enterprise Linux (RHEL) untuk SAP di Google Cloud yang menggunakan VIP yang diimplementasikan dengan IP alias, Anda dapat memigrasikan VIP untuk menggunakan muatan internal load balancer.
Jika Anda menggunakan template Deployment Manager sap_hana_ha
, yang tidak lagi didukung, untuk men-deploy sistem peningkatan skala SAP HANA dalam cluster HA di RHEL, VIP Anda diimplementasikan dengan IP alias.
Petunjuk ini menunjukkan cara memigrasikan VIP di cluster RHEL HA.
Prasyarat
Petunjuk ini mengasumsikan bahwa Anda sudah memiliki cluster HA yang dikonfigurasi dengan benar di Google Cloud yang menggunakan IP alias untuk implementasi VIP.
Ringkasan langkah
- Mengonfigurasi dan menguji load balancer dengan menggunakan aturan penerusan sementara dan alamat IP sementara sebagai pengganti VIP.
- Tetapkan cluster Anda ke mode pemeliharaan dan, jika memungkinkan, hentikan instance server aplikasi SAP untuk menghindari perilaku yang tidak diharapkan.
- Mengalokasikan alamat IP alias dari host utama. Alamat ini menjadi VIP dengan load balancer tersebut.
- Dalam konfigurasi cluster Pacemaker:
- Mengubah kelas resource VIP yang ada.
- Ganti parameter yang ada untuk IP alias dengan parameter untuk layanan health check.
Mengonfirmasi alamat VIP yang ada
Sebagai root, pada instance VM utama, tampilkan konfigurasi cluster berbasis IP alias yang tersedia:
$
pcs configure show
Dalam definisi resource, rentang alamat IP VIP muncul di resource alias
dan IPaddr2
. Jika perlu mengubah alamat VIP, Anda harus memperbarui kedua resource. Lihat contoh berikut:
Resource rsc_alias (class=ocf provider=heartbeat type=gcp-vpc-move-vip) \ Attributes: alias_ip=10.10.0.90/32 Operations: monitor interval=60s timeout=60s (vip_hkn_00-monitor-interval-60s) start interval=0s timeout=600s stop interval=0s timeout=20s Resource rsc_vip(class=ocf provider=heartbeat type=IPaddr2) \ Attributes: cidr_netmask=32 ip=10.10.0.90 nic=eth0 Operations: monitor interval=10s timeout=20s (vip_hkn_00-monitor-interval-10s) start interval=0s timeout=20s (vip_hkn_00-start-interval-0s) stop interval=0s timeout=20s (vip_hkn_00-stop-interval-0s)
Di konsol Google Cloud, konfirmasi bahwa alamat IP yang digunakan dengan IP alias sudah dicadangkan. Alamat IP dapat berupa alamat IP yang digunakan untuk IP alias atau bisa juga alamat IP baru.
$
gcloud compute addresses list --filter="region:( cluster-region )"
Jika alamat IP dicadangkan dan dialokasikan ke instance VM utama, statusnya akan ditampilkan sebagai IN_USE
. Saat mengalokasikan ulang IP ke load balancer, Anda harus membatalkan alokasinya terlebih dahulu dari instance utama yang aktif. Setelah itu, statusnya akan berubah menjadi RESERVED
.
Jika alamat tidak disertakan dalam alamat IP yang ditampilkan oleh perintah daftar, cadangkan sekarang untuk mencegah konflik penanganan di masa mendatang:
$
gcloud compute addresses create vip-name \
--region cluster-region --subnet cluster-subnet \
--addresses vip-address
Tampilkan alamat Anda lagi untuk mengonfirmasi bahwa alamat IP tersebut muncul sebagai RESERVED
.
Mengonfigurasi dukungan failover Cloud Load Balancing
Layanan Load Balancer Jaringan passthrough internal dengan dukungan failover merutekan traffic ke host aktif di cluster SAP HANA berdasarkan layanan health check.
Untuk menghindari konflik dan memungkinkan pengujian sebelum migrasi selesai, petunjuk ini mengharuskan Anda membuat aturan penerusan sementara dengan alamat IP placeholder dari subnet yang sama dengan alamat VIP. Jika sudah siap beralih ke penerapan VIP, buat aturan penerusan final yang baru dengan alamat VIP.
Mencadangkan alamat IP sementara untuk IP virtual
Alamat VIP mengikuti sistem SAP HANA yang aktif. Load balancer merutekan traffic yang dikirim ke VIP menuju VM yang saat ini menghosting sistem SAP HANA yang aktif.
Buka Cloud Shell:
Cadangkan alamat IP sementara di subnet yang sama dengan IP alias untuk tujuan pengujian. Jika Anda mengabaikan flag
--addresses
, alamat IP dalam subnet tersebut akan dipilih untuk Anda:$
gcloud compute addresses create VIP_NAME \ --region CLUSTER_REGION --subnet CLUSTER_SUBNET \ --addresses VIP_ADDRESSUntuk mengetahui informasi selengkapnya tentang pemesanan IP statis, lihat Memesan alamat IP internal statis.
Konfirmasi reservasi alamat IP:
$
gcloud compute addresses describe VIP_NAME \ --region CLUSTER_REGIONAnda akan melihat output yang mirip dengan contoh berikut ini:
address: 10.0.0.19 addressType: INTERNAL creationTimestamp: '2020-05-20T14:19:03.109-07:00' description: '' id: '8961491304398200872' kind: compute#address name: vip-for-hana-ha networkTier: PREMIUM purpose: GCE_ENDPOINT region: https://www.googleapis.com/compute/v1/projects/example-project-123456/regions/us-central1 selfLink: https://www.googleapis.com/compute/v1/projects/example-project-123456/regions/us-central1/addresses/vip-for-hana-ha status: RESERVED subnetwork: https://www.googleapis.com/compute/v1/projects/example-project-123456/regions/us-central1/subnetworks/example-subnet-us-central1
Membuat grup instance untuk VM host
Di Cloud Shell, buat dua grup instance tidak terkelola dan tetapkan VM host master utama ke salah satunya dan VM host master sekunder ke VM lainnya:
$
gcloud compute instance-groups unmanaged create PRIMARY_IG_NAME \ --zone=PRIMARY_ZONE$
gcloud compute instance-groups unmanaged add-instances PRIMARY_IG_NAME \ --zone=PRIMARY_ZONE \ --instances=PRIMARY_HOST_NAME$
gcloud compute instance-groups unmanaged create SECONDARY_IG_NAME \ --zone=SECONDARY_ZONE$
gcloud compute instance-groups unmanaged add-instances SECONDARY_IG_NAME \ --zone=SECONDARY_ZONE \ --instances=SECONDARY_HOST_NAMEKonfirmasi pembuatan grup instance:
$
gcloud compute instance-groups unmanaged listAnda akan melihat output yang mirip dengan contoh berikut ini:
NAME ZONE NETWORK NETWORK_PROJECT MANAGED INSTANCES hana-ha-ig-1 us-central1-a example-network example-project-123456 No 1 hana-ha-ig-2 us-central1-c example-network example-project-123456 No 1
Membuat health check Compute Engine
Di Cloud Shell, buat health check. Untuk port yang digunakan oleh health check, pilih port yang berada dalam rentang pribadi, 49152-65535, agar tidak bentrok dengan layanan lain. Nilai interval pemeriksaan dan waktu tunggu sedikit lebih panjang daripada nilai default sehingga dapat meningkatkan toleransi failover selama peristiwa migrasi langsung Compute Engine. Anda dapat menyesuaikan nilainya, jika perlu:
$
gcloud compute health-checks create tcp HEALTH_CHECK_NAME --port=HEALTHCHECK_PORT_NUM \ --proxy-header=NONE --check-interval=10 --timeout=10 --unhealthy-threshold=2 \ --healthy-threshold=2Konfirmasi pembuatan health check:
$
gcloud compute health-checks describe HEALTH_CHECK_NAMEAnda akan melihat output yang mirip dengan contoh berikut ini:
checkIntervalSec: 10 creationTimestamp: '2020-05-20T21:03:06.924-07:00' healthyThreshold: 2 id: '4963070308818371477' kind: compute#healthCheck name: hana-health-check selfLink: https://www.googleapis.com/compute/v1/projects/example-project-123456/global/healthChecks/hana-health-check tcpHealthCheck: port: 60000 portSpecification: USE_FIXED_PORT proxyHeader: NONE timeoutSec: 10 type: TCP unhealthyThreshold: 2
Membuat aturan firewall untuk health check
Tentukan aturan firewall untuk port dalam rentang pribadi yang mengizinkan akses ke VM host Anda dari rentang IP yang digunakan oleh health check Compute Engine, 35.191.0.0/16
dan 130.211.0.0/22
. Untuk mengetahui informasi selengkapnya, lihat Membuat aturan firewall untuk health check.
Jika belum ada, tambahkan tag jaringan ke VM host Anda. Tag jaringan ini digunakan oleh aturan firewall untuk health check.
$
gcloud compute instances add-tags PRIMARY_HOST_NAME \ --tags NETWORK_TAGS \ --zone PRIMARY_ZONE$
gcloud compute instances add-tags SECONDARY_HOST_NAME \ --tags NETWORK_TAGS \ --zone SECONDARY_ZONEJika belum ada, buat aturan firewall untuk mengizinkan health check:
$
gcloud compute firewall-rules create RULE_NAME \ --network NETWORK_NAME \ --action ALLOW \ --direction INGRESS \ --source-ranges 35.191.0.0/16,130.211.0.0/22 \ --target-tags NETWORK_TAGS \ --rules tcp:HLTH_CHK_PORT_NUMContoh:
gcloud compute firewall-rules create fw-allow-health-checks \ --network example-network \ --action ALLOW \ --direction INGRESS \ --source-ranges 35.191.0.0/16,130.211.0.0/22 \ --target-tags cluster-ntwk-tag \ --rules tcp:60000
Mengonfigurasi load balancer dan grup failover
Buat layanan backend load balancer:
$
gcloud compute backend-services create BACKEND_SERVICE_NAME \ --load-balancing-scheme internal \ --health-checks HEALTH_CHECK_NAME \ --no-connection-drain-on-failover \ --drop-traffic-if-unhealthy \ --failover-ratio 1.0 \ --region CLUSTER_REGION \ --global-health-checksTambahkan grup instance utama ke layanan backend:
$
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --instance-group PRIMARY_IG_NAME \ --instance-group-zone PRIMARY_ZONE \ --region CLUSTER_REGIONTambahkan grup instance failover sekunder ke layanan backend:
$
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --instance-group SECONDARY_IG_NAME \ --instance-group-zone SECONDARY_ZONE \ --failover \ --region CLUSTER_REGIONBuat aturan penerusan sementara. Untuk alamat IP, tentukan alamat IP sementara yang Anda cadangkan untuk pengujian. Jika Anda perlu mengakses sistem SAP HANA dari luar region yang ditentukan di bawah, sertakan flag
--allow-global-access
dalam definisi:$
gcloud compute forwarding-rules create RULE_NAME \ --load-balancing-scheme internal \ --address VIP_ADDRESS \ --subnet CLUSTER_SUBNET \ --region CLUSTER_REGION \ --backend-service BACKEND_SERVICE_NAME \ --ports ALLUntuk mengetahui informasi selengkapnya tentang akses lintas region ke sistem ketersediaan tinggi SAP HANA, lihat Load Balancing TCP/UDP Internal.
Menguji konfigurasi load balancer
Meskipun grup backend instance Anda tidak akan dianggap berfungsi dengan baik hingga nanti, Anda dapat menguji konfigurasi load balancer dengan menyiapkan pemroses untuk merespons health check. Setelah menyiapkan pemroses, jika load balancer dikonfigurasi dengan benar, status grup backend instance akan berubah menjadi berfungsi dengan baik.
Bagian berikut menyajikan berbagai metode yang dapat Anda gunakan untuk menguji konfigurasi.
Menguji load balancer dengan utilitas socat
Anda dapat menggunakan utilitas socat
untuk memproses sementara port health check.
Di kedua VM host, instal utilitas
socat
:$
sudo yum install -y socatMulai proses
socat
untuk memproses selama 60 detik di port health check:$
sudo timeout 60s socat - TCP-LISTEN:HLTH_CHK_PORT_NUM,forkDi Cloud Shell, setelah menunggu beberapa detik hingga health check mendeteksi pemroses, periksa kondisi grup backend instance Anda:
$
gcloud compute backend-services get-health BACKEND_SERVICE_NAME \ --region CLUSTER_REGIONAnda akan melihat output yang mirip dengan berikut ini:
--- backend: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-a/instanceGroups/hana-ha-ig-1 status: healthStatus: ‐ healthState: HEALTHY instance: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-a/instances/hana-ha-vm-1 ipAddress: 10.0.0.35 port: 80 kind: compute#backendServiceGroupHealth --- backend: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-c/instanceGroups/hana-ha-ig-2 status: healthStatus: ‐ healthState: HEALTHY instance: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-c/instances/hana-ha-vm-2 ipAddress: 10.0.0.34 port: 80 kind: compute#backendServiceGroupHealth
Menguji load balancer menggunakan port 22
Jika port 22 terbuka untuk koneksi SSH pada VM host, Anda dapat mengedit sementara health checker agar menggunakan port 22, yang memiliki pemroses untuk merespons health checker.
Agar dapat menggunakan port 22 untuk sementara, ikuti langkah-langkah berikut:
Klik health check di konsol:
Klik Edit.
Di kolom Port, ubah nomor port menjadi 22.
Klik Save dan tunggu satu atau dua menit.
Di Cloud Shell, periksa kondisi grup backend instance Anda:
$
gcloud compute backend-services get-health BACKEND_SERVICE_NAME \ --region CLUSTER_REGIONAnda akan melihat output yang mirip dengan berikut ini:
--- backend: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-a/instanceGroups/hana-ha-ig-1 status: healthStatus: ‐ healthState: HEALTHY instance: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-a/instances/hana-ha-vm-1 ipAddress: 10.0.0.35 port: 80 kind: compute#backendServiceGroupHealth --- backend: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-c/instanceGroups/hana-ha-ig-2 status: healthStatus: ‐ healthState: HEALTHY instance: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-c/instances/hana-ha-vm-2 ipAddress: 10.0.0.34 port: 80 kind: compute#backendServiceGroupHealth
Setelah selesai, ubah nomor port health check kembali ke nomor port asli.
Memigrasikan implementasi VIP untuk menggunakan load balancer
Langkah-langkah berikut digunakan untuk mengedit konfigurasi cluster Pacemaker dan aturan penerusan load balancer untuk menyelesaikan migrasi VIP.
Menyiapkan sistem untuk mengedit
Jika memungkinkan, hentikan aplikasi SAP agar tidak terhubung ke database SAP HANA, karena Anda akan menginterupsi koneksi sebentar untuk menukar alamat IP. Proses kerja NetWeaver dapat terhubung kembali ke database, tetapi Anda mungkin mengalami kegagalan atau situasi menggantung, yang dapat dihindari dengan melakukan interupsi terhadap koneksi tersebut. Pastikan IP Anda terdaftar di rentang internal yang merupakan bagian dari VPC Anda di region target.
Sebagai root pada instance utama yang aktif, setel cluster ke dalam mode pemeliharaan:
$
pcs property set maintenance-mode="true"Cadangkan konfigurasi cluster:
$
pcs config show > clusterconfig.backup
Mengalokasikan IP alias
Di Cloud Shell, konfirmasi rentang IP alias yang ditetapkan ke instance utama SAP HANA:
$
gcloud compute instances describe \ primary-host-name \ --zone primary-zone \ --format="flattened(name,networkInterfaces[].aliasIpRanges)"Di konsol Google Cloud, perbarui antarmuka jaringan. Jika Anda tidak perlu mempertahankan IP alias, tentukan
--aliases ""
:$
gcloud compute instances network-interfaces update primary-host-name \ --zone primary-zone \ --aliases "ip-ranges-to-retain"
Membuat aturan penerusan VIP dan penghapusan
Di konsol Google Cloud, buat aturan penerusan front-end baru untuk load balancer, dengan menentukan alamat IP yang sebelumnya digunakan untuk IP alias sebagai alamat IP. Ini adalah VIP Anda.
$
gcloud compute forwarding-rules create rule-name \ --load-balancing-scheme internal \ --address vip-address \ --subnet cluster-subnet \ --region cluster-region \ --backend-service backend-service-name \ --ports ALLKonfirmasi pembuatan aturan penerusan dan catat nama aturan penerusan sementara untuk penghapusan:
$
gcloud compute forwarding-rules listHapus aturan penerusan sementara:
$
gcloud compute forwarding-rules delete rule-name --region=cluster-regionRilis alamat IP sementara yang Anda cadangkan:
$
gcloud compute addresses delete temp-ip-name --region=cluster-region
Menginstal pemroses dan membuat resource health check
Untuk mengonfigurasi resource health check, Anda harus menginstal pemroses terlebih dahulu.
Menginstal pemroses
Load balancer menggunakan pemroses pada port health check setiap host untuk menentukan tempat instance utama cluster SAP HANA berjalan. 1. Sebagai root pada instance master di sistem utama dan sekunder, instal pemroses TCP. Petunjuk ini menginstal dan menggunakan HAProxy sebagai pemroses.
#
yum install haproxy
Buka file konfigurasi
haproxy.cfg
untuk mengedit:#
vi /etc/haproxy/haproxy.cfgDi bagian defaults pada
haproxy.cfg
, ubahmode
menjaditcp
.Setelah bagian defaults, buat bagian baru dengan menambahkan:
#--------------------------------------------------------------------- # Health check listener port for SAP HANA HA cluster #--------------------------------------------------------------------- listen healthcheck bind *:healthcheck-port-num
Port bind adalah port yang sama dengan yang Anda gunakan saat membuat health check.
Setelah selesai, update yang Anda lakukan akan terlihat seperti contoh berikut:
#--------------------------------------------------------------------- # common defaults that all the 'listen' and 'backend' sections will # use if not designated in their block #--------------------------------------------------------------------- defaults mode tcp log global option tcplog option dontlognull option http-server-close # option forwardfor except 127.0.0.0/8 option redispatch retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout http-keep-alive 10s timeout check 10s maxconn 3000 #--------------------------------------------------------------------- # Set up health check listener for SAP HANA HA cluster #--------------------------------------------------------------------- listen healthcheck bind *:60000
Pada setiap host sebagai root, mulai layanan untuk mengonfirmasi bahwa konfigurasinya sudah benar:
#
systemctl start haproxy.servicePada halaman Load balancer di Konsol Google Cloud, klik entri load balancer Anda:
Di bagian Backend pada halaman Load balancer details, jika layanan HAProxy aktif di kedua host, Anda akan melihat
1/1
di kolom Healthy dari setiap entri grup instance.Pada setiap host, hentikan layanan HAProxy:
#
systemctl stop haproxy.serviceSetelah Anda menghentikan layanan HAProxy di setiap host,
0/1
akan ditampilkan di kolom Healthy dari setiap grup instance.Kemudian, saat health check dikonfigurasi, cluster akan memulai ulang pemroses di node master.
Membuat resource health check
Pada salah satu host sebagai root, buat resource health check untuk layanan HAProxy:
#
pcs resource create healthcheck_resource_name service:haproxy op monitor interval=10s timeout=20s
Mengedit konfigurasi cluster untuk menggunakan resource health check dan menghapus resource alias
Hapus
Colocation Constraints
untuk grup yang ada yang berisi resource IP alias yang dipetakan ke instance utama SAP HANA:#
pcs constraint remove colocation-alias-vip-group-sap_hana_resource_nameBuat grup resource baru yang mengelompokkan resource VIP dan health check:
#
pcs resource group add rsc-group-namehealthcheck_resource_namevip_resource_namePerintah ini mengganti nama grup sebelumnya dari resource VIP dan IP alias dengan nama grup resource baru dalam konfigurasi cluster.
Verifikasi nama grup resource baru dalam konfigurasi cluster:
#
pcs config showAnda akan melihat output yang mirip dengan contoh berikut ini:
Group: ilb-vip-group Resource: vip_hkn_00 (class=ocf provider=heartbeat type=IPaddr2) Attributes: cidr_netmask=32 ip=10.10.0.90 nic=eth0 Operations: monitor interval=10s timeout=20s (vip_hkn_00-monitor-interval-10s) start interval=0s timeout=20s (vip_hkn_00-start-interval-0s) stop interval=0s timeout=20s (vip_hkn_00-stop-interval-0s) Resource: ilb-health-check (class=service type=haproxy) Operations: monitor interval=60 timeout=100 (ilb-health-check-monitor-interval-60) start interval=0s timeout=100 (ilb-health-check-start-interval-0s) stop interval=0s timeout=100 (ilb-health-check-stop-interval-0s)
Hapus resource alias:
#
pcs resource delete alias_resource_nameVerifikasi status cluster:
#
pcs statusAnda akan melihat bagian Grup Resource di output yang mirip dengan contoh berikut:
STONITH-hana-ha-vm-1 (stonith:fence_gce): Started hana-ha-vm-2 STONITH-hana-ha-vm-2 (stonith:fence_gce): Started hana-ha-vm-1 Clone Set: SAPHanaTopology_HA1_22-clone [SAPHanaTopology_HA1_22] Started: [ hana-ha-vm-1 hana-ha-vm-2 ] Master/Slave Set: SAPHana_HA1_22-master [SAPHana_HA1_22] Masters: [ hana-ha-vm-1 ] Slaves: [ hana-ha-vm-2 ] Resource Group: g-primary rsc_healthcheck_HA1 (service:haproxy): Started hana-ha-vm-1 rsc_vip_HA1_22 (ocf::heartbeat:IPaddr2): Started hana-ha-vm-1
Keluarkan cluster dari mode pemeliharaan:
#
pcs property set maintenance-mode=false
Menguji cluster ketersediaan tinggi (HA) yang telah diperbarui
Dari instance aplikasi Anda, konfirmasi bahwa Anda dapat menjangkau database dengan mengeluarkan salah satu perintah berikut:
Sebagai pengguna
sidadm
:>
R3trans -dSebagai pengguna:
telnet VIP HANA SQL port
atau
nc -zv VIP HANA SQL port