BIG-IP HA構成の検証(VMware ESXi 6.5)

この記事は約52分で読めます。

PCにVMware ESXiをインストールし、BIG-IP VEをActive/Standbyで構築した。PCに必要なメモリはBIG-IP用に最低8GB(1台4GB×2台)、Webサーバに最低2GB(1台1GB×2台)、最低10GB必要となる。比較的ハイエンドなメモリ16GBのPCがあれば検証できる。環境の構築にあたり、以下のブログを参考にした。

【設定】vSphere Hypervisor(ESXi)on Player 【VMware】
・vSphere Hypervisoer(ESXi)が自宅で触れたら、仕事で役に立てるんだけどなぁ ・VMwareを設定できるようになってエンジニアとしての市場価値を上げたいなぁ ・仮想アプライアンス製品ってESXi上でしか動かないみたいだ

必要なソフトウェア

VMware ESXiはハイパーバイザー型の仮想化技術であるため、Windows 10の上には直接インストールできない。まず、Windows 10の上にVMware Workstation 16 Playerをインストールし、その上にESXi 6.5をインストールする。

ネットワーク構成

No. VMware Player IPサブネット VMware ESXi BIG-IP VE Webサーバ
ネットワークアダプタ 仮想スイッチ ポートグループ VLAN ID Interface VLAN Route Domain Interface
1 ブリッジ(自動) 192.168.1.0/24 vSwitch0 PG_VMkernel 0
2 ブリッジ(自動) 192.168.1.0/24 vSW_Mgmt PG_Mgmt 0 mgmt ens192
3 カスタム(VMnet1) 10.0.10.0/24 vSW_Front PG_Front 0 1.1(untagged) 10 10
4 LANセグメント(End) 10.0.20.0/24 vSW_End PG_End 0 1.2(untagged) 20 10 ens224
5 LANセグメント(HA) 172.16.10.0/24 vSW_HA PG_Mirroring 0 1.3(untagged) 4010
172.16.20.0/24 PG_Failover 0 1.4(untagged) 4020
172.16.30.0/24 PG_ConfigSync 0 1.5(untagged) 4030

VMware ESXi 6.5の設定(vSwitch)

ネットワーク構成に従い、vSwitch⇒Port Group⇒仮想マシンの順にESXiを設定する。

VMware Workstation Playerのネットワークアダプタ1(ブリッジ(自動))はESXi上ではVMkernel0(ESXi管理画面)に使用され、vSwitch0(デフォルトの仮想スイッチ)と接続している。vSwitch0を削除するとESXi管理画面に接続できなくなるので注意する。vSwitch0はVMkernel0用の専用スイッチとし、BIG-IPとWebサーバを管理するための仮想スイッチは別で作成する(vSW_Mgmtを作成する)。

VMware ESXi 6.5の設定(Port Group)

ネットワーク構成に従い、Port Groupを作成する。BIG-IPではポートベースVLANのみを使用するため、Port Groupで設定するVLAN IDは全て0(VLANタグを付与しない)に設定する。

Webサーバのインストール

負荷分散対象サーバのWebサーバとして、ESXiにAlmaLinux 9.0を2台インストールする。

https://mirrors.almalinux.org/isos.html

仮想マシン作成時にネットワークアダプタ1にPG_Mgmt、ネットワークアダプタ2にPG_Endを割り当てる。ALmaLinuxはGUIベースでウィザードに従ってインストールする。

PG_Mgmt(ens192)、PG_End(ens224)に付与するIPアドレスは以下の通り。

No. サーバ名 ホスト名 ens192(マネジメント用) ens224(業務用)
IPアドレス デフォルトゲートウェイ IPアドレス デフォルトゲートウェイ
1 Webサーバ#1 web01 192.168.1.201/24 10.0.20.1/24 10.0.20.254
2 Webサーバ#2 web02 192.168.1.202/24 10.0.20.2/24 10.0.20.254

Webサーバの設定

BIG-IPの負荷分散機能を検証するため、Webサーバに最低限の設定を施す。

##### httpdのIndexページの作成 #####
vim /var/www/html/index.html

##### Indexページの編集内容(1号機) #####
<html>
<div style="text-align:center"><font color="red" size="20">Web Server #1</font></div>
</html>

##### Indexページの編集内容(2号機) #####
<html>
<div style="text-align:center"><font color="blue" size="20">Web Server #2</font></div>
</html>

##### httpdをスタートアップに登録 #####
systemctl enable httpd

##### httpdを起動 #####
systemctl start httpd

AlmaLinuxインストール時に機能をモリモリにした場合はfirewalldが有効になっている可能性がある。firewalldはデフォルトでcockpit(OS管理)、dhcpv6、sshのみを許可している。firewalldが有効な場合はfirewall policyを追加するかfirewalldを停止する。

##### firewalldのスタートアップの削除 #####
systemctl disable firewalld

##### firewalldの停止 #####
systemctl stop firewalld

設定後はManagementネットワーク経由でクライアントからWebサーバ#1, #2にHTTPSで接続できることを確認する。

BIG-IPの設定(ライセンス入手)

BIG-IPはインストールしてもライセンスが無いと動作しないため、ライセンスを入手する。検証用途であれば、F5公式サイトからBIG-IP VEを30日間使用できるライセンスを発行してもらえる。ライセンス発行のリクエストを出してからEメールでライセンスを受領できるまでに約1時間かかる。

BIG-IP Virtual Edition

BIG-IPのインストール

Webサーバと同様の要領で、ESXiの仮想マシンの作成からBIG-IPをインストールする。今回はBIG-IP 14.1.4.4を使用する。F5公式サイトにログインし、14.1.4.4_Virtual-Editionをダウンロードする。

Page has moved

