BIG-IPのMulti-AZ HAクラスターをCloudFormationで作成してみた

BIG-IPのMulti-AZ HAクラスターをCloudFormationで作成してみた

ALB/NLBで対応できない要件があるときに
Clock Icon2025.07.16

BIG-IPのMulti-AZ HAクラスターを簡単に作成したい

こんにちは、のんピ(@non____97)です。

皆さんはBIG-IPのMulti-AZ HAクラスターを簡単に作成したいなと思ったことはありますか? 私はあります。

以下のような場面ではALB/NLBではなく、BIG-IPを使いたくなります。

  • 既存のBIG-IPからの移行
  • iRuleを用いた複雑な処理
  • IPベースの維持設定
  • SNATなしでのルーティング
  • 長時間のアイドルタイムアウト設定
  • TCPポートへの高度なMonitor設定

BIG-IPでMulti-AZのHAクラスターを構築することは可能です。

しかし、以下記事で紹介されているとおり、それなりの作業量があります。

https://dev.classmethod.jp/articles/f5-big-ip-ve-ha/

https://dev.classmethod.jp/articles/f5-big-ip-ve-single/

そんな折、F5のBIG-IPのドキュメントを見ていると、AWS上のBIG-IPでMulti-AZのHAクラスターを組むCloudFormationが公開されていました。

https://github.com/F5Networks/f5-aws-cloudformation-v2/tree/main/examples/failover

これは触るしかないですね。

実際に触ってみたので紹介します。

CloudFormationスタックのデプロイ

検証環境

検証環境は以下のとおりです。

フェイルオーバー前.png

フェイルオーバーすると、Webサーバーへのトラフィックは以下のような経路に変わります。

フェイルオーバー後.png

上述のGitHubリポジトリ内の図とサブネットCIDRは合わせています。

また、ターゲットとなるWebサーバーは/にアクセスするとホスト名を返すように設定しています。

BIG-IPのサブスクリプション

AWS MarktplaceからBIG-IPのサブスクリプションを行います。

今回は高機能、高性能は不要なので BIG-IP Virtual Edition - GOOD (PAYG, 25Mbps) を選択しました。

0.F5 BIG-IP Virtual Edition - GOOD (PAYG, 25Mbps).png

事前にサブスクリプションしないと、Stackをデプロイした際にIn order to use this AWS Marketplace product you need to accept terms and subscribe. To do so please visit https://aws.amazon.com/marketplace/pp?sku=6gxrih3enhavyxlj11or9z9htとエラーになります。

忘れずに行いましょう。

ちなみに、GOOD/BETTER/BESTの機能比較は以下にまとめられています。

https://www.f5.com/pdf/licensing/good-better-best-licensing-overview.pdf

Stackのデプロイ

Stackのデプロイをします。

用意されているCloudFormationテンプレートは以下の2種類があります。

  1. Failover : https://f5-cft-v2.s3.amazonaws.com/f5-aws-cloudformation-v2/v3.6.0.0/examples/failover/failover.yaml
  2. Failover Existing Network : https://f5-cft-v2.s3.amazonaws.com/f5-aws-cloudformation-v2/v3.6.0.0/examples/failover/failover-existing-network.yaml

前者がVPCやサンプルアプリも丸ごと作成するテンプレート、後者が既存のVPCにBIG-IPのHAクラスターに必要なリソースのみを作るものになります。

最初は前者でトライしていたのですが、以下のようなトラブルがあったので後者を使用します。

  1. サンプルアプリで使用するAMIが存在しない
  1. サブネットのCIDRとENIに割り当てるIPアドレスが噛み合わず失敗する
  • デフォルト設定でデプロイすると、BIG-IPの仮想アプライアンス作成時に以下のようなエラーが表示される

    Resource handler returned message: "Address does not fall within the subnet's address range (Service: Ec2, Status Code: 400, Request ID: 7212e058-ef44-4d32-85d9-9d2a6bded0a0) (SDK Attempt Count: 1)" (RequestToken: 699a3877-12da-d9ff-ba96-3af9efaa5011, HandlerErrorCode: InvalidRequest)
    
  • 詳細を確認すると、Stack内で作成したサブネットのCIDRとENIに割り当てるIPアドレスが噛み合っていない

    • 10.0.4.11のENIを10.0.7.0/24のサブネットに作成しようとする

Failover Existing Networkのテンプレートでデプロイしていきましょう。

テンプレートを指定します。

2.スタックの作成.png

スタック名や各種パラメーターを指定します。

パラメーターの詳細な説明はGitHubで公開されています。

Template Locationはデフォルトのままにします。

3.Templates Location.png

Network Configurationでは事前に用意しておいたVPCやサブネットの情報を指定します。IPアドレスは変更していません。

4.Network Configuration.png

Amazon EC2 Configurationはデフォルトのまま未指定です。DAG/Ingressでは指定のIPアドレスから操作できるように、自IPとManagement InterfaceへのパブリックIPの割り当てを有効化します。

5.DAG : Ingress.png

BIG-IP Configurationでは、ホスト名とCustom Image Id、Enter valid instance type、CFE S3 Bucketを入力しました。

6.BIG-IP Configuration .png

AMI IDは先ほどサブスクライブしたBIG-IPの製品名で検索をして確認します。

>  aws ec2 describe-images \
         --filters "Name=name,Values=*17.5.1-0.0.7**PAYG-Good 25Mbps*"
{
    "Images": [
        {
            "PlatformDetails": "Linux/UNIX",
            "UsageOperation": "RunInstances",
            "BlockDeviceMappings": [
                {
                    "Ebs": {
                        "DeleteOnTermination": true,
                        "SnapshotId": "snap-09cbfd286b405259c",
                        "VolumeSize": 41,
                        "VolumeType": "gp2",
                        "Encrypted": false
                    },
                    "DeviceName": "/dev/xvda"
                }
            ],
            "Description": "F5 BIGIP-17.5.1-0.0.7 PAYG-Good 25Mbps-250618085253",
            "EnaSupport": true,
            "Hypervisor": "xen",
            "ImageOwnerAlias": "aws-marketplace",
            "Name": "F5 BIGIP-17.5.1-0.0.7 PAYG-Good 25Mbps-250618085253-8e1217d4-a046-4cdf-894e-e38175bae37f",
            "RootDeviceName": "/dev/xvda",
            "RootDeviceType": "ebs",
            "SriovNetSupport": "simple",
            "VirtualizationType": "hvm",
            "DeprecationTime": "2027-07-01T05:58:52.000Z",
            "SourceImageId": "ami-0afabea61397af20d",
            "SourceImageRegion": "us-east-1",
            "ImageId": "ami-0235157aba1851b1f",
            "ImageLocation": "aws-marketplace/F5 BIGIP-17.5.1-0.0.7 PAYG-Good 25Mbps-250618085253-8e1217d4-a046-4cdf-894e-e38175bae37f",
            "State": "available",
            "OwnerId": "679593333241",
            "CreationDate": "2025-07-01T05:58:52.000Z",
            "Public": true,
            "ProductCodes": [
                {
                    "ProductCodeId": "8esk90vx7v713sa0muq2skw3j",
                    "ProductCodeType": "marketplace"
                }
            ],
            "Architecture": "x86_64",
            "ImageType": "machine"
        }
    ]
}

