すべてのプロダクト
Search
ドキュメントセンター

Virtual Private Cloud:HaVip

最終更新日:Jul 23, 2026

高可用性仮想 IP アドレス (HaVip) は、同一ゾーン内の Elastic Compute Service (ECS) インスタンス間でのフェイルオーバー中に、サービス IP を変更することなく維持できます。

Keepalived がすでに仮想 IP の高可用性をサポートしているのに、なぜ HaVip を使用するのですか?

従来のデータセンターでは、Keepalived は VRRP を使用してフェイルオーバー中に新しいプライマリインスタンスを選出します。新しいプライマリは、仮想 IP をそのネットワークインターフェースにバインドし、Gratuitous ARP ブロードキャストを送信します。LAN 上の他のデバイスはこのブロードキャストを受信し、ARP キャッシュを更新して、仮想 IP を新しいプライマリの MAC アドレスにマッピングします。

クラウドプロバイダーはソフトウェア定義ネットワーク (SDN) と仮想化を使用しており、プラットフォームが IP 割り当てを管理します。アプリケーションはホストの IP を直接変更できず、仮想ネットワークはソースで ARP を終端させるため、ホストが IP アドレスをアナウンスすることはできません。Alibaba Cloud は、この問題を解決するために HaVip を提供します。

HaVip は、独立して管理されるプライベート IP です。Keepalived の仮想 IP を HaVip アドレスに設定し、HaVip を複数のサーバーに関連付けます。Keepalived が新しいプライマリを選出すると、システムは HaVip とインスタンスのマッピングを更新します。これにより、フェイルオーバー中もサービス IP を変更することなく、Gratuitous ARP ブロードキャストと同じ効果が得られます。

仕組み

一般的な高可用性クラスターは、1 つの HaVip と、プライマリ/セカンダリ構成の 2 つの ECS インスタンスで構成されます。

  1. Keepalived の設定:HaVip を ECS1 と ECS2 に関連付け、両方に Keepalived をインストールします。virtual_ipaddress を HaVip アドレスに設定し、priority 値を割り当てます。優先度が高い方がプライマリとして選出されます。

  2. プライマリの選出:Keepalived は VRRP を介して priority 値を比較し、優先度の高いインスタンスをプライマリとして選出します。システムは HaVip のマッピングを更新し、HaVip 宛てのすべてのトラフィックが ECS1 に転送されます。

  3. フェイルオーバー:ECS1 は、advert_int で指定された間隔で ECS2 にハートビートを送信します。タイムアウト期間内に ECS2 がハートビートを検知できない場合、Keepalived は ECS2 をプライマリに昇格させます。システムは HaVip のマッピングを ECS2 に更新し、すべてのトラフィックがそれに従って切り替わります。サービス IP は変更されません。

パブリックアクセスを有効にするには、HaVip を Elastic IP Address (EIP) に関連付けます。これにより、トラフィックは EIP を経由してルーティングされ、高可用性のインターネット向けサービスを提供します。

image

HaVip を使用したフェイルオーバー

同一 vSwitch 内の ECS インスタンスまたは Elastic Network Interface (ENI) に HaVip を関連付けます。Keepalived と組み合わせることで、フェイルオーバー中もサービス IP を変更することなく維持できます。

  • クォータ:Quota Center コンソールにログインし、HaVip の作成権限を申請します。クォータ値が 1 の場合、HaVip の作成が有効になっていることを意味します。

  • IP バージョン:HaVip は IPv4 のみをサポートします。

  • 関連付けられたリソース:

    • HaVip は一度に 1 つのリソースタイプにのみ関連付けることができます。タイプを切り替えるには、まず現在のリソースとの関連付けを解除する必要があります。

    • HaVip を ENI に関連付ける場合、その ENI が ECS インスタンスにアタッチされていることを確認してください。

    • 関連付けられた ECS インスタンスまたは ENI が削除されると、システムは、そのリソースと HaVip の関連付けを自動的に解除します。

    • セカンダリ ENI を ECS インスタンスからデタッチしても、HaVip と ENI の関連付けには影響しません。