BIG-IPをインストールする前にESXiの仮想マシンのネットワークアダプタ1~6を以下の通り設定する。BIG-IPのインストールは仮想マシンを起動するのみで完了する。

No. ネットワークアダプタ ポートグループ
1 ネットワークアダプタ1 PG_Mgmt
2 ネットワークアダプタ2 PG_Front
3 ネットワークアダプタ3 PG_End
4 ネットワークアダプタ4 PG_ConfigSync
5 ネットワークアダプタ5 PG_Failover
6 ネットワークアダプタ6 PG_Mirroring

BIG-IPの設定(初期設定)

ESXi管理画面のコンソールからBIG-IPにログインし、BIG-IPの初期設定を行う。ユーザ名:root、パスワード:defaultでBIG-IPにログインする。

必要な初期設定内容は以下の通り。

##### Management PortのDHCPの無効化 #####
tmsh modify sys global-settings mgmt-dhcp disabled

##### Management PortのIPアドレスの確認 #####
tmsh list sys management-ip

##### BIG-IPにHTTPSで管理アクセスするためのadminアカウントのパスワードの設定 #####
tmsh modify auth user admin prompt-for-password

##### 設定保存 #####
tmsh save sys config

Cisco機器を設定変更した後にwrite memoryが必要になるように、BIG-IPのtmshで設定変更を実施した場合はセーブコマンド(tmsh save sys configコマンド)で設定を保存する必要がある。GUIで設定変更する場合は自動で設定保存されるため、セーブコマンドは不要。

上記実行後はBIG-IPの2号機側でも同様の設定を行う。

BIG-IPの設定(ライセンス登録)

初期設定完了後はESXiホストにてWebブラウザを起動し、tmsh list sys management-ipで確認したManagement PortのIPアドレスに対してHTTPS接続し、上記で設定したadminアカウントでGUIログインする。ログイン後、Setup UtilityのNextをクリックする。

License画面でActivateボタンをクリックする。

License画面に遷移後、Base Registration KeyにRegistration Keyを入力し、Activation MethodのManualをクリックし、Nextをクリックする。

Manual MethodにてCopy/Paste Textを選択し、Step 1 Dossierをコピーし、Step 2: Licensing Serverのリンクをクリックする。Licensing ServerはF5のライセンスサーバに接続するため、インターネット接続が必要になる。

F5のライセンスサーバでDossierをペーストし、Nextをクリックする。

Terms of this license(ライセンス条項)に同意し、Nextをクリックする。

License keyが表示されるため、License Keyを全て選択し、コピーする。Download licenseは不要。

BIG-IP管理画面に戻り、Step 3: LicenseにコピーしたLicense keyをペーストし、Nextをクリックする。

約1分後にBIG-IPのLicenseの反映が完了する。Continueをクリックする。

Setup UtilityのResource Provisioning画面に遷移する。Management(MGMT)がSmall、Local Traffic(LTM)がNominalであることを確認し、Nextをクリックする。

Local Traffic(LTM)のRequired Memoryはインストール時は1.9GB程度だが、BIG-IPの設定量に比例して重くなる。仮想マシン作成時にメモリ量は最低でも4GBは確保しておく。

Device Certificates画面はBIG-IP本体のHTTPS管理アクセスに使用する証明書を変更する場合のみ設定変更が必要となる。今回はデフォルトの自己署名型の証明書を使用するため、そのままNextをクリックする。

Platform画面に遷移後、Management PortのIPアドレス、Management Route、Host Name、Time Zoneを設定し、Nextをクリックする。

No. 機器名称 ホスト名 Management Port
IPアドレス デフォルトゲートウェイ
1 BIG-IP#1 LB1.local 192.168.1.250/24 192.168.1.1
2 BIG-IP#2 LB2.local 192.168.1.245/24 192.168.1.1

Management PortのIPアドレスを変更した場合は、NextをクリックしたタイミングでIP Reachabilityが失われるため、改めてWebブラウザでBIG-IPに接続し直す。

ここで最も重要なのがManagement PortのIPアドレスとなる。BIG-IPでActive/Standby構成を構築した際にActive機となる条件にはManagement IPアドレスの大小が関係する。Management IPアドレスが大きい方のBIG-IPがActive機に選定されるため、1号機のManagement IPアドレスは2号機のものよりも大きい値を設定する。

Management RouteはSyslog、NTP、SNMP等の管理系通信に使われるルーティングを意味する。Cisco機器のVRF Managementに相当する。Management IPアドレスと同セグ内に管理系サーバ(Syslog/NTP/SNMP等)が存在しない場合はManagement Routeの設定が必須となる。

対話形式でSetupを行うと効率が悪いため、Network画面でAdvanced Network Configuration欄のFinishedをクリックし、Setup Utilityから脱出する。

Setup Utilityをクリックすると、BIG-IPの運用担当者/保守担当者にはお馴染みの画面が表示される。この後、忘れずにBIG-IP#2の設定も行う。

BIG-IPのMAC Addressの確認

BIG-IPはデータ用ポート(1.1~1.x)とマネジメントポート(mgmt)が独立しているため、ESXi仮想マシンのネットワークアダプタ1~6(PG_xx)の設定がBIG-IPのInterface(1.1~1.5)と順番に紐づかない場合がある。この場合はBIG-IP GUIの[Network]⇒[Interfaces]からInterfaceのMAC Addressを確認し、ESXi仮想マシンのネットワークアダプタを設定変更する。

以下の例ではBIG-IP上でInterface1.2(End用ポート)のMAC Addressが00:0c:29:8d:83:04のため、ESXi側のPort Group: PG_Endに紐づくネットワークアダプタのMAC Addressがこれと同一の値になっていることが期待される。同一の値になっていなければ、ESXi側の仮想マシンの設定でネットワークアダプタとPort Groupの紐づけを修正する。