サブスクライブした製品がサポートしているインスタンスタイプはAWS Marketplaceのコンソールから確認する形が良いでしょう。m7iやc7iといったインスタンスクラスは現状未サポートでした。

インスタンスタイプの選定は単純なCPUやメモリの性能だけではなく、割り当て可能なENI数とENIに割り当て可能なIPアドレス数も加味する必要があります。

例えば、m6i.xlargeの場合は最大4NIで、各ENIに15個のIPアドレスを割り当てることが可能です。インスタンスタイプごとのENIとIPアドレス数は以下AWS公式ドキュメントをご覧ください。

https://docs.aws.amazon.com/ec2/latest/instancetypes/gp.html#gp_network

IPアドレスはBIG-IP内のVirtual Serverごとに振ることになるため、m6i.xlargeの場合は作成できるVirtual Serverは(15個 - プライマリIPアドレス) × External用に割り当てることが可能なENI数2 = 28個までとなります。多数のVirtual Serverを動作させる場合はその分より大きなインスタンスサイズを選択することになるため注意しましょう。

Application ConfigurationではProvition Public IP'sのみtrueに変更しました。他は全てデフォルトです。

7.Application Configuration.png

スタックオプションの指定です。下のチェックボックス2つにチェックを入れて次へをクリックします。

8.スタックオプションの設定.png

内容を確認してデプロイします。

9.確認して作成.png

デプロイ中です。

10.デプロイ中.png

以下ネストされたStackが作成されていますね

  • Function
  • Dag
  • Access
  • BigIpInstance01
  • BigIpInstance02

BigIpInstance01を確認してみると、絶賛インスタンス作成中です。

11.デプロイ中2.png

EC2インスタンスとしての側は既に出来上がっていますね。

12.デプロイ中3.png

myuniqstr-bigip-vm-01に管理用、Self-IP用、VIP用の3つのEIPが割り当てられていることが分かります。

myuniqstr-bigip-vm-01のシステムログを確認すると、以下のようにスタートアップスクリプトが正常に完了していることがわかります。