コンソール

HaVip の作成と関連付け

  1. VPC コンソール - HaVip ページに移動します。ECS インスタンスのリージョンを選択し、HaVip アドレスの作成 をクリックします。

  2. ECS インスタンスが属する VPC と vSwitch を選択します。vSwitch の CIDR ブロックからプライベート IP アドレスを自動的に割り当てるか、未割り当ての IP アドレスを指定できます。

  3. プライマリおよびセカンダリ ECS インスタンスに Keepalived をインストールし、systemctl start keepalived を実行して Keepalived を起動します。

    Keepalived のインストール例

    この例では、2 ノードのプライマリ/セカンダリクラスター内の CentOS ベースの ECS インスタンスに Keepalived をインストールします。Keepalived V1.2.15 以降を使用してください。

    複数のセカンダリ ECS インスタンスがある場合は、各 ECS インスタンスの unicast_peer にすべてのピアインスタンスの IP アドレスを宣言する必要があります。
    問題の報告やトラブルシューティングのリソースについては、Keepalived GitHub をご参照ください。

    プライマリサーバーの設定

    1. プライマリ ECS インスタンスにログインします。

    2. yum install keepalived を実行して Keepalived をインストールします。

    3. vim /etc/keepalived/keepalived.conf を実行して keepalived.conf ファイルを編集します。

      この例では、変更が必要なパラメータのみを示しています。お使いのインスタンスに合わせて設定してください。既存の keepalived.conf ファイルをこの例で上書きしないでください。
      ! keepalived の設定ファイル
      vrrp_instance VI_1 {
          state MASTER            # プライマリインスタンスとして設定します。
          interface eth0          # 仮想 IP (VIP) アドレスがバインドされるネットワークインターフェース (NIC) です。この例では eth0 を使用します。
          virtual_router_id 51    # プライマリ/セカンダリクラスターの virtual_router_id です。同一 Virtual Private Cloud (VPC) 内の異なるプライマリ/セカンダリクラスターは、異なる virtual_router_id 値を持つ必要があります。
          nopreempt               # 非preemptive モードに設定します。
          priority 100            # 優先度です。数値が大きいほど優先度が高くなります。この例では、優先度を 100 に設定して、このインスタンスをプライマリインスタンスにします。
          advert_int 1            # ハートビートパケットを送信する間隔 (秒) です。値が小さいと、ネットワークのジッターにより頻繁なフェイルオーバーや一時的なスプリットブレインが発生する可能性があります。値が大きいと、プライマリインスタンスに障害が発生した場合のフェイルオーバー時間が増加する可能性があります。
          authentication {
              auth_type PASS
              auth_pass 1111
          }
          unicast_src_ip 192.168.0.25     # このインスタンスのプライベート IP アドレスです。この例では 192.168.0.25 を使用します。
          unicast_peer {
              192.168.0.26          # ピアインスタンスのプライベート IP アドレスです。この例では 192.168.0.26 を使用します。複数のセカンダリ ECS インスタンスがある場合は、各ピアインスタンスの IP アドレスをカンマや他の区切り文字なしで別の行に記述します。
          }
          virtual_ipaddress {
              192.168.0.24          # 仮想 IP アドレスです。これを HaVip の IP アドレスに設定します。この例では 192.168.0.24 を使用します。
          }   
          garp_master_delay 1       # MASTER 状態に遷移してから Gratuitous ARP パケットを送信するまでの遅延時間 (秒) です。
          garp_master_refresh 5     # Gratuitous ARP パケットを定期的に送信する間隔 (秒) です。
      
          track_interface {
              eth0                  # VIP アドレスがバインドされている NIC です。この例では eth0 を使用します。
          }
      }
    4. systemctl start keepalived を実行して Keepalived を起動します。

    セカンダリサーバーの設定

    1. セカンダリ ECS インスタンスにログインします。

    2. yum install keepalived を実行して Keepalived をインストールします。

    3. vim /etc/keepalived/keepalived.conf を実行して keepalived.conf ファイルを編集します。

      この例では、変更が必要なセクションのみを示しています。お使いのインスタンスに合わせて設定してください。既存の keepalived.conf ファイルをこの例で上書きしないでください。
      ! keepalived の設定ファイル
      vrrp_instance VI_1 {
          state BACKUP            # インスタンスをセカンダリインスタンスとして設定します。
          interface eth0          # VIP がバインドされる NIC です。この例では eth0 を使用します。
          virtual_router_id 51    # プライマリ/セカンダリクラスターの virtual_router_id です。同一 VPC 内の異なるプライマリ/セカンダリクラスターは、異なる virtual_router_id 値を持つ必要があります。
          nopreempt               # 非preemptive モードに設定します。
          priority 10             # 優先度です。値が大きいほど優先度が高くなります。この例では、優先度を 10 に設定して、このインスタンスをセカンダリインスタンスとして設定します。
          advert_int 1            # ハートビートパケットを送信する間隔 (秒) です。この値が小さすぎると、サービスがネットワークのジッターの影響を受けやすくなり、頻繁なフェイルオーバーや一時的なデュアルプライマリシナリオ (スプリットブレイン) が発生する可能性があります。この値が大きすぎると、プライマリインスタンスに障害が発生した後のフェイルオーバー時間が長くなる可能性があります。
          authentication {
              auth_type PASS
              auth_pass 1111
          }
          unicast_src_ip 192.168.0.26   # このインスタンスのプライベート IP アドレスです。この例では 192.168.0.26 です。
          unicast_peer {
              192.168.0.25          # ピアインスタンスのプライベート IP アドレスです。この例では 192.168.0.25 です。すべてのピアインスタンスの IP アドレスを宣言する必要があります。各アドレスは、カンマや他の区切り文字なしで、別の行に記述する必要があります。
          }
          virtual_ipaddress {
              192.168.0.24          # 仮想 IP アドレスです。これを HaVip の IP アドレスに設定します。この例では 192.168.0.24 です。
          }    
          garp_master_delay 1       # MASTER 状態に遷移してから Gratuitous ARP パケットを送信するまでの遅延時間 (秒) です。
          garp_master_refresh 5     # Gratuitous ARP パケットを定期的に送信する間隔 (秒) です。
      
          track_interface {
              eth0                  # VIP がバインドされる NIC です。この例では eth0 を使用します。
          }
      }
    4. systemctl start keepalived を実行して Keepalived を起動します。

  4. 対象の HaVip の ID をクリックします。リソース セクションで、ECS インスタンス の右側にある 関連付け をクリックし、関連付ける ECS インスタンスまたは ENI を選択します。

    関連付けが完了すると、インスタンスのバインド 列、または詳細ページの リソース セクションでプライマリとセカンダリのステータスを確認できます。
  5. 結果の検証:

    1. プライマリおよびセカンダリインスタンスで次のコマンドを実行して、異なる結果を返す Web テストサービスを作成します。

      netstat -an | grep 8000 コマンドを実行してポートの使用状況を確認します。ポート 8000 が使用中の場合は、別のポートを選択する必要があります。

      プライマリインスタンス:

      echo "ECS 1" > index.html  # プライマリインスタンスは "ECS 1" を返します
      python3 -m http.server 8000

      セカンダリインスタンス:

      echo "ECS 2" > index.html  # セカンダリインスタンスは "ECS 2" を返します
      python3 -m http.server 8000
    2. 同一 VPC 内の別の ECS インスタンスから curl <havip_private_ip>:8000 を実行すると ECS 1 が返されます。プライマリサーバーが停止すると、ECS 2 が返されます。

      プライマリおよびセカンダリインスタンスのセキュリティグループが、同一 VPC 内からのポート 8000 への HTTP トラフィックを許可していることを確認してください。