BIG-IPの設定(NTP設定/DNS設定)

BIG-IPでHAを構成するにはBIG-IP Peer同士のSystem Clockが一致している必要がある。NTP設定は[System]⇒[Configuration]⇒[Device]⇒[NTP]で行う。

NTPサーバのIPアドレスを入力し、Updateをクリックする。ここではntp.nic.jpを使用。

NTPサーバとしてIPアドレスではなく、ntp.nict.jp等のFQDNを指定した場合は、BIG-IPが名前解決できる必要がある。[System]⇒[Configuration]⇒[Device]⇒[DNS]を選択し、DNS Lookup Server Listに再起問い合わせ可能なDNSサーバを指定し、UpdateボタンをクリックすることでDNSの設定が行える。

BIG-IPにNTP設定/DNS設定を行った後は、BIG-IPにTera TermでSSH接続し、DNSリゾルバ及びNTPによる時刻同期が期待通りに動作することを確認しておく。BIG-IPにTera TermでSSH接続する際は、プレーンテキスト認証ではなく、キーボードインタラクティブ認証が必要になることに注意する。

##### DNSリゾルバ確認 #####
[root@LB1:Active:In Sync] config # ping ntp.nict.jp
PING ntp.nict.jp (61.205.120.130) 56(84) bytes of data.
64 bytes from ntp-k1.nict.jp (61.205.120.130): icmp_seq=1 ttl=44 time=12.8 ms
64 bytes from ntp-k1.nict.jp (61.205.120.130): icmp_seq=2 ttl=44 time=12.6 ms
^C
--- ntp.nict.jp ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 12.665/12.747/12.830/0.139 ms

##### NTP時刻同期確認 #####
[root@LB1:Active:In Sync] config # ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*ntp-b3.nict.go. .NICT.           1 u 1046 1024  377    6.831    0.254   3.907

上記設定変更後はBIG-IP#2にも同様の設定を行う。

BIG-IPの設定(管理画面のIdle Timeoutの修正)

BIG-IPの管理画面(HTTPSサーバ)は1,200秒間何も操作しないとBIG-IPから自動でログアウトしてしまう。Idle Timeoutを86,400秒(24時間)に延長し、無操作時間が長く続いてもBIG-IPからログアウトしないようにする。これにより、何度もログインし直さなくて済む。

設定変更方法は[System]⇒[Preferences]にて[Idle Time Before Automatic Logout]の値を変更し、Updateボタンをクリックする。

上記設定変更後はBIG-IP#2にも同様の設定を行う。

BIG-IPの設定(Network設定)

BIG-IPの設定変更はSystem⇒Netowrk⇒Device Management⇒System(High Availability)⇒Local Traffic(負荷分散設定)の順に行う。NetworkとLocal Trafficの設定はCLI(tmsh)で流し込みを行う方が品質・効率が良い。Floating IP(1号機と2号機で共用するIPアドレス)を除き、Self IPは1号機と2号機で異なるため、2号機の場合は読み替えて設定する。

##### Trunkの設定(Interface 1.1) #####
tmsh create net trunk TRUNK_FRONT interfaces add {1.1}

##### VLAN10の作成 #####
tmsh create net vlan VLAN_10 tag 10
tmsh modify net vlan VLAN_10 interfaces add {TRUNK_FRONT {untagged}}
tmsh modify net vlan VLAN_10 description TRUNK_FRONT

##### Route Domain 10の作成 #####
tmsh create net route-domain RD_10 {id 10 vlans add {VLAN_10}}
tmsh modify net route-domain RD_10 description Web_System

##### Self IPの作成(VLAN10) #####
tmsh create net self SELF_10.0.10.253 address 10.0.10.253%10/24 vlan VLAN_10 traffic-group traffic-group-local-only allow-service default description TRUNK_FRONT
tmsh create net self SELF_10.0.10.254 address 10.0.10.254%10/24 vlan VLAN_10 traffic-group traffic-group-1 allow-service default description TRUNK_FRONT

##### Trunkの設定(Interface 1.2) #####
tmsh create net trunk TRUNK_END interfaces add {1.2}

##### VLAN20の作成 #####
tmsh create net vlan VLAN_20 tag 20
tmsh modify net vlan VLAN_20 interfaces add {TRUNK_END {untagged}}
tmsh modify net vlan VLAN_20 description TRUNK_END

##### Route Domain 10にVLAN20を追加 #####
tmsh modify net route-domain RD_10 vlans add {VLAN_10 VLAN_20}

##### Self IPの作成(VLAN20) #####
tmsh create net self SELF_10.0.20.253 address 10.0.20.253%10/24 vlan VLAN_20 traffic-group traffic-group-local-only allow-service default description TRUNK_END
tmsh create net self SELF_10.0.20.254 address 10.0.20.254%10/24 vlan VLAN_20 traffic-group traffic-group-1 allow-service default description TRUNK_END

##### VLAN4010の作成 #####
tmsh create net vlan VLAN_4010 tag 4010
tmsh modify net vlan VLAN_4010 interfaces add {1.3 {untagged}}
tmsh modify net vlan VLAN_4010 description ConfigSync

##### VLAN4020の作成 #####
tmsh create net vlan VLAN_4020 tag 4020
tmsh modify net vlan VLAN_4020 interfaces add {1.4 {untagged}}
tmsh modify net vlan VLAN_4020 description Failover

##### VLAN4030の作成 #####
tmsh create net vlan VLAN_4030 tag 4030
tmsh modify net vlan VLAN_4030 interfaces add {1.5 {untagged}}
tmsh modify net vlan VLAN_4030 description Mirroring