/src/mock_tracer/mock_context.ts
./f5-bigip-runtime-init-aws/node_modules/opentracing/src/mock_tracer/mock_report.ts
./f5-bigip-runtime-init-aws/node_modules/opentracing/src/mock_tracer/mock_span.ts
.
.
(中略)
.
.
./f5-bigip-runtime-init-aws/src/schema/base_schema.json
./f5-bigip-runtime-init-aws/src/version
29321 blocks
2025-07-14T02:32:32 - Getting lastest AT metadata at https://cdn.f5.com/product/cloudsolutions/f5-extension-metadata/latest/metadata.json
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100 64119  100 64119    0     0  1592k      0 --:--:-- --:--:-- --:--:-- 1647k
2025-07-14T02:32:32 - Creating command utility.
2025-07-14T02:32:33 - RPM installation is completed.
+ f5-bigip-runtime-init --config-file /config/cloud/runtime-init.conf --skip-telemetry
2025-07-14T09:32:34.179Z [9154]: info: Configuration file: /config/cloud/runtime-init.conf
2025-07-14T09:32:34.187Z [9154]: info: Processing controls parameters
2025-07-14T09:32:34.189Z [9154]: info: F5 Telemetry is disabled.
2025-07-14T09:32:34.189Z [9154]: info: Validating provided declaration
2025-07-14T09:32:34.234Z [9154]: info: Successfully validated declaration
mcpd has reached 'running' state
2025-07-14T09:33:35.551Z [9154]: info: Resolving parameters
2025-07-14T09:33:36.126Z [9154]: info: Interface:1.1
2025-07-14T09:33:36.129Z [9154]: info: MAC adddress is not populated on 1.1 BIGIP interface. Trying to re-fetch interface data. Left attempts: 99
2025-07-14T09:33:36.143Z [9154]: info: Interface:1.2
2025-07-14T09:33:36.144Z [9154]: info: MAC adddress is not populated on 1.2 BIGIP interface. Trying to re-fetch interface data. Left attempts: 99
2025-07-14T09:33:36.158Z [9154]: info: Interface:1.1
2025-07-14T09:33:36.159Z [9154]: info: MAC adddress is not populated on 1.1 BIGIP interface. Trying to re-fetch interface data. Left attempts: 99
2025-07-14T09:33:46.155Z [9154]: info: Interface:1.1
2025-07-14T09:33:46.157Z [9154]: info: MAC address found for 1.1: 0e:44:6d:52:d2:c1
2025-07-14T09:33:46.162Z [9154]: info: Primary IP for 0e:44:6d:52:d2:c1: 10.0.0.11
2025-07-14T09:33:46.164Z [9154]: info: ip and mask for 0e:44:6d:52:d2:c1: 10.0.0.11/24
2025-07-14T09:33:46.170Z [9154]: info: Interface:1.2
2025-07-14T09:33:46.171Z [9154]: info: MAC address found for 1.2: 0e:dc:be:71:31:49
2025-07-14T09:33:46.173Z [9154]: info: Primary IP for 0e:dc:be:71:31:49: 10.0.2.11
2025-07-14T09:33:46.176Z [9154]: info: ip and mask for 0e:dc:be:71:31:49: 10.0.2.11/24
2025-07-14T09:33:46.184Z [9154]: info: Interface:1.1
2025-07-14T09:33:46.187Z [9154]: info: MAC address found for 1.1: 0e:44:6d:52:d2:c1
2025-07-14T09:33:46.188Z [9154]: info: Primary IP for 0e:44:6d:52:d2:c1: 10.0.0.11
2025-07-14T09:33:46.190Z [9154]: info: ip and mask for 0e:44:6d:52:d2:c1: 10.0.0.11/24
2025-07-14T09:33:46.280Z [9154]: info: Executing install operations.
2025-07-14T09:33:46.287Z [9154]: info: Installing - do 1.44.0
2025-07-14T09:33:48.656Z [9154]: info: Validating - do extension is available.
2025-07-14T09:33:58.687Z [9154]: info: Installing - as3 3.51.0
2025-07-14T09:34:02.003Z [9154]: info: Validating - as3 extension is available.
2025-07-14T09:34:27.900Z [9154]: info: Installing - cf 2.1.2
2025-07-14T09:34:30.516Z [9154]: info: Validating - cf extension is available.
2025-07-14T09:34:40.533Z [9154]: info: Executing service operations.
2025-07-14T09:34:40.643Z [9154]: info: Creating - do 1.44.0 {"schemaVersion":"1.0.0","class":"Device","async":true,"label":"Failover 3NIC BIG-IP declaration for Declarative Onboarding with PAYG license","Common":{"class":"Tenant","My_DbVariables":{"class":"DbVariables","config.allow.rfc3927":"enable","tm.tcpudptxchecksum":"Software-only"},"My_Ntp":{"class":"NTP","servers":["0.pool.ntp.org","1.pool.ntp.org"],"timezone":"UTC"},"My_Dns":{"class":"DNS","nameServers":["169.254.169.253"],"search":["f5.com"]},"My_System":{"autoPhonehome":true,"class":"System","hostname":"failover01.www.non-97.net"},"admin":{"class":"User","userType":"regular","password":"********","shell":"bash"},"external":{"class":"VLAN","tag":4094,"mtu":1500,"interfaces":[{"name":"1.1","tagged":false}]},"external-self":{"class":"SelfIp","address":"10.0.0.11/24","vlan":"external","allowService":["tcp:443","udp:1026","tcp:4353","tcp:6123","tcp:6124","tcp:6125","tcp:6126","tcp:6127","tcp:6128"],"trafficGroup":"traffic-gr[2025-07-14T09:34:40.899796]oup-local-only"},"internal":{"class":"VLAN","interfaces":[{"name":"1.2","tagged":false}],"mtu":1500,"tag":4093},"internal-self":{"class":"SelfIp","address":"10.0.2.11/24","allowService":"none","trafficGroup":"traffic-group-local-only","vlan":"internal"},"default":{"class":"Route","gw":"10.0.0.1","network":"default","mtu":1500,"localOnly":true}}}
2025-07-14T09:35:01.150Z [9154]: info: Creating - cf 2.1.2 {"schemaVersion":"1.0.0","class":"Cloud_Failover","environment":"aws","controls":{"class":"Controls","logLevel":"silly"},"externalStorage":{"encryption":{"serverSide":{"enabled":true,"algorithm":"AES256"}},"scopingTags":{"f5_cloud_failover_label":"bigip_high_availability_solution"}},"failoverAddresses":{"enabled":true,"scopingTags":{"f5_cloud_failover_label":"bigip_high_availability_solution"},"requireScopingTags":false}}
2025-07-14T09:35:09.409Z [9154]: info: Creating - do 1.44.0 {"schemaVersion":"1.0.0","class":"Device","async":true,"label":"Failover 3NIC BIG-IP declaration for Declarative Onboarding with PAYG license","Common":{"class":"Tenant","My_DbVariables":{"class":"DbVariables","config.allow.rfc3927":"enable","tm.tcpudptxchecksum":"Software-only"},"My_Ntp":{"class":"NTP","servers":["0.pool.ntp.org","1.pool.ntp.org"],"timezone":"UTC"},"My_Dns":{"class":"DNS","nameServers":["169.254.169.253"],"search":["f5.com"]},"My_System":{"autoPhonehome":true,"class":"System","hostname":"failover01.www.non-97.net"},"admin":{"class":"User","userType":"regular","password":"********","shell":"bash"},"external":{"class":"VLAN","tag":4094,"mtu":1500,"interfaces":[{"name":"1.1","tagged":false}]},"external-self":{"class":"SelfIp","address":"10.0.0.11/24","vlan":"external","allowService":["tcp:443","udp:1026","tcp:4353","tcp:6123","tcp:6124","tcp:6125","tcp:6126","tcp:6127","tcp:6128"],"trafficGroup":"traffic-gr[2025-07-14T09:35:09.500088]oup-local-only"},"internal":{"class":"VLAN","interfaces":[{"name":"1.2","tagged":false}],"mtu":1500,"tag":4093},"internal-self":{"class":"SelfIp","address":"10.0.2.11/24","allowService":"none","trafficGroup":"traffic-group-local-only","vlan":"internal"},"default":{"class":"Route","gw":"10.0.0.1","network":"default","mtu":1500,"localOnly":true},"configSync":{"class":"ConfigSync","configsyncIp":"/Common/external-self/address"},"failoverAddress":{"class":"FailoverUnicast","address":"/Common/external-self/address"},"failoverGroup":{"class":"DeviceGroup","type":"sync-failover","members":["failover01.www.non-97.net","failover02.www.non-97.net"],"owner":"/Common/failoverGroup/members/0","autoSync":true,"saveOnAutoSync":false,"networkFailover":true,"fullLoadOnSync":false,"asmSync":false},"trust":{"class":"DeviceTrust","localUsername":"admin","localPassword":"********","remoteHost":"/Common/failoverGroup/members/0","remoteUsername":"admin","remotePassword":"********"}}}
2025-07-14T09:35:29.698Z [9154]: info: All operations finished successfully
+ [[ 0 -eq 0 ]]
+ /opt/aws/bin/cfn-signal -e 0 --stack BigIp-Failover-Existing-Network-Example-BigIpInstance01-W7OZT3OX0QYW --resource Bigip3NicInstance --region us-east-1
++ date +%Y-%m-%dT%H:%M:%S.%3NZ
+ echo '2025-07-14T09:36:00.870Z : Startup Script Finish'
2025-07-14T09:36:00.870Z : Startup Script Finish
+ rm -f /tmp/6263.tmp

cf 2.1.2とあることから、BIG-IPのCloud Failoverの拡張機能も一緒にインストールしてくれていそうですね。

しばらくするとStackのデプロイが完了しました。全体で10分程度であればサクッと検証するときにありがたいですね。

13.デプロイ完了.png

実行時間が長いBigIpInstance01のStackを覗くと、BIG-IPのインスタンスを作成するのに6分ほどかかっていたことが分かります。

14.デプロイ完了2.png

Stackから出力された値は以下のとおりです。

15.出力の確認.png

EC2インスタンスとENI、EIPのタグの確認

BIG-IPがAWSをはじめとするクラウド上でフェイルオーバーする際に使用する拡張機能Cloud Failoverでは、タグを使って制御をします。

どのようなタグが付与されているのか確認しましょう。

まずはEC2インスタンスです。

EC2インスタンスではHAクラスターのピアとなるインスタンスのIPアドレスやホスト名といった情報を保持していることが分かります。また、VIPを紐づけるプライベートIPアドレスの情報vip1Addrもありますね。

EC2インスタンス
>  aws ec2 describe-instances \
         --filters "Name=tag:Name,Values=myuniqstr*" \
         --output json | jq -r '
     ["InstanceId", "TagKey", "TagValue"],
     (.Reservations[].Instances[] |
      . as $instance |
      (.Tags | sort_by(.Key)[] |
       [$instance.InstanceId, .Key, .Value])) |
     @tsv' | column -t
