Memigrasikan VIP dalam cluster SLES HA ke load balancer internal

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 Anda sudah memiliki cluster SUSE Linux Enterprise Server (SLES) HA untuk SAP di Google Cloud dengan VIP yang diimplementasikan menggunakan IP alias, Anda dapat memigrasikan VIP sehingga load balancer internal dapat digunakan sebagai gantinya.

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 SLES, VIP Anda diimplementasikan dengan IP alias.

Petunjuk ini menunjukkan cara memigrasikan VIP di cluster SLES 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:

$ crm 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:

primitive rsc_vip_gcp-primary ocf:gcp:alias \
        op monitor interval=60s timeout=60s \
        op start interval=0 timeout=600s \
        op stop interval=0 timeout=180s \
        params alias_ip="10.128.1.200/32" hostlist="ha1 ha2" gcloud_path="/usr/local/google-cloud-sdk/bin/gcloud" logging=yes \
        meta priority=10
primitive rsc_vip_int-primary IPaddr2 \
        params ip=10.128.1.200 cidr_netmask=32 nic=eth0 \
        op monitor interval=3600s timeout=60s

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.

  1. Buka Cloud Shell:

    Buka Cloud Shell

  2. 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_ADDRESS

    Untuk mengetahui informasi selengkapnya tentang pemesanan IP statis, lihat Memesan alamat IP internal statis.

  3. Konfirmasi reservasi alamat IP:

    $ gcloud compute addresses describe VIP_NAME \
      --region CLUSTER_REGION

    Anda 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

  1. Di Cloud Shell, buat dua grup instance yang tidak dikelola dan tetapkan VM host master utama ke salah satunya, dan VM host master sekunder ke grup 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_NAME
    
  2. Konfirmasi pembuatan grup instance:

    $ gcloud compute instance-groups unmanaged list

    Anda 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

  1. 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=2
  2. Konfirmasi pembuatan health check:

    $ gcloud compute health-checks describe HEALTH_CHECK_NAME

    Anda 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.

  1. 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_ZONE
    
  2. Jika 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_NUM

    Contoh:

    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

  1. 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-checks
  2. Tambahkan 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_REGION
  3. Tambahkan 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_REGION
  4. Buat 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 ALL

    Untuk 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. Anda tetap harus menginstal utilitas socat, karena Anda akan menggunakannya nanti saat mengonfigurasi resource cluster.

  1. Pada kedua VM host sebagai root, instal utilitas socat:

    # zypper install -y socat

  2. Mulai proses socat untuk memproses selama 60 detik di port health check:

    # timeout 60s socat - TCP-LISTEN:HLTH_CHK_PORT_NUM,fork

  3. Di 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_REGION

    Anda 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:

  1. Klik health check di konsol:

    Buka halaman Health check

  2. Klik Edit.

  3. Di kolom Port, ubah nomor port menjadi 22.

  4. Klik Save dan tunggu satu atau dua menit.

  5. Di Cloud Shell, periksa kondisi grup backend instance Anda:

    $ gcloud compute backend-services get-health BACKEND_SERVICE_NAME \
      --region CLUSTER_REGION

    Anda 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
  6. 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

  1. 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.

  2. Sebagai root pada instance utama yang aktif, setel cluster ke dalam mode pemeliharaan:

    $ crm configure property maintenance-mode="true"

  3. Cadangkan konfigurasi cluster:

    $ crm configure show > clusterconfig.backup

Mengalokasikan IP alias

  1. 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)"
  2. 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

  1. 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 ALL
  2. Konfirmasi pembuatan aturan penerusan dan catat nama aturan penerusan sementara untuk penghapusan:

    $ gcloud compute forwarding-rules list
  3. Hapus aturan penerusan sementara:

    $ gcloud compute forwarding-rules delete rule-name --region=cluster-region
  4. Rilis alamat IP sementara yang Anda cadangkan:

    $ gcloud compute addresses delete temp-ip-name --region=cluster-region

Mengedit resource primitif VIP dalam konfigurasi cluster

  1. Pada instance utama sebagai root, edit definisi resource primitif VIP. Jika cluster dibuat oleh template Deployment Manager yang disediakan oleh Google Cloud, nama resource primitif VIP adalah rsc_vip_gcp-primary:

    $ crm configure edit rsc_name

    Definisi resource akan terbuka di editor teks, seperti vi.

  2. Buat perubahan berikut pada resource VIP dalam konfigurasi cluster HA Pacemaker:

    • Ganti kelas resource, ocf:gcp:alias dengan anything
    • Ubah interval op monitor menjadi interval=10s
    • Ubah waktu tunggu op monitor menjadi timeout=20s
    • Menghapus definisi operasi op start dan op stop
    • Hapus meta priority=10
    • Ganti parameter IP alias:
      alias_ip="10.0.0.10/32" hostlist="example-ha-vm1 example-ha-vm2" gcloud_path="/usr/bin/gcloud" logging=yes
      dengan parameter service health check:
      binfile="/usr/bin/socat" cmdline_options="-U TCP-LISTEN:healthcheck-port-num,backlog=10,fork,reuseaddr /dev/null"

    Misalnya, ganti entri tebal dalam contoh IP alias berikut:

    primitive rsc_vip_gcp-primary ocf:gcp:alias \
        op monitor interval=60s timeout=60s \
        op start interval=0 timeout=180s \
        op stop interval=0 timeout=180s \
        params alias_ip="10.0.0.10/32" hostlist="example-ha-vm1 example-ha-vm2" gcloud_path="/usr/bin/gcloud" logging=yes \
        meta priority=10

    Setelah selesai mengedit, definisi resource untuk layanan health check akan terlihat seperti contoh berikut:

    primitive rsc_vip_gcp-primary anything \
        op monitor interval=10s timeout=20s \
        params binfile="/usr/bin/socat" cmdline_options="-U TCP-LISTEN:healthcheck-port-num,backlog=10,fork,reuseaddr /dev/null"

    Pada contoh sebelumnya, HC port adalah port health check yang Anda tentukan saat membuat health check dan mengonfigurasi aplikasi utilitas socat.

  3. Keluarkan cluster dari mode pemeliharaan:

    $ crm configure property 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 -d
  • Sebagai pengguna:

    telnet VIP HANA SQL port

    atau

    nc -zv VIP HANA SQL port