##### Self IPの作成(VLAN4010,VLAN4020,VLAN4030) #####
tmsh create net self SELF_172.16.10.254 address 172.16.10.254/24 vlan VLAN_4010 traffic-group traffic-group-local-only allow-service default description ConfigSync
tmsh create net self SELF_172.16.20.254 address 172.16.20.254/24 vlan VLAN_4020 traffic-group traffic-group-local-only allow-service default description Failover
tmsh create net self SELF_172.16.30.254 address 172.16.30.254/24 vlan VLAN_4030 traffic-group traffic-group-local-only allow-service default description Mirroring

##### 設定保存 #####
tmsh save sys config

注意すべき点はSelf IPの設定となる。Self IPはCiscoのInterface Vlan(SVI)と同様の概念となるが、Self IPはInterface Vlanの設定に加え、Self IP自体へのアクセスに対してどのプロトコルを許可するかというPort Lockdownの概念がある。例えば、Port LockdownでTCP/443を許可していなければ、そのSelf IPに対してHTTPS接続はできない。デフォルトではPort Lockdownの設定はdefaultとなっている。defaultで許可しているプロトコルはtmsh list net self-allowコマンドで確認可能。

[root@LB1:Active:In Sync] config # tmsh list net self-allow
net self-allow {
    defaults {
        igmp:any
        ospf:any
        pim:any
        tcp:domain
        tcp:f5-iquery
        tcp:https
        tcp:snmp
        tcp:ssh
        udp:520
        udp:cap
        udp:domain
        udp:f5-iquery
        udp:snmp
    }
}

HAではBIG-IP Peer間でTCP/443(HTTPS)、TCP/4353(F5-iQuery)、UDP/1026(Network Failover)の通信を行う。上記画面のudp:capがUDP/1026に該当する。defaultで許可しているプロトコルは必要最小限となっているため、基本的にはDefaultの設定のままで問題ない。Self IPへのICMP(ping)は上記コマンドの出力結果には表示されないが、自動で許可されている。

設定変更が完了したら、忘れずにBIG-IP#2の設定変更も行う。

BIG-IPの設定(HA設定)

BIG-IPのネットワーク設定が完了したら、HA設定を行う。[Device Management]⇒[Devices]をクリックし、タブの[ConfigSync]をクリックする。

ConfigSyncのLocal Addressに自局側のConfigSync用のSelf IPアドレスをプルダウンメニューから選択し、Updateをクリックする。ConfigSyncはBIG-IP Active機とStandby機の設定を同期する際に使用する。

次にタブの[Failover Network]でAddボタンをクリックし、同様の処理を行う。Failover NetworkではIPアドレスを2つ指定できる。Failover Networkで指定したIPアドレスはBIG-IP Standby機がActive機が生存していることを確認する「ハートビート通信」に使用される。ハートビートはStandby機側が行い、3秒間Active機から応答が無ければ、Standby機はActive機に昇格する。Dual Activeシナリオ(Active機が正常な状態にも関わらず、Standby機がActive機に昇格することで両Activeとなってしまう事象)のリスクを低減するため、Failover NetworkはIPアドレスを2つ使用した方が良い。ここでは2つ目のIPアドレスとしてManagement PortのIPアドレスを指定する。

最後にタブのMirroringをクリックし、Mirror用のSelf IPアドレスを指定する。MirroringのIPアドレスはVirtual Server単位に設定するコネクションミラーリング機能(BIG-IP Active機⇒Standby機へのコネクションテーブル/セッションテーブルの同期)に使用される。コネクションミラーリングは負荷がかかる処理のため、デフォルトでは無効となっているが、BIG-IPでHAを構成するうえでは設定必須の項目のため、必ず設定する。

Mirroringの設定完了後は忘れずに2号機側の設定も行う。

次にDevice Trustの設定を行う。BIG-IPでHAを構成するには証明書を使用してBIG-IP同士を信頼する必要がある。BIG-IP Peer間でHTTPS通信を行い証明書を交換するため、Self IPのPort Lockdown設定でTCP/443が開いている必要がある。Device Trustの設定は[Device Management]⇒[Device Trsut]⇒[Device Trust Members]タブにてAddボタンをクリックすることで行う。

Device Trust設定ではDevice TypeでPeerを選択し、PeerのConfigSync用のIPアドレス、GUIログインID(admin)、及びそのパスワードを入力する。入力後、Peerの証明書の情報が表示される。Add Deviceをクリックすることで、PeerとHAが構成される。

Device Trustの設定完了後、GUIの左上の表示がONLINE(Active) StandaloneからONLINE(ACTIVE) In Syncに遷移したことが確認できる。

2号機でも同様にDevice Trust設定を行う。2号機側の設定完了後、2号機もONLINE(ACTIVE) In Syncの状態となるが、この時点ではDevice Groupの設定が完了していないため、両Activeとなっていても問題は無い。

次にDevice Groupの設定を行う。Device GroupではHAを構成したBIG-IP間で設定情報の同期のみを行うか(Sync-Only)、それに併せてFailoverも有効するか(Sync-Failover)の設定を行う。普通に考えてSync-Failover以外の選択肢は無い。

Device Groupの設定は[Device Management]⇒[Device Groups]で行う。ここから先はHAを構成できているため、Active機のBIG-IPのみ設定変更を実施する。この時点では両Activeの状態のため、2号機で設定変更しても問題はないと思われる。

Data Groupの設定では、Group Typeの設定をSync-Failover、Sync TypeをManual with Full Syncにするのが肝となる。Group TypeはSync-Failover一択として、Sync TypeはAutomatic with Full Syncも候補に入るが、現場でManual with Full Sync以外の設定を見たことが無い。ManualとAutomaticの違いは後日検証予定。