リソースの関連付け解除

対象の HaVip の ID をクリックします。リソース セクションで、バインド済み リソースリストから対象の ECS インスタンスまたは Elastic Network Interface を見つけ、関連付けの削除 をクリックします。

HaVip の削除

HaVip を削除する前に、それがどの ECS インスタンス、ENI、または EIP にも関連付けられていないことを確認してください。対象の HaVip の 操作 列、またはその詳細ページで 削除 をクリックします。

API

  • CreateHaVip API を呼び出して HaVip を作成します。

  • AssociateHaVip API を呼び出して HaVip を ECS インスタンスまたは ENI に関連付けます。

  • UnassociateHaVip API を呼び出して HaVip と ECS インスタンスまたは ENI の関連付けを解除します。

  • DeleteHaVip API を呼び出して HaVip を削除します。

Terraform

リソース:alicloud_havipalicloud_havip_attachmentalicloud_instancealicloud_security_groupalicloud_security_group_rule
# HaVip を作成するリージョンを指定します。
provider "alicloud" {
  region = "cn-hangzhou"
}

# VPC の ID を指定します。
variable "vpc_id" {
  default = "vpc-bp1k******" # 実際の VPC ID に置き換えてください。
}

# vSwitch ID を指定します。
variable "vswitch_id" {
  default = "vsw-bp1y******" # 実際の vSwitch ID に置き換えてください。
}