InstanceId           TagKey                         TagValue
i-03ab50d0e593d8887  Name                           myuniqstr-bigip-vm-01
i-03ab50d0e593d8887  application                    f5app
i-03ab50d0e593d8887  aws:cloudformation:logical-id  Bigip3NicInstance
i-03ab50d0e593d8887  aws:cloudformation:stack-id    arn:aws:cloudformation:us-east-1:<AWSアカウントID>:stack/BigIp-Failover-Existing-Network-Example-BigIpInstance01-W7OZT3OX0QYW/201dc1a0-6095-11f0-af79-0affdb4011df
i-03ab50d0e593d8887  aws:cloudformation:stack-name  BigIp-Failover-Existing-Network-Example-BigIpInstance01-W7OZT3OX0QYW
i-03ab50d0e593d8887  aws:ec2launchtemplate:id       lt-03fa4edfd85b7d08e
i-03ab50d0e593d8887  aws:ec2launchtemplate:version  1
i-03ab50d0e593d8887  bigIpPeerAddr                  10.0.1.11
i-03ab50d0e593d8887  bigIpPeerHostname              failover02.www.non-97.net
i-03ab50d0e593d8887  costcenter                     f5cost
i-03ab50d0e593d8887  environment                    f5env
i-03ab50d0e593d8887  failoverTag                    bigip_high_availability_solution
i-03ab50d0e593d8887  group                          f5group
i-03ab50d0e593d8887  hostname                       failover01.www.non-97.net
i-03ab50d0e593d8887  owner                          f5owner
i-03ab50d0e593d8887  vip1Addr                       10.0.0.101
i-03ab50d0e593d8887  vip2Addr                       NOT_USED
i-03ab50d0e593d8887  vip3Addr                       NOT_USED
i-03ab50d0e593d8887  vip4Addr                       NOT_USED
i-08def11c0268f8fbd  Name                           myuniqstr-bigip-vm-02
i-08def11c0268f8fbd  application                    f5app
i-08def11c0268f8fbd  aws:cloudformation:logical-id  Bigip3NicInstance
i-08def11c0268f8fbd  aws:cloudformation:stack-id    arn:aws:cloudformation:us-east-1:<AWSアカウントID>:stack/BigIp-Failover-Existing-Network-Example-BigIpInstance02-OUCGW9TMOA7T/201eac00-6095-11f0-99b5-0e906b73ee85
i-08def11c0268f8fbd  aws:cloudformation:stack-name  BigIp-Failover-Existing-Network-Example-BigIpInstance02-OUCGW9TMOA7T
i-08def11c0268f8fbd  aws:ec2launchtemplate:id       lt-0301dfeae0830f8da
i-08def11c0268f8fbd  aws:ec2launchtemplate:version  1
i-08def11c0268f8fbd  bigIpPeerAddr                  10.0.1.11
i-08def11c0268f8fbd  bigIpPeerHostname              failover01.www.non-97.net
i-08def11c0268f8fbd  costcenter                     f5cost
i-08def11c0268f8fbd  environment                    f5env
i-08def11c0268f8fbd  failoverTag                    bigip_high_availability_solution
i-08def11c0268f8fbd  group                          f5group
i-08def11c0268f8fbd  hostname                       failover02.www.non-97.net
i-08def11c0268f8fbd  owner                          f5owner
i-08def11c0268f8fbd  vip1Addr                       10.0.4.101
i-08def11c0268f8fbd  vip2Addr                       NOT_USED
i-08def11c0268f8fbd  vip3Addr                       NOT_USED
i-08def11c0268f8fbd  vip4Addr                       NOT_USED

次にENIです。

管理用のENI以外はf5_cloud_failover_labelf5_cloud_failover_nic_mapが設定されていることが分かります。

ENI
>  aws ec2 describe-network-interfaces \
         --filters "Name=tag:Name,Values=myuniqstr*" \
         --output json | jq -r '
     ["NetworkInterfaceId", "TagKey", "TagValue"],
     (.NetworkInterfaces[] |
      . as $eni |
      (.TagSet | sort_by(.Key)[] |
       [$eni.NetworkInterfaceId, .Key, .Value])) |
     @tsv' | column -t
NetworkInterfaceId     TagKey                         TagValue
eni-0ad274756355a02b3  Name                           myuniqstr-bigip-static-external-int-02
eni-0ad274756355a02b3  application                    f5app
eni-0ad274756355a02b3  aws:cloudformation:logical-id  BigipStaticExternalInterface
eni-0ad274756355a02b3  aws:cloudformation:stack-id    arn:aws:cloudformation:us-east-1:<AWSアカウントID>:stack/BigIp-Failover-Existing-Network-Example-BigIpInstance02-OUCGW9TMOA7T/201eac00-6095-11f0-99b5-0e906b73ee85
eni-0ad274756355a02b3  aws:cloudformation:stack-name  BigIp-Failover-Existing-Network-Example-BigIpInstance02-OUCGW9TMOA7T
eni-0ad274756355a02b3  costcenter                     f5cost
eni-0ad274756355a02b3  environment                    f5env
eni-0ad274756355a02b3  f5_cloud_failover_label        bigip_high_availability_solution
eni-0ad274756355a02b3  f5_cloud_failover_nic_map      external
eni-0ad274756355a02b3  group                          f5group
eni-0ad274756355a02b3  owner                          f5owner
eni-03790053af14b8e72  Name                           myuniqstr-bigip-static-mgmt-int-02
eni-03790053af14b8e72  application                    f5app
eni-03790053af14b8e72  aws:cloudformation:logical-id  BigipStaticManagementInterface
eni-03790053af14b8e72  aws:cloudformation:stack-id    arn:aws:cloudformation:us-east-1:<AWSアカウントID>:stack/BigIp-Failover-Existing-Network-Example-BigIpInstance02-OUCGW9TMOA7T/201eac00-6095-11f0-99b5-0e906b73ee85
eni-03790053af14b8e72  aws:cloudformation:stack-name  BigIp-Failover-Existing-Network-Example-BigIpInstance02-OUCGW9TMOA7T
eni-03790053af14b8e72  costcenter                     f5cost
eni-03790053af14b8e72  environment                    f5env
eni-03790053af14b8e72  group                          f5group
eni-03790053af14b8e72  owner                          f5owner
eni-05e3409db92210a8d  Name                           myuniqstr-bigip-static-internal-int-02
eni-05e3409db92210a8d  application                    f5app
eni-05e3409db92210a8d  aws:cloudformation:logical-id  BigipStaticInternalInterface
eni-05e3409db92210a8d  aws:cloudformation:stack-id    arn:aws:cloudformation:us-east-1:<AWSアカウントID>:stack/BigIp-Failover-Existing-Network-Example-BigIpInstance02-OUCGW9TMOA7T/201eac00-6095-11f0-99b5-0e906b73ee85
eni-05e3409db92210a8d  aws:cloudformation:stack-name  BigIp-Failover-Existing-Network-Example-BigIpInstance02-OUCGW9TMOA7T
eni-05e3409db92210a8d  costcenter                     f5cost
eni-05e3409db92210a8d  environment                    f5env
eni-05e3409db92210a8d  f5_cloud_failover_label        bigip_high_availability_solution
eni-05e3409db92210a8d  f5_cloud_failover_nic_map      internal
eni-05e3409db92210a8d  group                          f5group
eni-05e3409db92210a8d  owner                          f5owner
eni-088673926ad09017f  Name                           myuniqstr-bigip-static-internal-int-01
eni-088673926ad09017f  application                    f5app
eni-088673926ad09017f  aws:cloudformation:logical-id  BigipStaticInternalInterface
eni-088673926ad09017f  aws:cloudformation:stack-id    arn:aws:cloudformation:us-east-1:<AWSアカウントID>:stack/BigIp-Failover-Existing-Network-Example-BigIpInstance01-W7OZT3OX0QYW/201dc1a0-6095-11f0-af79-0affdb4011df
eni-088673926ad09017f  aws:cloudformation:stack-name  BigIp-Failover-Existing-Network-Example-BigIpInstance01-W7OZT3OX0QYW
eni-088673926ad09017f  costcenter                     f5cost
eni-088673926ad09017f  environment                    f5env
eni-088673926ad09017f  f5_cloud_failover_label        bigip_high_availability_solution
eni-088673926ad09017f  f5_cloud_failover_nic_map      internal
eni-088673926ad09017f  group                          f5group
eni-088673926ad09017f  owner                          f5owner
eni-0089909d46aae6c03  Name                           myuniqstr-bigip-static-external-int-01
eni-0089909d46aae6c03  application                    f5app
eni-0089909d46aae6c03  aws:cloudformation:logical-id  BigipStaticExternalInterface
eni-0089909d46aae6c03  aws:cloudformation:stack-id    arn:aws:cloudformation:us-east-1:<AWSアカウントID>:stack/BigIp-Failover-Existing-Network-Example-BigIpInstance01-W7OZT3OX0QYW/201dc1a0-6095-11f0-af79-0affdb4011df
eni-0089909d46aae6c03  aws:cloudformation:stack-name  BigIp-Failover-Existing-Network-Example-BigIpInstance01-W7OZT3OX0QYW
eni-0089909d46aae6c03  costcenter                     f5cost
eni-0089909d46aae6c03  environment                    f5env
eni-0089909d46aae6c03  f5_cloud_failover_label        bigip_high_availability_solution
eni-0089909d46aae6c03  f5_cloud_failover_nic_map      external
eni-0089909d46aae6c03  group                          f5group
eni-0089909d46aae6c03  owner                          f5owner
eni-0646bd7fd390afb8d  Name                           myuniqstr-bigip-static-mgmt-int-01
eni-0646bd7fd390afb8d  application                    f5app
eni-0646bd7fd390afb8d  aws:cloudformation:logical-id  BigipStaticManagementInterface
eni-0646bd7fd390afb8d  aws:cloudformation:stack-id    arn:aws:cloudformation:us-east-1:<AWSアカウントID>:stack/BigIp-Failover-Existing-Network-Example-BigIpInstance01-W7OZT3OX0QYW/201dc1a0-6095-11f0-af79-0affdb4011df
eni-0646bd7fd390afb8d  aws:cloudformation:stack-name  BigIp-Failover-Existing-Network-Example-BigIpInstance01-W7OZT3OX0QYW
eni-0646bd7fd390afb8d  costcenter                     f5cost
eni-0646bd7fd390afb8d  environment                    f5env
eni-0646bd7fd390afb8d  group                          f5group
eni-0646bd7fd390afb8d  owner                          f5owner