忘れてはならないのがNetwork FailoverをEnabledにする点。デフォルトでEnabledに設定されているものの、これを怠るとNetwork Failover発動時(StandbyがActive機からUDP/1026のハートビート通信を3秒間受信できなかった場合)にFailoverが発動しない。

Device Groupを作成後、BIG-IP 1号機がONLINE(ACTIVE) In SyncからONLINE(ACTIVE) Awaiting Initial Syncに遷移する。

2号機側も同様にONLINE(ACTIVE) In SyncからONLINE(STANDBY) Awaiting Initial Syncに遷移する。

両方のBIG-IPがAwaiting Initial Syncを主張している通り、最後にInitial Syncを実行する。BIG-IP 1号機(Active機)で[Device Management]⇒[Overview]⇒[Device Group名]を選択し、[Sync Options]からPush the selected device configuration to the groupを選択し、Syncボタンをクリックする。

数秒後にDevice Group名がIn Syncのステータスとなり、All devices are in sync. There are no changes pending.が表示されていれば無事にHAが構成できたことになる。

BIG-IP 2号機側はONLINE(STANDBY) In Syncの状態であれば正常。

BIG-IPの設定(HA Group)

BIG-IPでFailoverを発動させるイベントを定義するため、HA Group(Fast Failoverとも呼ばれる)を設定する。FirewallのFailoverと同様にBIG-IPのダウンリンク・アップリンクをMonitor Interface(監視対象ポート)として定義し、Monitor InterfaceがDownした際にFailoverが発動するにようにHA Groupを設定する。

HA-Groupの設定は[System]⇒[High Availability]⇒[HA Group List]で行う。

HA GroupでFailoverの発動に係わるインタフェースを指定する際、Trunk Interfaceを指定する必要がある。TrunkはCisco機器のswitchport mode trunkのことではなく、channel-group(Port-Channel)のことであることに注意する。

アップリンク(TRUNK_FRONT)がUpしている場合に20点、ダウンリンク(TRUNK_END)がUpしている場合に20点を設定し、HA StatusがActiveの状態のBIG-IPに10点のActive Bonusを付与する設定を行う。通常運用時はActive機は50点、Standby機はActive Bonus 10点を引いた40点となる。

HA Groupの設定はConfigSync対象外のため、Standby機にも上記と同様の設定を行う。

BIG-IPの設定(Traffic Group)

HA Groupで定義したFailoverイベントが発生した際に、Traffic Groupで定義したオブジェクトがFailoverするようにTraffic Groupの設定を行う。

Floating IPアドレスとVirtual ServerのIPアドレスをtraffic-group-1に所属させ、Failover発動時にこれらのIPアドレスが元Standby機(新Active機)に引き継がれるようにする。

Traffic Groupの設定は[Device Management]⇒[Traffic Groups]から行う。traffic-group-1はデフォルトで定義されているため、新規にCreateする必要はない。

traffic-group-1に先程設定したHA Groupを紐づけ、Failover MethodとしてFailover to Device With Best HA Scoreを指定する。これにより、BIG-IPでFailoverイベントが発生した際にHA Scoreが最も大きいBIG-IPにFailoverする。HA Load Factorは他のTraffic Groupが存在する場合のLoad Factor(負荷係数)となっているが、ここでは単一のTraffic Groupのみを使用するため、1を入力し、Saveする。

Traffic Groupの設定はHA Groupと同様にConfigSync対象外のため、Standby機でも同様の設定を行う。

BIG-IPの障害試験

BIG-IPで障害が発生した際に期待通りにFailoverが発動することを確認するため、BIG-IPの障害試験を行う。物理環境ではNW機器のポートからケーブルを抜線するのが常套手段となるが、仮想環境の場合はソフトウェア的にポートをshutdownするしか方法が無い。

障害試験として、BIG-IP#1にてWebサーバ接続用のポートであるInterface 1.2(TRUNK_END)を意図的にDisableにし、Failoverが発動することを確認する。

Interface 1.2をDisableにした後、LTMログにおいて1秒以内に1号機がONLINE(ACTIVE)からONLINE(STANDBY)に遷移し、2号機がONLINE(STANDBY)からONLINE(ACTIVE)に遷移したことを確認した。視覚的には体感3秒以内でGUIのアイコンの色が変わったことが確認できた。

1号機の/var/log/ltm

