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

Virtual Private Cloud:高可用性仮想 IP (HaVip)

最終更新日:Jun 13, 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 アドレス (EIP) に関連付けます。これにより、トラフィックは EIP を経由してルーティングされ、高可用性なインターネット向けサービスが提供されます。

image

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

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

  • クォータ:Quota Center コンソールにログオンし、HaVip の作成権限を申請します。クォータ値が 1 の場合、HaVip の作成が有効になっていることを意味します。各アカウントは最大 50 個の 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 です。同じ VPC 内の異なるクラスターには、異なる virtual_router_id 値が必要です。
          nopreempt               # 非プリエンプティブモードに設定します。
          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 を使用します。クラスター内の他のすべてのピアインスタンスの IP アドレスを新しい行に記述します。カンマやその他の区切り文字は使用しないでください。
          }
          virtual_ipaddress {
              192.168.0.24          # 仮想 IP アドレスです。これを HaVip の IP アドレスに設定します。この例では 192.168.0.24 を使用します。
          }   
          garp_master_delay 1       # インスタンスがプライマリになった後、ARP キャッシュを更新するまでの遅延時間 (秒) です。
          garp_master_refresh 5     # 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               # 非プリエンプティブモードに設定します。
          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       # このインスタンスがプライマリインスタンスになった後、ARP キャッシュを更新するまでの遅延時間 (秒) です。
          garp_master_refresh 5     # 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 内からの HTTP トラフィックがポート 8000 へのアクセスを許可していることを確認してください。

リソースの関連付け解除

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

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 アドレスがバインドされるネットワークインターフェイスコントローラー (NIC) です。この例では eth0 を使用します。  
        virtual_router_id 51    # プライマリ/セカンダリクラスターの virtual_router_id です。同じ VPC 内の異なるクラスターには、異なる virtual_router_id 値が必要です。
        nopreempt               # 非プリエンプティブモードに設定します。
        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 を使用します。クラスター内の他のすべてのピアインスタンスの IP アドレスを新しい行に記述します。カンマやその他の区切り文字は使用しないでください。
        }
        virtual_ipaddress {
            192.168.0.24                # 仮想 IP アドレスです。これを HaVip の IP アドレスに設定します。この例では 192.168.0.24 を使用します。
        }   
        garp_master_delay 1             # このインスタンスへのフェールオーバー後、ARP キャッシュを更新するまでの遅延時間 (秒) です。 
        garp_master_refresh 5           # ARP メッセージの送信間隔 (秒) です。 

        track_interface {
            eth0                        # 仮想 IP アドレスがバインドされるネットワークインターフェイスコントローラー (NIC) です。この例では 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 アドレスがバインドされるネットワークインターフェイスコントローラー (NIC) です。この例では eth0 を使用します。  
        virtual_router_id 51    # プライマリ/セカンダリクラスターの virtual_router_id です。同じ VPC 内の異なるクラスターには、異なる virtual_router_id 値が必要です。
        nopreempt               # 非プリエンプティブモードに設定します。
        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       # このインスタンスへのフェールオーバー後、ARP キャッシュを更新するまでの遅延時間 (秒) です。 
        garp_master_refresh 5     # ARP メッセージの送信間隔 (秒) です。 

        track_interface {
            eth0                  # 仮想 IP アドレスがバインドされるネットワークインターフェイスコントローラー (NIC) です。この例では 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 です。インターネットアクセスを有効にするには、Elastic 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

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