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 ~]#