# インスタンスタイプを指定します。
variable "instance_type" {
  default = "ecs.e-c1m1.large"
}

# イメージ ID を指定します。
variable "image_id" {
  default = "aliyun_3_x64_20G_alibase_20221102.vhd"
}

# HaVip を作成します。
resource "alicloud_havip" "test_havip" {
  ha_vip_name = "test_havip_name"
  vswitch_id  = var.vswitch_id
  ip_address  = "192.168.0.24" # vSwitch の CIDR ブロックから HaVip の IP アドレスを指定します。指定しない場合、システムが割り当てます。
}

# セキュリティグループを作成します。
resource "alicloud_security_group" "test_security_group" {
  security_group_name = "test_security_group_name"
  vpc_id              = var.vpc_id
}

# セキュリティグループルールを作成します。実際のトラフィックに基づいてプロトコル、ソース、ポートを調整する必要があります。
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"
}

# プライマリサーバーを作成します。 
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 '! keepalived の設定ファイル
    vrrp_instance VI_1 {
        state MASTER            # プライマリインスタンスとして設定します。
        interface eth0          # 仮想 IP アドレスがバインドされるネットワークインターフェースです。この例では eth0 を使用します。  
        virtual_router_id 51    # プライマリ/セカンダリクラスターの virtual_router_id です。同一 VPC 内の異なるクラスターには、異なる virtual_router_id 値が必要です。
        nopreempt               # 非preemptive モードに設定します。
        priority 100            # 優先度です。値が大きいほど優先度が高くなります。この例では、優先度を 100 に設定して、このインスタンスをプライマリインスタンスにします。
        advert_int 1            # ハートビートメッセージを送信する間隔 (秒) です。値が小さいと、設定がネットワークのジッターの影響を受けやすくなり、頻繁なフェイルオーバーや一時的なスプリットブレインシナリオが発生する可能性があります。値が大きいと、プライマリインスタンスに障害が発生した後のフェイルオーバー時間が増加する可能性があります。
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        unicast_src_ip 192.168.0.25     # このインスタンスのプライベート IP アドレスです。この例では 192.168.0.25 を使用します。
        unicast_peer {
            192.168.0.26                # ピアインスタンスのプライベート IP アドレスです。この例では 192.168.0.26 を使用します。複数のセカンダリ ECS インスタンスがある場合は、各ピアインスタンスの IP アドレスを新しい行に記述します。カンマや他の区切り文字は使用しないでください。
        }
        virtual_ipaddress {
            192.168.0.24                # 仮想 IP アドレスです。これを HaVip の IP アドレスに設定します。この例では 192.168.0.24 を使用します。
        }   
        garp_master_delay 1             # MASTER 状態に遷移してから Gratuitous ARP パケットを送信するまでの遅延時間 (秒) です。 
        garp_master_refresh 5           # Gratuitous ARP メッセージを定期的に送信する間隔 (秒) です。 

        track_interface {
            eth0                        # 仮想 IP アドレスがバインドされるネットワークインターフェースです。この例では eth0 を使用します。
        }
    }' > /etc/keepalived/keepalived.conf
    systemctl start keepalived
  EOT
  )                                           # Keepalived をインストールするためのプライマリサーバーの初期化スクリプトを指定します。
  private_ip           = "192.168.0.25"       # プライマリサーバーのプライベート IP アドレスを指定します。
  instance_charge_type = "PostPaid"           # 課金方法を従量課金に設定します。
  spot_strategy        = "SpotWithPriceLimit" # 価格上限付きのスポットインスタンスとして設定します。
}