最後にEIPです。

VIP用のEIPであるmyuniqstr-bigip-external-eip-03のみ、f5_cloud_failover_labelf5_cloud_failover_vipsが設定されていますね。

EIP
>  aws ec2 describe-addresses \
         --filters "Name=tag:Name,Values=myuniqstr*" \
         --output json | jq -r '
     ["AllocationId", "TagKey", "TagValue"],
     (.Addresses[] |
      . as $eip |
      (.Tags | sort_by(.Key)[] |
       [$eip.AllocationId, .Key, .Value])) |
     @tsv' | column -t
AllocationId                TagKey                         TagValue
eipalloc-058551cc0f2de8204  Name                           myuniqstr-bigip-external-eip-03
eipalloc-058551cc0f2de8204  application                    f5app
eipalloc-058551cc0f2de8204  aws:cloudformation:logical-id  BigipExternalEipAddress03
eipalloc-058551cc0f2de8204  aws:cloudformation:stack-id    arn:aws:cloudformation:us-east-1:<AWSアカウントID>:stack/BigIp-Failover-Existing-Network-Example-Dag-25LWX211ZSDL/b2aa0ac0-6094-11f0-b044-0efa85c79d6d
eipalloc-058551cc0f2de8204  aws:cloudformation:stack-name  BigIp-Failover-Existing-Network-Example-Dag-25LWX211ZSDL
eipalloc-058551cc0f2de8204  costcenter                     f5cost
eipalloc-058551cc0f2de8204  environment                    f5env
eipalloc-058551cc0f2de8204  f5_cloud_failover_label        bigip_high_availability_solution
eipalloc-058551cc0f2de8204  f5_cloud_failover_vips         10.0.0.101,10.0.4.101
eipalloc-058551cc0f2de8204  group                          f5group
eipalloc-058551cc0f2de8204  owner                          f5owner
eipalloc-079b643ec1c5b071f  Name                           myuniqstr-bigip-management-eip-02
eipalloc-079b643ec1c5b071f  application                    f5app
eipalloc-079b643ec1c5b071f  aws:cloudformation:logical-id  BigipManagementEipAddress02
eipalloc-079b643ec1c5b071f  aws:cloudformation:stack-id    arn:aws:cloudformation:us-east-1:<AWSアカウントID>:stack/BigIp-Failover-Existing-Network-Example-Dag-25LWX211ZSDL/b2aa0ac0-6094-11f0-b044-0efa85c79d6d
eipalloc-079b643ec1c5b071f  aws:cloudformation:stack-name  BigIp-Failover-Existing-Network-Example-Dag-25LWX211ZSDL
eipalloc-079b643ec1c5b071f  costcenter                     f5cost
eipalloc-079b643ec1c5b071f  environment                    f5env
eipalloc-079b643ec1c5b071f  group                          f5group
eipalloc-079b643ec1c5b071f  owner                          f5owner
eipalloc-07f2d046d905f2788  Name                           myuniqstr-bigip-management-eip-01
eipalloc-07f2d046d905f2788  application                    f5app
eipalloc-07f2d046d905f2788  aws:cloudformation:logical-id  BigipManagementEipAddress01
eipalloc-07f2d046d905f2788  aws:cloudformation:stack-id    arn:aws:cloudformation:us-east-1:<AWSアカウントID>:stack/BigIp-Failover-Existing-Network-Example-Dag-25LWX211ZSDL/b2aa0ac0-6094-11f0-b044-0efa85c79d6d
eipalloc-07f2d046d905f2788  aws:cloudformation:stack-name  BigIp-Failover-Existing-Network-Example-Dag-25LWX211ZSDL
eipalloc-07f2d046d905f2788  costcenter                     f5cost
eipalloc-07f2d046d905f2788  environment                    f5env
eipalloc-07f2d046d905f2788  group                          f5group
eipalloc-07f2d046d905f2788  owner                          f5owner
eipalloc-072223ccd79ae84ff  Name                           myuniqstr-bigip-external-eip-01
eipalloc-072223ccd79ae84ff  application                    f5app
eipalloc-072223ccd79ae84ff  aws:cloudformation:logical-id  BigipExternalEipAddress01
eipalloc-072223ccd79ae84ff  aws:cloudformation:stack-id    arn:aws:cloudformation:us-east-1:<AWSアカウントID>:stack/BigIp-Failover-Existing-Network-Example-Dag-25LWX211ZSDL/b2aa0ac0-6094-11f0-b044-0efa85c79d6d
eipalloc-072223ccd79ae84ff  aws:cloudformation:stack-name  BigIp-Failover-Existing-Network-Example-Dag-25LWX211ZSDL
eipalloc-072223ccd79ae84ff  costcenter                     f5cost
eipalloc-072223ccd79ae84ff  environment                    f5env
eipalloc-072223ccd79ae84ff  group                          f5group
eipalloc-072223ccd79ae84ff  owner                          f5owner
eipalloc-0a3299fe8dabc48fb  Name                           myuniqstr-bigip-external-eip-02
eipalloc-0a3299fe8dabc48fb  application                    f5app
eipalloc-0a3299fe8dabc48fb  aws:cloudformation:logical-id  BigipExternalEipAddress02
eipalloc-0a3299fe8dabc48fb  aws:cloudformation:stack-id    arn:aws:cloudformation:us-east-1:<AWSアカウントID>:stack/BigIp-Failover-Existing-Network-Example-Dag-25LWX211ZSDL/b2aa0ac0-6094-11f0-b044-0efa85c79d6d
eipalloc-0a3299fe8dabc48fb  aws:cloudformation:stack-name  BigIp-Failover-Existing-Network-Example-Dag-25LWX211ZSDL
eipalloc-0a3299fe8dabc48fb  costcenter                     f5cost
eipalloc-0a3299fe8dabc48fb  environment                    f5env
eipalloc-0a3299fe8dabc48fb  group                          f5group
eipalloc-0a3299fe8dabc48fb  owner                          f5owner