Dec  4 16:51:02 LB1.local warning mcpd[4353]: 01071859:4: Warning generated : cannot set MTU for eth2. No such device. For legacy VE driver
Dec  4 16:51:02 LB1.local info lacpd[4994]: 01160016:6: Interface 1.2, link admin status: disabled, link status: up, duplex mode: full, lacp operation state: down
Dec  4 16:51:02 LB1.local info lacpd[4994]: 01160010:6: Link 1.2 removed from aggregation
Dec  4 16:51:02 LB1.local notice mcpd[4353]: 01bb0003:5: Trunk: TRUNK_END is DOWN
Dec  4 16:51:02 LB1.local notice mcpd[4353]: 010719fb:5: HA Group HG_LB1_LB2 score updated from 40 to 0.
Dec  4 16:51:02 LB1.local warning mcpd[4353]: 01071859:4: Warning generated : cannot set MTU for eth2. No such device. For legacy VE driver
Dec  4 16:51:02 LB1.local warning mcpd[4353]: 01071859:4: Warning generated : cannot set MTU for eth2. No such device. For legacy VE driver
Dec  4 16:51:02 LB1.local warning mcpd[4353]: 01071859:4: Warning generated : cannot set MTU for eth2. No such device. For legacy VE driver
Dec  4 16:51:02 LB1.local notice sod[4659]: 010c0045:5: Leaving active, group score 0 peer group score 40.
Dec  4 16:51:02 LB1.local notice sod[4659]: 010c0052:5: Standby for traffic group traffic-group-1.
Dec  4 16:51:02 LB1.local notice sod[4659]: 010c0018:5: Standby
Dec  4 16:51:02 LB1.local info sod[4659]: 010c0096:6: Next active for traffic group traffic-group-1.
Dec  4 16:51:02 LB1.local notice tmm[10063]: 01340011:5: HA unit 1 state change: from 1 to 0.
Dec  4 16:51:02 LB1.local notice tmm1[10063]: 01340011:5: HA unit 1 state change: from 1 to 0.
Dec  4 16:51:03 LB1.local warning mcpd[4353]: 01071859:4: Warning generated : cannot set MTU for eth2. No such device. For legacy VE driver
Dec  4 16:51:03 LB1.local warning mcpd[4353]: 01071859:4: Per-invocation log rate exceeded; throttling.
Dec  4 16:51:20 LB1.local notice mcpd[4353]: 01070640:5: Node /Common/NODE_WEB_02 address 10.0.20.2%10 monitor status down. [ /Common/MONITOR_LAYER3_CHECK: down ]  [ was up for 3hrs:19mins:16sec ]
Dec  4 16:51:20 LB1.local notice mcpd[4353]: 01070638:5: Pool /Common/POOL_WEB_01 member /Common/NODE_WEB_02:80 monitor status down. [ /Common/MONITOR_LAYER7_CHECK: down; last error: /Common/MONITOR_LAYER7_CHECK:  Response Code: 200 (OK) @2022/12/04 16:51:20.  ]  [ was up for 3hrs:19mins:16sec ]
Dec  4 16:51:22 LB1.local notice mcpd[4353]: 01070640:5: Node /Common/NODE_WEB_01 address 10.0.20.1%10 monitor status down. [ /Common/MONITOR_LAYER3_CHECK: down ]  [ was up for 3hrs:19mins:16sec ]
Dec  4 16:51:22 LB1.local notice mcpd[4353]: 01070638:5: Pool /Common/POOL_WEB_01 member /Common/NODE_WEB_01:80 monitor status down. [ /Common/MONITOR_LAYER7_CHECK: down; last error: /Common/MONITOR_LAYER7_CHECK:  Response Code: 200 (OK) @2022/12/04 16:51:22.  ]  [ was up for 3hrs:19mins:16sec ]
Dec  4 16:51:22 LB1.local notice mcpd[4353]: 01071682:5: SNMP_TRAP: Virtual /Common/VS_WEB_01 has become unavailable
Dec  4 16:51:22 LB1.local notice mcpd[4353]: 010719e7:5: Virtual Address /Common/10.0.10.100%10 general status changed from GREEN to RED.
Dec  4 16:51:22 LB1.local notice mcpd[4353]: 010719e8:5: Virtual Address /Common/10.0.10.100%10 monitor status changed from UP to DOWN.
Dec  4 16:51:22 LB1.local err tmm1[10063]: 01010028:3: No members available for pool /Common/POOL_WEB_01
Dec  4 16:51:22 LB1.local err tmm[10063]: 01010028:3: No members available for pool /Common/POOL_WEB_01

2号機の/var/log/ltm

Dec  4 16:51:02 LB2.local notice sod[4693]: 010c006d:5: Leaving Standby for Active (best ha score).
Dec  4 16:51:02 LB2.local notice sod[4693]: 010c0053:5: Active for traffic group traffic-group-1.
Dec  4 16:51:02 LB2.local notice sod[4693]: 010c0019:5: Active
Dec  4 16:51:02 LB2.local notice tmm[10093]: 01340011:5: HA unit 1 state change: from 0 to 1.
Dec  4 16:51:02 LB2.local notice tmm1[10093]: 01340011:5: HA unit 1 state change: from 0 to 1.

tmsh show sys ha-group detailコマンドでHA Groupの状態を確認すると、1号機のScoreが0、2号機のScoreが40(実際にはActive Bonus 10が追加されるので合計50)になっていることが確認できる。1号機はTRUNK_FRONT側は正常なため、Scoreが20あるはずなのだが、0となっている。これがBugなのか仕様なのかはわからない。

BIG-IP 1号機のInterface 1.2をEnableに戻すと、自動でFailbackが行われないことが確認できた。これはTraffic GroupのFailover Methodとして指定したFailover to Device With Best HA Scoreの意味する通りであり、1号機のScoreが40に対して2号機のScoreが50あるため、Failbackが発動しない。

1号機の/var/log/ltm