# セカンダリサーバーを作成します。 
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 '! keepalived の設定ファイル
    vrrp_instance VI_1 {
        state BACKUP            # セカンダリインスタンスとして設定します。
        interface eth0          # 仮想 IP アドレスがバインドされるネットワークインターフェースです。この例では eth0 を使用します。  
        virtual_router_id 51    # プライマリ/セカンダリクラスターの virtual_router_id です。同一 VPC 内の異なるクラスターには、異なる virtual_router_id 値が必要です。
        nopreempt               # 非preemptive モードに設定します。
        priority 10             # 優先度です。値が大きいほど優先度が高くなります。この例では、優先度を 10 に設定して、このインスタンスをセカンダリインスタンスにします。
        advert_int 1            # ハートビートメッセージを送信する間隔 (秒) です。値が小さいと、設定がネットワークのジッターの影響を受けやすくなり、頻繁なフェイルオーバーや一時的なスプリットブレインシナリオが発生する可能性があります。値が大きいと、プライマリインスタンスに障害が発生した後のフェイルオーバー時間が増加する可能性があります。
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        unicast_src_ip 192.168.0.26   # このインスタンスのプライベート IP アドレスです。この例では 192.168.0.26 を使用します。
        unicast_peer {
            192.168.0.25          # ピアインスタンスのプライベート IP アドレスです。この例では 192.168.0.25 を使用します。複数のセカンダリ ECS インスタンスがある場合は、各ピアインスタンスの IP アドレスを新しい行に記述します。カンマや他の区切り文字は使用しないでください。
        }
        virtual_ipaddress {
            192.168.0.24          # 仮想 IP アドレスです。これを HaVip の IP アドレスに設定します。この例では 192.168.0.24 を使用します。 
        }    
        garp_master_delay 1       # MASTER 状態に遷移してから Gratuitous ARP パケットを送信するまでの遅延時間 (秒) です。 
        garp_master_refresh 5     # Gratuitous ARP メッセージを定期的に送信する間隔 (秒) です。 

        track_interface {
            eth0                  # 仮想 IP アドレスがバインドされるネットワークインターフェースです。この例では eth0 を使用します。
        }
    }' > /etc/keepalived/keepalived.conf
    systemctl start keepalived
  EOT
  )                                           # Keepalived をインストールするためのセカンダリサーバーの初期化スクリプトを指定します。
  private_ip           = "192.168.0.26"       # セカンダリサーバーのプライベート IP アドレスを指定します。 
  instance_charge_type = "PostPaid"           # 課金方法を従量課金に設定します。
  spot_strategy        = "SpotWithPriceLimit" # 価格上限付きのスポットインスタンスとして設定します。
}

# プライマリサーバーに関連付けます。
resource "alicloud_havip_attachment" "test_havip_attachment" {
  ha_vip_id   = alicloud_havip.test_havip.id
  instance_id = alicloud_instance.test_master_instance.id # HaVip に関連付けるインスタンスの ID を指定します。
}

# セカンダリサーバーに関連付けます。
resource "alicloud_havip_attachment" "test_havip_attachment_new" {
  ha_vip_id   = alicloud_havip.test_havip.id
  instance_id = alicloud_instance.test_backup_instance.id # HaVip に関連付けるインスタンスの ID を指定します。
}

パブリックアクセス用の EIP の関連付け

