BIG-IPでActive/Active構成を実装する方法を説明します。このActive/Activeは言葉のあや(限りなく詐欺に近い)セールストークで、実態はtraffic-groupを2つ作成し、それぞれ別の機器をActiveに振り分ける事で実現します。お客様がActive/Activeという言葉に過度の期待を抱かれると、落とし所を見るけるのが非常に大変な設計ポイントのひとつです。
動作確認の構成
構成図
以下の構成で動作確認をします。pipは「physical ip(物理IPアドレス)」、fipは「floating ip」の略称です。
+----------------+                    +----------------+
| (RockyLinux84) |                    | (RockyLinux84) |
|    Client50    |                    |    Client51    |
|                |                    |                |
+-------+--------+                    +-------+--------+
 ens192 | .50       (vlan50 tagged)    ens192 | .51
        |           192.168.50.0/24           |
        +-------------------------------------+
        |                                     |
        | fip:.220                            | fip:.220(active)
        | fip:.200(active)                    | fip:.200
    1.2 | pip:.101 (vlan100 untagged)     1.2 | pip:.102
+-------+--------+  192.168.100.0/24  +-------+--------+
|                | .1              .2 |                |
|     BIG-IP     +--------------------+     BIG-IP     |
|    (bigip01)   | .1.3          .1.3 |    (bigip02)   |
+-------+--------+                    +-------+--------+
    1.1 | pip:.101                        1.1 | pip:.101
        | fip:.200 (active)                   | fip:.200
        | fip:.220                            | fip:.220(active)
        |           (vlan10 tagged)           | 
        |           192.168.10.0/24           |
        +-------------------------------------+
        |                                     |
 ens192 | .10                          ens192 | .11
+-------+--------+                    +-------+--------+
|                |                    |                |
|    Server10    |                    |    Server11    |
| (RockyLinux84) |                    | (RockyLinux84) |
+----------------+                    +----------------+
初期設定
「BIG-IP FIP(floating IP)の設定 (いまここ)」が完了した状態を初期設定とします。
既に1つのtraffic-groupに対して2個のFIPが付与されています。この状態から、traffic-groupを1つ追加して計2個にして、さらに新たに追加されたtraffic-groupに対して2個のFIPを追加し合計4個のFIPが存在する状態にします。
動作確認 (1) traffic-gropuとfloating IP
2つ目のtraffic-groupの作成
「Device Management」「Traffic Group」の順に画面遷移し、「Create」を押下します。

「Name」欄に何か分かりやすいトラフィックグループ名を入力し、「Create Traffic Group」を押下します。
「Name」以外のパラメタは高可用性に関するチューニングです。詳しくは「BIG-IP Active Standby構成のチューニング」を参照ください。

コマンドラインで操作する場合は以下の通りです。
create cm traffic-group <トラフィックグループ名>
トラフィックグループの設定はActive/Standby間で同期されます。もし、自動同期しない設定にしている場合は手動で同期してください。

コマンドラインで操作する場合は以下の通りです。
run cm config-sync to-group <デバイスグループ名>
Active/Active設定
今現在の状態では、trafiic-group-1とtrafiic-group-2の両方がbigip01をActiveとしています。trafiic-group-1とtrafiic-group-2が別々の機器をActiveとするように設定します。
「Device Management」「Traffic Group」の順に画面遷移し、「trafiic-group-2」を押下します。

「Force to Standby」を押下します。その後、確認メッセージが表示されるので、もう一度「Force to Standby」を押下します。

コマンドラインで操作する場合は以下の通りです。
run sys failover standby traffic-group traffic-group-2
traffic-group-1とtraffic-group-2が、それぞれ異なる機器をActiveとしているのを確認します。

コマンドラインで操作する場合は以下の通りです。
root@(bigip01)(cfg-sync In Sync)(Active)(/Common)(tmos)# show cm traffic-group
--------------------------------------------------------------------------------
CentMgmt::Traffic-Group 
Name                      Device              Status   Next    Previous  Active
                                                       Active  Active    Reason
--------------------------------------------------------------------------------
traffic-group-1           bigip01.gokatei.go  active   false   false     peer-offline
traffic-group-1           bigip02.gokatei.go  standby  true    false     -
traffic-group-2           bigip01.gokatei.go  standby  true    true      -
traffic-group-2           bigip02.gokatei.go  active   false   false     peer-forced-standby
traffic-group-local-only  -                   -        -       -         -
root@(bigip01)(cfg-sync In Sync)(Active)(/Common)(tmos)# 
FIPの作成
「Network」「Self IPs」の順に画面遷移し、「Create」を押下します。