Dec 4 17:06:17 LB1.local warning mcpd[4353]: 01071859:4: Resuming log processing at this invocation; held 1 messages.
Dec 4 17:06:17 LB1.local warning mcpd[4353]: 01071859:4: Warning generated : cannot set MTU for eth2. No such device. For legacy VE driver
Dec 4 17:06:17 LB1.local warning mcpd[4353]: 01071859:4: Warning generated : cannot set MTU for eth2. No such device. For legacy VE driver
Dec 4 17:06:17 LB1.local info lacpd[4994]: 01160009:6: Link 1.2 added to aggregation
Dec 4 17:06:17 LB1.local notice mcpd[4353]: 01bb0003:5: Trunk: TRUNK_END is UP
Dec 4 17:06:17 LB1.local notice mcpd[4353]: 010719fb:5: HA Group HG_LB1_LB2 score updated from 0 to 40.
Dec 4 17:06:18 LB1.local notice mcpd[4353]: 01070638:5: Pool /Common/POOL_WEB_01 member /Common/NODE_WEB_02:80 monitor status node down. [ /Common/MONITOR_LAYER7_CHECK: up ] [ was down for 0hr:14mins:58sec ]
Dec 4 17:06:19 LB1.local warning mcpd[4353]: 01071859:4: Warning generated : cannot set MTU for eth2. No such device. For legacy VE driver
Dec 4 17:06:20 LB1.local notice mcpd[4353]: 01070728:5: Node /Common/NODE_WEB_01 address 10.0.20.1%10 monitor status up. [ /Common/MONITOR_LAYER3_CHECK: up ] [ was down for 0hr:14mins:58sec ]
Dec 4 17:06:22 LB1.local notice mcpd[4353]: 01070727:5: Pool /Common/POOL_WEB_01 member /Common/NODE_WEB_01:80 monitor status up. [ /Common/MONITOR_LAYER7_CHECK: up ] [ was down for 0hr:15mins:0sec ]
Dec 4 17:06:22 LB1.local notice mcpd[4353]: 01071681:5: SNMP_TRAP: Virtual /Common/VS_WEB_01 has become available
Dec 4 17:06:22 LB1.local notice mcpd[4353]: 010719e7:5: Virtual Address /Common/10.0.10.100%10 general status changed from RED to GREEN.
Dec 4 17:06:22 LB1.local notice mcpd[4353]: 010719e8:5: Virtual Address /Common/10.0.10.100%10 monitor status changed from DOWN to UP.
Dec 4 17:06:22 LB1.local notice tmm[10063]: 01010221:5: Pool /Common/POOL_WEB_01 now has available members
Dec 4 17:06:22 LB1.local notice tmm1[10063]: 01010221:5: Pool /Common/POOL_WEB_01 now has available members
Dec 4 17:06:24 LB1.local notice mcpd[4353]: 01070728:5: Node /Common/NODE_WEB_02 address 10.0.20.2%10 monitor status up. [ /Common/MONITOR_LAYER3_CHECK: up ] [ was down for 0hr:15mins:4sec ]
Dec 4 17:06:24 LB1.local notice mcpd[4353]: 01070727:5: Pool /Common/POOL_WEB_01 member /Common/NODE_WEB_02:80 monitor status up. [ /Common/MONITOR_LAYER7_CHECK: up ] [ was node down for 0hr:0min:6sec ]

2号機の/var/log/ltmには何も出力されなかった。

tmsh show sys ha-group detailコマンドでHA Groupの状態を確認すると、1号機、2号機共に元の状態に戻っていたことが確認できた。

Active/Standby状態を元の状態に戻すには、新Active機(2号機)において、[Device Management]⇒[Devices]にてForce to Standbyをクリックする。tmshの場合はtmsh run sys failover standbyコマンドを実行する。LTMログ上では1秒以内でFailbackが完了したことが確認できた。

1号機の/var/log/ltm

Dec  4 17:32:51 LB1.local notice sod[4659]: 010c006d:5: Leaving Standby for Active (best ha score).
Dec  4 17:32:51 LB1.local notice sod[4659]: 010c0053:5: Active for traffic group traffic-group-1.
Dec  4 17:32:51 LB1.local notice sod[4659]: 010c0019:5: Active
Dec  4 17:32:51 LB1.local notice tmm1[10063]: 01340011:5: HA unit 1 state change: from 0 to 1.
Dec  4 17:32:51 LB1.local notice tmm[10063]: 01340011:5: HA unit 1 state change: from 0 to 1.

2号機の/var/log/ltm

Dec 4 17:32:51 LB2.local notice sod[4693]: 010c0044:5: Command: go standby GUI.
Dec 4 17:32:51 LB2.local notice sod[4693]: 010c0052:5: Standby for traffic group traffic-group-1.
Dec 4 17:32:51 LB2.local notice sod[4693]: 010c0018:5: Standby
Dec 4 17:32:51 LB2.local notice tmm[10093]: 01340011:5: HA unit 1 state change: from 1 to 0.
Dec 4 17:32:51 LB2.local notice tmm1[10093]: 01340011:5: HA unit 1 state change: from 1 to 0.
Dec 4 17:32:51 LB2.local info sod[4693]: 010c0096:6: Next active for traffic group traffic-group-1.

BIG-IPの設定(負荷分散設定)

最後にBIG-IPのコア機能である負荷分散設定を行う。品質・効率を上げるため、tmshで設定する。ConfigSyncで同期される内容のため、設定は1号機で行う。

##### SSL証明書の作成 #####
tmsh create sys crypto key CERT_VS_WEB_01 key-size 2048 gen-certificate city 'San Jose' common-name testcompany.com country US email-address mail@testcompany.com organization 'Test Company' ou 'Network Division' state California subject-alternative-name 'DNS:testconmapy.com, IP:10.0.10.100' lifetime 3650

##### Health Monitorの作成(Node用) #####
tmsh create ltm monitor icmp MONITOR_ICMP_POOL_WEB_01 { defaults-from icmp }
tmsh modify ltm default-node-monitor { rule MONITOR_ICMP_POOL_WEB_01 }

##### Health Monitorの作成(Pool用) #####
tmsh create ltm monitor http MONITOR_HTTP_POOL_WEB_01 { defaults-from http }
tmsh modify ltm monitor http MONITOR_HTTP_POOL_WEB_01 { send "GET /index.html HTTP/1.1\r\nHost: Server\r\nConnection: Close\r\n\r\n" recv "200 OK" }

##### Nodeの作成 #####
tmsh create ltm node NODE_WEB_01A { address 10.0.20.1%10 description web01 }
tmsh create ltm node NODE_WEB_01B { address 10.0.20.2%10 description web02 }

##### Poolの作成 #####
tmsh create ltm pool POOL_WEB_01 { load-balancing-mode least-connections-member monitor MONITOR_HTTP_POOL_WEB_01 }
tmsh modify ltm pool POOL_WEB_01 members add { NODE_WEB_01A:80 { address 10.0.20.1%10 } NODE_WEB_01B:http { address 10.0.20.2%10 } }