HaVip は vSwitch 内のプライベート IP です。インターネットアクセスを有効にするには、EIP を HaVip に関連付けます。EIP には料金が発生することにご注意ください。

1. EIP は HaVip と同じリージョンにあり、利用可能である必要があります。
2. ECS インスタンスが HaVip に関連付けられた EIP を介してインターネットにアクセスする場合、アウトバウンドパケットのソース IP は、ECS インスタンスのプライベート IP ではなく、HaVip のプライベート IP になります。

コンソール

EIP の関連付けまたは関連付けの解除

EIP を関連付ける前に、EIP コンソールで作成するか、関連付けページで EIP の作成 をクリックします。

対象の HaVip の 操作 列で、EIP アドレスのバインド または EIP のバインド解除 をクリックします。

API

EIP を関連付ける前に、AllocateEipAddress API を呼び出して作成します。

Terraform

リソース:alicloud_eip_addressalicloud_eip_association
# HaVip のリージョンを指定します。 
provider "alicloud" {
  region = "cn-hangzhou"
}

# HaVip の ID を指定します。
variable "havip_id" {
  default = "havip-8vb0******"  # 実際の HaVip ID に置き換えてください。
}

# EIP を作成します。
resource "alicloud_eip_address" "test_eip" {
  address_name = "test_eip_name"
  isp          = "BGP"
  netmode      = "public"
  bandwidth    = "1"
  payment_type = "PayAsYouGo"
}

# 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 # HaVip の ID を指定します。
}

詳細情報

課金

HaVip はパブリックプレビュー中であり、無料です。パブリックプレビュー期間中は SLA は提供されません。

関連リソース ( ECS インスタンスEIP など) は、それぞれの料金ルールに従って課金されます。

サポート対象リージョン

エリア

リージョン

アジアパシフィック - 中国

China (Hangzhou)China (Shanghai)China (Qingdao)China (Beijing)China (Zhangjiakou)China (Hohhot)China (Ulanqab)China (Shenzhen)China (Heyuan)China (Guangzhou)China (Chengdu)China (Zhongwei)China (Hong Kong)China (Wuhan - Local Region)China (Fuzhou - Local Region, decommissioning)

アジアパシフィック - その他

Japan (Tokyo)South Korea (Seoul)SingaporeMalaysia (Kuala Lumpur)Indonesia (Jakarta)Philippines (Manila)Thailand (Bangkok)Malaysia (Johor)

ヨーロッパとアメリカ

Germany (Frankfurt)UK (London)France (Paris)US (Silicon Valley)US (Virginia)Mexico

中東

UAE (Dubai)Saudi Arabia (Riyadh, partner region)

クォータ

HaVip はパブリックプレビュー中です。有効にするには、Quota Center コンソールにログインして申請を送信します。

クォータ名

説明

デフォルト制限値

調整可能

なし

HaVip をサポートするネットワークタイプ。

VPC

いいえ

ECS インスタンスあたりの HaVip の最大数。

5

HaVip あたりの EIP の最大数。

1

同時に HaVip に関連付け可能な ECS インスタンスまたは Elastic Network Interface (ENI) の最大数。

10

1. HaVip は、最大 10 個の ECS インスタンスまたは 10 個の ENI に関連付けられますが、両方を同時に関連付けることはできません。
2. HaVip は、HaVip と同じ vSwitch 内にある ECS インスタンスまたは ENI のみに関連付けられます。

HaVip がブロードキャストおよびマルチキャスト通信をサポートするかどうか。

サポートされません

HaVip はユニキャスト通信のみをサポートします。高可用性を実現するために Keepalived などのサードパーティ製ソフトウェアを使用する場合は、設定ファイルで通信モードをユニキャストに変更する必要があります。

アカウントあたりに作成可能な HaVip の最大数。

50

VPC 内で作成可能な HaVip の最大数。

50

vpc_quota_havip_custom_route_entry

送信先が HaVip であるルートテーブル内のルートエントリの最大数。

5

はい。クォータの増量をリクエストするには、クォータ管理ページ または クォータセンター にアクセスしてください。