「Name」「IP Adress」「Netmask」「VLAN / Tunnel」を入力します。
「Traffic Group」は、先ほど新規作成した「traffic-group-2」を指定します。
以上の入力が完了したら「Finished」を押下します。この操作を繰り返し、構成図に記載されたFIP 2つを作成します。

コマンドラインで操作する場合は以下の通りです。
create net self SelfIP_FIP2_VLAN0010 address 192.168.10.220/24 vlan VLAN0010 allow-service all traffic-group traffic-group-2 create net self SelfIP_FIP2_VLAN0050 address 192.168.50.220/24 vlan VLAN0050 allow-service all traffic-group traffic-group-2
動作確認 (2) virtual serverの併用 – 誤設定例の紹介
Active/Active構成を採用する場合は、サーバからの戻りパケットに配慮した設定が必要です。以下、動作原理を理解するために、Source NATの設定を漏らした場合の挙動を紹介します。
virtual serverの設定
新たに作成したFIP(floating IP)をDestinationとするvirtual serverの設定を作成します。以下の設定をload sys config from-terminal mergeなどのコマンドを使用して流し込みます。
ltm virtual VS_02 {
    destination 192.168.50.220:any
    mask 255.255.255.255
    pool pool01
}
この設定は「BIG-IP FIP(floating IP)の設定」で作成したものと比較すると、destination以外のパラメタで差分はありませんが、設定投入時に以下のような警告メッセージが出力されます。
[bigip01:BIG-IP 16.1.0]
root@(bigip01)(cfg-sync Changes Pending)(Active)(/Common)(tmos)# load sys config from-terminal merge 
Enter configuration. Press CTRL-D to submit or CTRL-C to cancel.
ltm virtual VS_02 {
    destination 192.168.50.220:any
    mask 255.255.255.255
    pool pool01
}
Loading configuration...
There were warnings:
Virtual address (/Common/192.168.50.220) shares address with floating self IP (/Common/SelfIP_FIP2_VLAN0050), so traffic-group is being kept at (/Common/traffic-group-2).
root@(bigip01)(cfg-sync Changes Pending)(Active)(/Common)(tmos)# 
疎通確認
clientからserverへの疎通確認を試みます。HTTPによる疎通が成功しません。
[client50:RockyLinux8.4] [root@client50 ~]# wget -O /dev/null http://192.168.50.220/CentOS-7-x86_64-Minimal-1708.iso --2021-09-04 17:21:01-- http://192.168.50.220/CentOS-7-x86_64-Minimal-1708.iso Connecting to 192.168.50.220:80... failed: Connection refused. [root@client50 ~]#
疎通不能となるのはクライアントとサーバ間の通信について、往路と復路で経路が異なるためです。往路はtraffic-group-2がActiveであるbigip02経由になりますが、サーバのデフォルトゲートウェイはtraffic-group-1を向いているため、往復で異なる経路になります。

動作確認 (3) virtual serverの併用 – Source NAT配慮済
virtual serverの設定
往復で同じ通信経路になるようにBIG-IPを経由する時にSource NATします。つまり以下のような通信経路を実現します。

Source NATを設定するにはvirtual serverの設定画面で、「Source Address Translation」を「Auto Map」にします。この設定によって、FIPでSource NATされるようになります。

この設定をload sys config from-terminal mergeで流し込む場合は以下の通りです。
ltm virtual VS_01 {
    destination 192.168.50.200:any
    mask 255.255.255.255
    pool pool01
    source-address-translation {
        type automap
    }
}
ltm virtual VS_02 {
    destination 192.168.50.220:any
    mask 255.255.255.255
    pool pool01
    source-address-translation {
        type automap
    }
}
疎通確認
clientからserverへの疎通確認を試み、成功する事を確認します。
[client50:RockyLinux8.4] [root@client50 ~]# wget -O /dev/null http://192.168.50.220/CentOS-7-x86_64-Minimal-1708.iso --2021-09-04 17:22:11-- http://192.168.50.220/CentOS-7-x86_64-Minimal-1708.iso Connecting to 192.168.50.220:80... connected. HTTP request sent, awaiting response... 200 OK Length: 830472192 (792M) [application/octet-stream] Saving to: ‘/dev/null’ /dev/null 0%[ ] 529.97K 115KB/s eta 1h 56m ^C [root@client50 ~]#
  
  
  
  