##### TCP Profileの作成 #####
tmsh create ltm profile tcp PROFILE_TCP_VS_WEB_01 { defaults-from tcp }
tmsh modify ltm profile tcp PROFILE_TCP_VS_WEB_01 { fast-open disabled idle-timeout 7200 }

##### HTTP Profileの作成 #####
tmsh create ltm profile http PROFILE_HTTP_VS_WEB_01 { defaults-from http }
tmsh modify ltm profile http PROFILE_HTTP_VS_WEB_01 { insert-xforwarded-for enabled }

##### Client SSL Profileの作成 #####
tmsh create ltm profile client-ssl PROFILE_CLIENTSSL_VS_WEB_01 cert-key-chain add { CERT_VS_WEB_01 { cert CERT_VS_WEB_01 chain CERT_VS_WEB_01 key CERT_VS_WEB_01 } }
tmsh modify ltm profile client-ssl PROFILE_CLIENTSSL_VS_WEB_01 { defaults-from clientssl ciphers TLSV1_2 }

##### SNATの作成 #####
tmsh create ltm snat SNAT_VS_WEB_01 { auto-lasthop disabled origins add { 0.0.0.0/0 { } } source-port change translation /Common/10.0.10.100%10 vlans add { VLAN_10 } vlans-enabled }

##### SNAT Poolの作成 #####
tmsh create ltm snatpool SNATPOOL_VS_WEB_01 { members add { 10.0.10.100%10 } }

##### Virtual Serverの作成 #####
tmsh create ltm virtual VS_WEB_01 { auto-lasthop disabled destination 10.0.10.100%10:https ip-protocol tcp mask 255.255.255.255 pool POOL_WEB_01 profiles add { PROFILE_HTTP_VS_WEB_01 { } PROFILE_CLIENTSSL_VS_WEB_01 { context clientside } PROFILE_TCP_VS_WEB_01 { } } vlans-enabled vlans add { VLAN_10 } snatpool SNATPOOL_VS_WEB_01 }

##### 設定保存 #####
tmsh save sys config

##### ConfigSync #####
tmsh run cm config-sync to-group DG_LB1_LB2

負荷分散動作確認

クライアントからVirtual Server宛にHTTPS通信を行い、Virtual Serverが期待通りに動作するか確認する。主な確認観点は以下3点となる。

  • Webサーバの画面が表示されること
  • BIG-IP#1でtmsh show ltm nodeコマンドを実行し、Least Connectionに基づき負荷分散が行われていること
  • BIG-IP#1でtmsh show sys connectionコマンドを実行し、クライアントサイド、サーバサイドのコネクション情報を確認し、SNAT設定(クライアントIPをVirtual ServerのIPアドレスにNAT)が期待通りにかかっていること
[root@LB1:Active:In Sync] config # tmsh show ltm node

------------------------------------------
Ltm::Node: NODE_WEB_01A (10.0.20.1%10)
------------------------------------------
Status
  Availability   : available
  State          : enabled
  Reason         : Node address is available
  Monitor        : /Common/MONITOR_ICMP_POOL_WEB_01 (default node monitor)
  Monitor Status : up
  Session Status : enabled

Traffic                ServerSide  General
  Bits In                   49.9K        -
  Bits Out                  45.9K        -
  Packets In                   37        -
  Packets Out                  32        -
  Current Connections           0        -
  Maximum Connections           2        -
  Total Connections             5        -   <-- Least Connectionに基づいて負荷分散
  Total Requests                -       10
  Current Sessions              -        0

------------------------------------------
Ltm::Node: NODE_WEB_01B (10.0.20.2%10)
------------------------------------------
Status
  Availability   : available
  State          : enabled
  Reason         : Node address is available
  Monitor        : /Common/MONITOR_ICMP_POOL_WEB_01 (default node monitor)
  Monitor Status : up
  Session Status : enabled

Traffic                ServerSide  General
  Bits In                   45.3K        -
  Bits Out                  36.8K        -
  Packets In                   30        -
  Packets Out                  26        -
  Current Connections           0        -
  Maximum Connections           2        -
  Total Connections             4        -   <-- Least Connectionに基づいて負荷分散
  Total Requests                -        8
  Current Sessions              -        0

[root@LB1:Active:In Sync] config #
[root@LB1:Active:In Sync] config # tmsh show sys connection
Really display 1000 connections? (y/n) y
Sys::Connections
10.0.20.253%10:12959 10.0.20.1%10:8 10.0.20.253%10:23850 10.0.20.1%10:8 icmp 10 (tmm: 1) none none
10.0.10.1%10:52040 10.0.10.100%10:443 10.0.10.100%10:23854 10.0.20.1%10:80 tcp 5 (tmm: 1) none none
10.0.20.253%10:12961 10.0.20.1%10:8 10.0.20.253%10:12961 10.0.20.1%10:8 icmp 5 (tmm: 1) none none
10.0.20.253%10:12963 10.0.20.1%10:8 10.0.20.253%10:12963 10.0.20.1%10:8 icmp 1 (tmm: 1) none none
10.0.20.253%10:12962 10.0.20.2%10:8 10.0.20.253%10:57119 10.0.20.2%10:8 icmp 3 (tmm: 0) none none
172.16.20.253:15110 172.16.20.254:1026 172.16.20.253:15110 172.16.20.254:1026 udp 0 (tmm: 0) none none
10.0.20.253%10:12960 10.0.20.2%10:8 10.0.20.253%10:57117 10.0.20.2%10:8 icmp 8 (tmm: 0) none none
172.16.20.254:43720 172.16.20.253:1026 172.16.20.254:43720 172.16.20.253:1026 udp 0 (tmm: 0) none none
Total records returned: 8

以上

コメント

タイトルとURLをコピーしました