デプロイ後のBIG-IPの確認

BIG-IPへの接続

BIG-IPへ接続をしてみましょう。

認証情報はSecrets Managerに保存されているので、取得しておきます。

16.シークレットの取得.png

ブラウザからmyuniqstr-bigip-vm-01の管理用IPアドレスを叩いてアクセスします。

17.1号機のログイン画面.png

ログイン画面が表示されましたね。UsernameにadminをPasswordには先ほど取得した認証情報を入力してログインします。

すると、正常にログインが完了しました。

18.ログイン完了.png

どちらがActive/Standbyなのかの確認

BIG-IPのコンソールから色々確認したいのは山々ですが、BIG-IPの管理コンソールの左上を確認するとONLINE (STANDBY)となっていました。

Traffice Groupsを確認すると、Active Deviceがfailover02.wwww.non-97.netとmyuniqstr-bigip-vm-02の方となっています。

19.2号機がActive.png

先ほどEC2のコンソールから確認した際はVIP用のEIPが破り当たっていたのですが、フェイルオーバーしたのでしょうか。

EC2のコンソールから確認すると、確かにVIPのEIPであるmyuniqstr-bigip-external-eip-03がmyuniqstr-bigip-vm-02に割り当てられていました。

20.2号機がActive2.png

一方、myuniqstr-bigip-vm-01は割り当てられているEIPが先ほど確認した時から一つ減っていますね。

21.2号機がActive3.png

ということで、デプロイ完了までの間にフェイルオーバーが発生したようです。

フェイルオーバー時にはS3バケットにオブジェクトが書き込まれます。

バケットを確認すると、f5cloudfailoverstate.jsonが出力されていました。

27.バケット.png

こちらのオブジェクトの中身は以下のとおりです。

{
  "taskState": "SUCCEEDED",
  "message": "Failover Complete",
  "timestamp": "2025-07-14T09:35:52.746Z",
  "instance": "failover02.www.non-97.net",
  "failoverOperations": {
    "addresses": {
      "publicAddresses": {
        "3.214.127.249": {
          "current": {
            "PrivateIpAddress": "10.0.0.101",
            "AssociationId": "eipassoc-05a7360aea1028e17"
          },
          "target": {
            "PrivateIpAddress": "10.0.4.101",
            "NetworkInterfaceId": "eni-0ad274756355a02b3"
          },
          "AllocationId": "eipalloc-058551cc0f2de8204"
        }
      },
      "interfaces": {
        "disassociate": [
          {
            "networkInterfaceId": "eni-0089909d46aae6c03",
            "addresses": []
          },
          {
            "networkInterfaceId": "eni-088673926ad09017f",
            "addresses": []
          }
        ],
        "associate": [
          {
            "networkInterfaceId": "eni-0ad274756355a02b3",
            "addresses": []
          },
          {
            "networkInterfaceId": "eni-05e3409db92210a8d",
            "addresses": []
          }
        ]
      },
      "loadBalancerAddresses": {}
    },
    "routes": {}
  }
}

各種情報の確認

各種情報を確認しておきます。

Self IPs

22.Self IP.png

VLAN List

22.VLAN.png

Route (Common)

23.Route.png

Route (LOCAL_ONLY)

24.Route_LOCAL_ONLY.png

Package Management LX

26.Package MAnagement LX.png

Cloud Failover Extentionの情報確認

Cloud Failover Extention(以降CFE)の設定はREST APIを用いて行います。

設定方法は以下GitHubリポジトリやF5公式ドキュメントが参考になります。

https://clouddocs.f5.com/products/extensions/f5-cloud-failover/latest/userguide/configuration.html

https://clouddocs.f5.com/products/extensions/f5-cloud-failover/latest/userguide/aws.html#aws

https://github.com/F5Networks/f5-cloud-failover-extension

REST APIでCFEのバージョンを確認します。

>  curl \
    -sku admin:$admin_password \
    -X GET https://34.200.100.3/mgmt/shared/cloud-failover/info \
    | jq .
{
  "version": "2.1.2",
  "release": "2",
  "schemaCurrent": "2.1.2",
  "schemaMinimum": "0.9.1"
}

現在のCFEの定義を確認します。

>  curl \
    -sku admin:$admin_password \
    -X GET https://34.200.100.3/mgmt/shared/cloud-failover/declare \
    | jq .
{
  "message": "success",
  "declaration": {
    "schemaVersion": "1.0.0",
    "class": "Cloud_Failover",
    "environment": "aws",
    "controls": {
      "class": "Controls",
      "logLevel": "silly"
    },
    "externalStorage": {
      "encryption": {
        "serverSide": {
          "enabled": true,
          "algorithm": "AES256"
        }
      },
      "scopingTags": {
        "f5_cloud_failover_label": "bigip_high_availability_solution"
      }
    },
    "failoverAddresses": {
      "enabled": true,
      "scopingTags": {
        "f5_cloud_failover_label": "bigip_high_availability_solution"
      },
      "requireScopingTags": false
    }
  }
}

