Alamat IP virtual dengan ketersediaan tinggi (HaVip) menjaga alamat IP layanan Anda tetap tidak berubah selama proses failover antar instance ECS dalam zona yang sama.
Cara kerja
Kluster ketersediaan tinggi tipikal terdiri dari satu HaVip dan dua instance ECS dalam konfigurasi utama/sekunder:
-
Konfigurasi Keepalived: Asosiasikan HaVip dengan ECS1 dan ECS2, lalu instal Keepalived di kedua instans tersebut. Atur
virtual_ipaddresske alamat HaVip dan tetapkan nilaipriority— nilai prioritas lebih tinggi akan memenangkan pemilihan instans utama. -
Pemilihan instans utama: Keepalived membandingkan nilai
prioritymelalui VRRP dan memilih instans dengan prioritas lebih tinggi sebagai utama. Sistem memperbarui pemetaan HaVip, dan semua trafik yang ditujukan ke HaVip diteruskan ke ECS1. -
Failover: ECS1 mengirim heartbeat ke ECS2 pada interval yang ditentukan oleh
advert_int. Jika ECS2 melewatkan heartbeat dalam batas waktu timeout, Keepalived menaikkan status ECS2 menjadi utama. Sistem memperbarui pemetaan HaVip ke ECS2, dan semua trafik dialihkan sesuai — alamat IP layanan tetap tidak berubah.
Untuk mengaktifkan akses publik, asosiasikan HaVip dengan EIP. Trafik kemudian dirutekan melalui EIP untuk menyediakan layanan yang menghadap internet dengan ketersediaan tinggi.
Gunakan HaVip untuk failover
Asosiasikan HaVip dengan instance ECS atau elastic network interfaces (ENIs) dalam vSwitch yang sama. Dikombinasikan dengan Keepalived, hal ini menjaga alamat IP layanan Anda tetap tidak berubah selama failover.
-
Kuota: Login ke Konsol Pusat Kuota dan ajukan permohonan izin pembuatan HaVip. Nilai kuota 1 berarti pembuatan HaVip diaktifkan. Setiap akun dapat membuat hingga 50 HaVip.
-
Versi IP: HaVip hanya mendukung IPv4.
-
Sumber daya terkait:
-
HaVip hanya dapat diasosiasikan dengan satu jenis sumber daya dalam satu waktu. Untuk mengganti jenis, putuskan asosiasi sumber daya saat ini terlebih dahulu.
-
Saat Anda mengasosiasikan HaVip dengan ENI, pastikan ENI tersebut telah disambungkan ke instance ECS.
-
Jika instance ECS atau ENI yang diasosiasikan dihapus, sistem secara otomatis memutus asosiasi HaVip dari sumber daya tersebut.
-
Melepas ENI sekunder dari instance ECS tidak memengaruhi asosiasi HaVip ke ENI tersebut.
-
Konsol
Buat dan asosiasikan HaVip
-
Buka halaman Konsol VPC - HaVip. Pilih wilayah instance ECS Anda, lalu klik Create HaVip.
-
Pilih VPC dan vSwitch tempat instance ECS berada. Anda dapat secara otomatis menetapkan alamat IP privat dari Blok CIDR vSwitch atau menentukan alamat IP yang tidak ditugaskan.
-
Instal Keepalived di instance ECS utama dan cadangan, lalu jalankan
systemctl start keepaliveduntuk menjalankan Keepalived. -
Klik ID HaVip target. Di bagian Resources, klik Bind di sebelah kanan ECS Instances, lalu pilih instance ECS atau ENI yang akan diasosiasikan.
Setelah asosiasi selesai, Anda dapat melihat status utama dan sekunder di kolom Associated Instance atau di bagian Resources pada halaman detail.
-
Verifikasi hasilnya:
-
Jalankan perintah berikut di instans utama dan sekunder untuk membuat layanan uji web yang mengembalikan hasil berbeda.
Periksa penggunaan port dengan menjalankan perintah
netstat -an | grep 8000. Jika port 8000 sedang digunakan, Anda perlu memilih port lain.Instans utama:
echo "ECS 1" > index.html # Instans utama mengembalikan "ECS 1" python3 -m http.server 8000Instans sekunder:
echo "ECS 2" > index.html # Instans sekunder mengembalikan "ECS 2" python3 -m http.server 8000 -
Dari instance ECS lain dalam VPC yang sama, menjalankan
curl <havip_private_ip>:8000mengembalikanECS 1. Setelah server utama berhenti, perintah tersebut mengembalikanECS 2.Pastikan grup keamanan instans utama dan sekunder mengizinkan trafik HTTP dari dalam VPC yang sama untuk mengakses port 8000.
-
Putuskan asosiasi sumber daya
Klik ID HaVip target. Di bagian Resources, temukan instance ECS atau elastic network interface target dalam daftar sumber daya Associated , lalu klik Delete Association.
Hapus HaVip
Sebelum menghapus HaVip, pastikan HaVip tersebut tidak diasosiasikan dengan instance ECS, ENI, atau EIP apa pun. Di kolom Actions untuk HaVip target, atau di halaman detailnya, klik Delete.
API
-
Panggil CreateHaVip untuk membuat HaVip.
-
Panggil AssociateHaVip untuk mengasosiasikan HaVip dengan instance ECS atau ENI.
-
Panggil UnassociateHaVip untuk memutus asosiasi HaVip dari instance ECS atau ENI.
-
Panggil DeleteHaVip untuk menghapus HaVip.
Terraform
Resource: alicloud_havip, alicloud_havip_attachment, alicloud_instance, alicloud_security_group, alicloud_security_group_rule
# Tentukan wilayah tempat Anda ingin membuat HaVip.
provider "alicloud" {
region = "cn-hangzhou"
}
# Tentukan ID VPC.
variable "vpc_id" {
default = "vpc-bp1k******" # Ganti dengan ID VPC Anda yang sebenarnya.
}
# Tentukan ID vSwitch.
variable "vswitch_id" {
default = "vsw-bp1y******" # Ganti dengan ID vSwitch Anda yang sebenarnya.
}
# Tentukan tipe instans.
variable "instance_type" {
default = "ecs.e-c1m1.large"
}
# Tentukan ID image.
variable "image_id" {
default = "aliyun_3_x64_20G_alibase_20221102.vhd"
}
# Buat HaVip.
resource "alicloud_havip" "test_havip" {
ha_vip_name = "test_havip_name"
vswitch_id = var.vswitch_id
ip_address = "192.168.0.24" # Tentukan alamat IP untuk HaVip dari Blok CIDR vSwitch. Jika tidak ditentukan, sistem akan menetapkannya.
}
# Buat grup keamanan.
resource "alicloud_security_group" "test_security_group" {
security_group_name = "test_security_group_name"
vpc_id = var.vpc_id
}
# Buat aturan grup keamanan. Anda perlu menyesuaikan protokol, sumber, dan port berdasarkan trafik aktual Anda.
resource "alicloud_security_group_rule" "allow_vpc_tcp" {
type = "ingress"
ip_protocol = "tcp"
nic_type = "intranet"
policy = "accept"
port_range = "8000/8000"
priority = 1
security_group_id = alicloud_security_group.test_security_group.id
cidr_ip = "192.168.0.0/24"
}
# Buat server utama.
resource "alicloud_instance" "test_master_instance" {
instance_name = "test_master_instance_name"
vswitch_id = var.vswitch_id
instance_type = var.instance_type
image_id = var.image_id
system_disk_category = "cloud_essd"
security_groups = [alicloud_security_group.test_security_group.id]
user_data = base64encode(<<-EOT
#!/bin/sh
yum install keepalived -y
printf '! Configuration File for keepalived
vrrp_instance VI_1 {
state MASTER # Tetapkan sebagai instans utama.
interface eth0 # Antarmuka jaringan tempat alamat IP virtual diikatkan. Contoh ini menggunakan eth0.
virtual_router_id 51 # virtual_router_id kluster utama/sekunder. Kluster berbeda dalam VPC yang sama memerlukan nilai virtual_router_id berbeda.
nopreempt # Tetapkan ke mode non-preemptive.
priority 100 # Prioritas. Nilai lebih tinggi menunjukkan prioritas lebih tinggi. Contoh ini menetapkan prioritas ke 100 agar instans ini menjadi utama.
advert_int 1 # Interval pengiriman pesan heartbeat, dalam detik. Nilai kecil membuat konfigurasi rentan terhadap fluktuasi jaringan, yang dapat menyebabkan failover sering terjadi atau skenario split-brain sementara. Nilai besar dapat memperpanjang waktu failover setelah instans utama gagal.
authentication {
auth_type PASS
auth_pass 1111
}
unicast_src_ip 192.168.0.25 # Alamat IP privat instans ini. Contoh ini menggunakan 192.168.0.25.
unicast_peer {
192.168.0.26 # Alamat IP privat instans peer. Contoh ini menggunakan 192.168.0.26. Jika Anda memiliki beberapa instance ECS sekunder, deklarasikan alamat IP setiap instans peer di baris baru. Jangan gunakan koma atau pemisah lainnya.
}
virtual_ipaddress {
192.168.0.24 # Alamat IP virtual. Tetapkan ke alamat IP HaVip. Contoh ini menggunakan 192.168.0.24.
}
garp_master_delay 1 # Penundaan dalam detik sebelum memperbarui cache ARP setelah failover ke instans ini.
garp_master_refresh 5 # Interval pengiriman pesan ARP, dalam detik.
track_interface {
eth0 # Antarmuka jaringan tempat alamat IP virtual diikatkan. Contoh ini menggunakan eth0.
}
}' > /etc/keepalived/keepalived.conf
systemctl start keepalived
EOT
) # Tentukan skrip inisialisasi untuk server utama guna menginstal Keepalived.
private_ip = "192.168.0.25" # Tentukan alamat IP privat server utama.
instance_charge_type = "PostPaid" # Tetapkan metode penagihan ke bayar sesuai penggunaan.
spot_strategy = "SpotWithPriceLimit" # Tetapkan sebagai spot instans dengan batas harga.
}
# Buat server sekunder.
resource "alicloud_instance" "test_backup_instance" {
instance_name = "test_backup_instance_name"
vswitch_id = var.vswitch_id
instance_type = var.instance_type
image_id = var.image_id
system_disk_category = "cloud_essd"
security_groups = [alicloud_security_group.test_security_group.id]
user_data = base64encode(<<-EOT
#!/bin/sh
yum install keepalived -y
printf '! Configuration File for keepalived
vrrp_instance VI_1 {
state BACKUP # Tetapkan sebagai instans sekunder.
interface eth0 # Antarmuka jaringan tempat alamat IP virtual diikatkan. Contoh ini menggunakan eth0.
virtual_router_id 51 # virtual_router_id kluster utama/sekunder. Kluster berbeda dalam VPC yang sama memerlukan nilai virtual_router_id berbeda.
nopreempt # Tetapkan ke mode non-preemptive.
priority 10 # Prioritas. Nilai lebih tinggi menunjukkan prioritas lebih tinggi. Contoh ini menetapkan prioritas ke 10 agar instans ini menjadi sekunder.
advert_int 1 # Interval pengiriman pesan heartbeat, dalam detik. Nilai kecil membuat konfigurasi rentan terhadap fluktuasi jaringan, yang dapat menyebabkan failover sering terjadi atau skenario split-brain sementara. Nilai besar dapat memperpanjang waktu failover setelah instans utama gagal.
authentication {
auth_type PASS
auth_pass 1111
}
unicast_src_ip 192.168.0.26 # Alamat IP privat instans ini. Contoh ini menggunakan 192.168.0.26.
unicast_peer {
192.168.0.25 # Alamat IP privat instans peer. Contoh ini menggunakan 192.168.0.25. Jika Anda memiliki beberapa instance ECS sekunder, deklarasikan alamat IP setiap instans peer di baris baru. Jangan gunakan koma atau pemisah lainnya.
}
virtual_ipaddress {
192.168.0.24 # Alamat IP virtual. Tetapkan ke alamat IP HaVip. Contoh ini menggunakan 192.168.0.24.
}
garp_master_delay 1 # Penundaan dalam detik sebelum memperbarui cache ARP setelah failover ke instans ini.
garp_master_refresh 5 # Interval pengiriman pesan ARP, dalam detik.
track_interface {
eth0 # Antarmuka jaringan tempat alamat IP virtual diikatkan. Contoh ini menggunakan eth0.
}
}' > /etc/keepalived/keepalived.conf
systemctl start keepalived
EOT
) # Tentukan skrip inisialisasi untuk server sekunder guna menginstal Keepalived.
private_ip = "192.168.0.26" # Tentukan alamat IP privat server sekunder.
instance_charge_type = "PostPaid" # Tetapkan metode penagihan ke bayar sesuai penggunaan.
spot_strategy = "SpotWithPriceLimit" # Tetapkan sebagai spot instans dengan batas harga.
}
# Asosiasikan dengan server utama.
resource "alicloud_havip_attachment" "test_havip_attachment" {
ha_vip_id = alicloud_havip.test_havip.id
instance_id = alicloud_instance.test_master_instance.id # Tentukan ID instans yang akan diasosiasikan dengan HaVip.
}
# Asosiasikan dengan server sekunder.
resource "alicloud_havip_attachment" "test_havip_attachment_new" {
ha_vip_id = alicloud_havip.test_havip.id
instance_id = alicloud_instance.test_backup_instance.id # Tentukan ID instans yang akan diasosiasikan dengan HaVip.
}
Asosiasikan EIP untuk akses publik
HaVip adalah alamat IP privat dalam vSwitch. Untuk mengaktifkan akses internet, asosiasikan Elastic IP Address (EIP) dengan HaVip. Perhatikan bahwa EIP dikenai biaya.
1. EIP harus berada di wilayah yang sama dengan HaVip dan tersedia.
2. Saat instance ECS mengakses internet melalui EIP yang diasosiasikan dengan HaVip, alamat IP sumber paket outbound adalah alamat IP privat HaVip, bukan alamat IP privat instance ECS.
Konsol
Asosiasikan atau putuskan asosiasi EIP
Sebelum mengasosiasikan EIP, buat terlebih dahulu di Konsol EIP atau klik Create EIP di halaman asosiasi.
Di kolom Actions untuk HaVip target, klik Associate EIP atau Disassociate EIP.
API
Sebelum mengasosiasikan EIP, panggil AllocateEipAddress untuk membuatnya.
-
Panggil AssociateEipAddress untuk mengasosiasikan EIP dengan HaVip.
-
Panggil UnassociateEipAddress untuk memutus asosiasi EIP dari HaVip.
Terraform
Resource: alicloud_eip_address, alicloud_eip_association
# Tentukan wilayah HaVip.
provider "alicloud" {
region = "cn-hangzhou"
}
# Tentukan ID HaVip.
variable "havip_id" {
default = "havip-8vb0******" # Ganti dengan ID HaVip Anda yang sebenarnya.
}
# Buat EIP.
resource "alicloud_eip_address" "test_eip" {
address_name = "test_eip_name"
isp = "BGP"
netmode = "public"
bandwidth = "1"
payment_type = "PayAsYouGo"
}
# Asosiasikan EIP.
resource "alicloud_eip_association" "test_eip_havip_association" {
allocation_id = alicloud_eip_address.test_eip.id
instance_type = "HAVIP"
instance_id = var.havip_id # Tentukan ID HaVip.
}
Informasi lebih lanjut
Penagihan
HaVip berada dalam pratinjau publik dan gratis. Tidak ada SLA yang disediakan selama masa pratinjau publik.
Sumber daya terkait seperti instance ECS dan EIP ditagih sesuai aturan harga masing-masing.
Wilayah yang didukung
Area | Wilayah |
Asia Pasifik - Tiongkok | Tiongkok (Hangzhou), Tiongkok (Shanghai), , Tiongkok (Qingdao), Tiongkok (Beijing), Tiongkok (Zhangjiakou), Tiongkok (Hohhot), Tiongkok (Ulanqab), Tiongkok (Shenzhen), Tiongkok (Heyuan), Tiongkok (Guangzhou), Tiongkok (Chengdu), Tiongkok (Zhongwei), Tiongkok (Hong Kong), Tiongkok (Wuhan - Local Region), dan Tiongkok (Fuzhou - Local Region, decommissioning) |
Asia Pasifik - Lainnya | Jepang (Tokyo), Korea Selatan (Seoul), Singapura, Malaysia (Kuala Lumpur), Indonesia (Jakarta), Filipina (Manila), Thailand (Bangkok), dan Malaysia (Johor) |
Eropa & Amerika | Jerman (Frankfurt), Inggris (London), Prancis (Paris), AS (Silicon Valley), AS (Virginia), dan Meksiko |
Timur Tengah | UEA (Dubai) dan Arab Saudi (Riyadh, partner region) |
Kuota
HaVip berada dalam pratinjau publik. Untuk mengaktifkannya, login ke Konsol Pusat Kuota dan ajukan permohonan.
Nama kuota | Deskripsi | Batas default | Dapat disesuaikan |
Tidak ada | Jenis jaringan yang mendukung alamat IP virtual dengan ketersediaan tinggi (HaVip). | VPC | Tidak. |
HaVip per instance ECS. | 5 | ||
EIP per HaVip. | 1 | ||
Instance ECS atau ENI per HaVip. | 10 1. HaVip dapat diasosiasikan dengan 10 instance ECS atau 10 ENI secara bersamaan. Namun, HaVip tidak dapat diasosiasikan dengan instance ECS dan ENI secara bersamaan. 2. HaVip memiliki properti subnet. HaVip hanya dapat diasosiasikan dengan instance ECS atau ENI yang berada dalam vSwitch yang sama. | ||
Apakah HaVip mendukung broadcast dan multicast. | Tidak HaVip hanya mendukung komunikasi unicast. Jika Anda menggunakan perangkat lunak pihak ketiga seperti Keepalived untuk mengimplementasikan ketersediaan tinggi, Anda harus mengubah mode komunikasi ke unicast dalam file konfigurasi. | ||
HaVip per akun. | 50 | ||
HaVip per VPC. | 50 | ||
vpc_quota_havip_custom_route_entry | Entri yang tujuannya adalah HaVip dalam tabel rute. | 5 | Ya. Buka halaman Quota Management atau Pusat Kuota untuk meminta peningkatan kuota. |