フェイルオーバーの確認

Active側のEC2インスタンスを停止させて、フェイルオーバーすることを確認します。

現在Activeなmyuniqstr-bigip-vm-02を停止します。

すると、myuniqstr-bigip-vm-01のBIG-IPのコンソールにて、myuniqstr-bigip-vm-01がActiveに変わったことを確認できました。

28.2号機を停止してフェイルオーバー後.png

S3バケットにはオブジェクトを上書きする形で新規オブジェクトがPUTされていました。

29.2号機を停止してフェイルオーバー後のバケット.png

こちらのオブジェクトの中身は以下のとおりです。

{
  "taskState": "SUCCEEDED",
  "message": "Failover Complete",
  "timestamp": "2025-07-14T10:30:30.190Z",
  "instance": "failover01.www.non-97.net",
  "failoverOperations": {
    "addresses": {
      "publicAddresses": {
        "3.214.127.249": {
          "current": {
            "PrivateIpAddress": "10.0.4.101",
            "AssociationId": "eipassoc-0c596fb4dc5c164ee"
          },
          "target": {
            "PrivateIpAddress": "10.0.0.101",
            "NetworkInterfaceId": "eni-0089909d46aae6c03"
          },
          "AllocationId": "eipalloc-058551cc0f2de8204"
        }
      },
      "interfaces": {
        "disassociate": [
          {
            "networkInterfaceId": "eni-05e3409db92210a8d",
            "addresses": []
          },
          {
            "networkInterfaceId": "eni-0ad274756355a02b3",
            "addresses": []
          }
        ],
        "associate": [
          {
            "networkInterfaceId": "eni-088673926ad09017f",
            "addresses": []
          },
          {
            "networkInterfaceId": "eni-0089909d46aae6c03",
            "addresses": []
          }
        ]
      },
      "loadBalancerAddresses": {}
    },
    "routes": {}
  }
}

JSON Linesで過去のフェイルオーバー情報がどんどん追加されていく形ではなく、最新のフェイルオーバー結果が確認できるようです。

BIG-IPからWebサーバーへのルーティング

Poolの設定

BIG-IPからWebサーバーへのルーティングがされるyおうに設定をしていきます。

まずはターゲットとなるWebサーバーの情報をPoolとして設定します。

30.Poolの作成.png

2台のWebサーバーをPoolに登録します。

31.Poolの作成2.png

登録が完了すると、以下のようになります。Statusが緑になっていたらOKです。

32.Poolの作成後.png

Virtual Serverの設定

次にVirtual Serverの設定です。

33.Virtual Serverの作成.png

送信先(Delisitnation Address/Mask)にmyuniqstr-bigip-vm-01のVIP用のプライベートIPアドレスを指定し、HTTP通信するように設定します。

34.Virtual Serverの作成2_2.png

Auto MapでSource NATする設定と、先ほど作成したPoolの割り当ても忘れずに行いましょう。

設定が完了すると以下のようになります。

35.Virtual Serverの作成3.png

動作確認

動作確認です。

Virtual Serverで指定したIPアドレスに紐づくEIPに繰り返しアクセスをします。

>  curl http://3.214.127.249/
big-ip-application1-01

>  curl http://3.214.127.249/
big-ip-application1-02

>  curl http://3.214.127.249/
big-ip-application1-01

>  curl http://3.214.127.249/
big-ip-application1-02

>  curl http://3.214.127.249/
big-ip-application1-01

>  curl http://3.214.127.249/
big-ip-application1-02

綺麗に交互にターゲットとなるWebサーバーにアクセスしていることがわかりますね。

各Webサーバーの/var/log/nginx/access.logを確認すると、以下のようにヘルスチェック含めたアクセス時のログが記録されていました。

big-ip-application1-01
10.0.4.11 - - [15/Jul/2025:10:18:32 +0000] "GET /" 200 23 "-" "-" "-"
10.0.0.11 - - [15/Jul/2025:10:18:36 +0000] "GET / HTTP/1.1" 200 23 "-" "curl/8.14.1" "-"
10.0.0.11 - - [15/Jul/2025:10:18:36 +0000] "GET / HTTP/1.1" 200 23 "-" "curl/8.14.1" "-"
10.0.0.11 - - [15/Jul/2025:10:18:37 +0000] "GET /" 200 23 "-" "-" "-"
big-ip-application1-02
10.0.0.11 - - [15/Jul/2025:10:18:34 +0000] "GET / HTTP/1.1" 200 23 "-" "curl/8.14.1" "-"
10.0.0.11 - - [15/Jul/2025:10:18:35 +0000] "GET /" 200 23 "-" "-" "-"
10.0.4.11 - - [15/Jul/2025:10:18:35 +0000] "GET /" 200 23 "-" "-" "-"
10.0.0.11 - - [15/Jul/2025:10:18:37 +0000] "GET / HTTP/1.1" 200 23 "-" "curl/8.14.1" "-"

フェイルオーバーの動作確認

フェイルオーバーさせた際に、継続してWebサーバーにトラフィックを流すことができるか確認をします。

フェイルオーバーしてからどのぐらいの時間で正常にアクセスできるようになるか把握するために、継続して0.1秒間隔でアクセスしておきます。

$ while true; do
    start_time=$(date +%s.%N)
    response=$(curl -s --max-time 5 "http://3.214.127.249/index.html")
    end_time=$(date +%s.%N)
    elapsed=$(echo "$end_time - $start_time" | bc)

    echo "$response | Response time: ${elapsed}s"
    sleep 0.1
done
big-ip-application1-02 | Response time: .427902000s
big-ip-application1-01 | Response time: .419772000s
big-ip-application1-02 | Response time: .440274000s
big-ip-application1-01 | Response time: .401486000s

現在のDevice Managementの概要は以下のようになっています。

36.同期中.png

traffice-group1を選択して、Force to Standbyをクリックします。

37.フェイルオーバー.png

ターゲットがmyuniqstr-bigip-vm-02である、failover02.www.non-97.netであることを確認して、Force to Standbyをクリックします。

38.フェイルオーバー2.png

myuniqstr-bigip-vm-01がSTANDBYに変わりましたね。

39.フェイルオーバー完了.png

この時のアクセス状況を確認すると、フェイルオーバーして以降、常にタイムアウトするようになりました。

.
.
(中略)
.
.
big-ip-application1-02 | Response time: .459294000s
big-ip-application1-01 | Response time: .548505000s
 | Response time: 5.059013000s
 | Response time: 5.087040000s
 | Response time: 5.042120000s
 | Response time: 5.056636000s
.
.
(以下略)
.
.

これはVirtual ServerのDestination AddressでしたIPアドレスがmyuniqstr-bigip-vm-01であり、フェイルオーバー先のmyuniqstr-bigip-vm-02のIPアドレスの設定が存在していないためです。

Virtual Serverの追加してフェイルオーバー

myuniqstr-bigip-vm-02用のVirtual Serverを追加しましょう。

Virtual Serverはそれぞれに作成が必要なことは以下ドキュメントにも記載があります。

Creating virtual servers on the BIG-IP VE

In order to pass traffic from your clients to the servers through the BIG-IP system, you must create at least two virtual servers on the BIG-IP VE using Traffic Group None using the following guidance. For AWS Across AZ templates, Traffic Group None must be on virtual addresses because by doing so the IP address (node) will not be synced between systems. AWS availability zones use separate subnets, so the virtual address (node) from system A on subnet A can not be synced over to system B using subnet B.

f5-aws-cloudformation/supported/failover/across-net/via-api/3nic/existing-stack/bigiq/README.md at main · F5Networks/f5-aws-cloudformation

送信先(Delisitnation Address/Mask)にmyuniqstr-bigip-vm-02のVIP用のプライベートIPアドレスを指定し、HTTP通信するように設定します。他設定は先ほど作成したVirtual Serverと同じです。

40.application2.png

作成が完了すると、以下のようになります。

41.Virtual Server List.png

Virtual Address Listは以下のようにtraffice-group-1に2つあります。

42.Virtual Address List.png

CFE 1.9.0からはTraffic Groupをnoneにする必要はなくなったようなので、このままにします。

Why does the AWS failover diagram show that VIPs must be in traffic group ‘none’?¶

Beginning with CFE version 1.9.0., Virtual Addresses or services are no longer required to be in Traffic Group None and can be placed in Traffic Group 1.

Frequently Asked Questions (FAQ)

Failover Objectにも含まれています。

45.Failover Objects.png

この状態でフェイルオーバーの実施をします。

43.フェイルオーバーの実施.png

フェイルオーバーが完了しました。

44.Standbyになったことを確認.png

この状態のログは以下のとおりです。

big-ip-application1-01 | Response time: .433065000s
big-ip-application1-01 | Response time: .421041000s
big-ip-application1-02 | Response time: .434683000s
 | Response time: 5.073367000s
 | Response time: 5.035714000s
 | Response time: 5.054354000s
 | Response time: 5.052302000s
 | Response time: 5.062752000s
 | Response time: 5.048661000s
 | Response time: 5.059695000s
 | Response time: 5.075163000s
 | Response time: 5.054327000s
 | Response time: 5.045204000s
 | Response time: 5.056317000s
 | Response time: 5.028236000s
 | Response time: 5.047157000s
 | Response time: 5.034971000s
big-ip-application1-01 | Response time: .421672000s
big-ip-application1-02 | Response time: .410290000s
big-ip-application1-01 | Response time: .420178000s
big-ip-application1-02 | Response time: .444149000s

フェイルオーバーしてから70秒ほど時間がかかりましたが、正常にアクセスできるようになりました。

Virtual AddressのTraffice Groupをnoneにしてフェイルオーバー

再度アクセスできるようになるまでの時間が気になります。

Virtual AddressのTraffice Groupをnoneに変更すると短くなるとかはあるのでしょうか。

試しにTraffic Groupをnoneに変更します。

48.Traffic Groupをnoneに変更.png

フェイルオーバーを実施します。

50.フェイルオーバーの実施2.png

正常に完了しました。

51.フェイルオーバーの実施3.png

この時のログは以下のとおりです。

big-ip-application1-02 | Response time: .425742000s
big-ip-application1-01 | Response time: .429473000s
big-ip-application1-02 | Response time: 2.510334000s
big-ip-application1-01 | Response time: .458162000s
big-ip-application1-02 | Response time: .463644000s
big-ip-application1-02 | Response time: .451312000s
big-ip-application1-01 | Response time: .437285000s

フェイルオーバーしたタイミングで若干レスポンスまでの時間がかかりましたが、長時間のタイムアウトは発生していません。

たまたまなのか確認するために、Active側のBIG-IPのEC2インスタンスを停止します。

この時のログは以下のとおりです。

big-ip-application1-02 | Response time: .443596000s
big-ip-application1-01 | Response time: .427521000s
big-ip-application1-01 | Response time: .441297000s
big-ip-application1-02 | Response time: .413048000s
 | Response time: 5.075821000s
 | Response time: 5.044694000s
 | Response time: 5.117505000s
big-ip-application1-02 | Response time: .447297000s
big-ip-application1-01 | Response time: .431422000s
big-ip-application1-01 | Response time: .435992000s
big-ip-application1-02 | Response time: .479641000s
big-ip-application1-02 | Response time: .459194000s
big-ip-application1-01 | Response time: .413107000s
big-ip-application1-02 | Response time: .454627000s
big-ip-application1-01 | Response time: .433499000s
 | Response time: 5.060413000s
 | Response time: 5.054609000s
 | Response time: 5.059049000s
 | Response time: 5.062327000s
 | Response time: 5.040400000s
 | Response time: 5.051898000s
 | Response time: 5.026227000s
 | Response time: 5.037674000s
 | Response time: 5.045993000s
 | Response time: 5.043089000s
 | Response time: 5.061504000s
 | Response time: 5.054754000s
 | Response time: 5.057101000s
 | Response time: 5.053960000s
 | Response time: 5.059544000s
big-ip-application1-02 | Response time: .470164000s
big-ip-application1-01 | Response time: .445178000s
big-ip-application1-01 | Response time: .457716000s
big-ip-application1-02 | Response time: .476356000s

ちょっと不安定ですね。

もう一回試しましたが、同様にフェイルオーバー時の70秒ほどのダウンタイムが発生しました。

big-ip-application1-02 | Response time: .440192000s
big-ip-application1-01 | Response time: .447113000s
big-ip-application1-02 | Response time: .409286000s
big-ip-application1-01 | Response time: .432804000s
 | Response time: 5.085381000s
 | Response time: 5.041491000s
 | Response time: 5.045862000s
 | Response time: 5.048321000s
 | Response time: 5.040426000s
 | Response time: 5.078177000s
 | Response time: 5.042123000s
 | Response time: 5.047472000s
 | Response time: 5.065415000s
 | Response time: 5.064538000s
 | Response time: 5.060548000s
 | Response time: 5.047607000s
 | Response time: 5.051801000s
 | Response time: 5.073236000s
big-ip-application1-01 | Response time: .410263000s
big-ip-application1-01 | Response time: .400852000s
big-ip-application1-02 | Response time: .420805000s
big-ip-application1-01 | Response time: .477084000s

ALB/NLBで対応できない要件があるときに

BIG-IPのMulti-AZ HAクラスターをCloudFormationで作成してみました。

ALB/NLBで対応できない要件があるときに使えそうですね。

とはいえ、まずは要件の調整を努力しましょう。マネージドサービスと比較すると仮想アプライアンスはどうしても運用コストが膨らみがちです。

この記事が誰かの助けになれば幸いです。

以上、クラウド事業本部 コンサルティング部の のんピ(@non____97)でした!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.