BIG-IPでfloating IPを設定する方法をまとめます。floating IPはBIG-IPのActive機側に付与されるIPアドレスで障害発生時は旧Standby機側にIPアドレスが引き継がれます。floating IP向けに通信を発生させる事によって、障害が発生してもサービスを継続する事ができます。
動作確認の構成
構成図
以下の構成で動作確認をします。pipは「physical ip(物理IPアドレス)」、fipは「floating ip」の略称です。
+----------------+ +----------------+ | (RockyLinux84) | | (RockyLinux84) | | Client50 | | Client51 | | | | | +-------+--------+ +-------+--------+ ens192 | .50 (vlan50 tagged) ens192 | .51 | 192.168.50.0/24 | +-------------------------------------+ | | | fip:.200 | 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 (vlan10 tagged) | fip:.200 | 192.168.10.0/24 | +-------------------------------------+ | | ens192 | .10 ens192 | .11 +-------+--------+ +-------+--------+ | | | | | Server10 | | Server11 | | (RockyLinux84) | | (RockyLinux84) | +----------------+ +----------------+
初期設定
「BIG-IP VLANとIPアドレスの設定」と「BIG-IP Active Standby構成の構築」を併用した状態を初期設定とします。前述の構成図でFIP(floating IP)以外の設定が完了している状態とします。
動作確認 (1) FIPのみの設定
FIPの設定
「Network」「Self IPs」の順に画面遷移し、「Create」を押下します。
「Name」「IP Adress」「Netmask」「VLAN / Tunnel」を入力します。
「Traffic Group」はfloatとなるものを指定します。floatとなるtraffic-groupは「BIG-IP Active Standby構成の構築」の操作の過程で作成されます。デフォルトでは「traffic-group-1」という名前です。
以上の入力が完了したら「Finished」を押下します。
コマンドラインで操作する場合は以下の通りです。
create net self SelfIP_FIP1_VLAN0010 address 192.168.10.200/24 vlan VLAN0010 allow-service all traffic-group traffic-group-1 create net self SelfIP_FIP1_VLAN0050 address 192.168.50.200/24 vlan VLAN0050 allow-service all traffic-group traffic-group-1
floating IPの設定はActive/Standby間で同期されます。もし、自動同期しない設定にしている場合は手動で同期してください。
コマンドラインで操作する場合は以下の通りです。
run cm config-sync to-group <デバイスグループ名>
疎通確認
Server10からFIPへ、Client50からFIPへping応答がある事を確認します。この確認はBIG-IPの片系障害が発生しても疎通は継続されます。
[server10:RockyLinux8.4] [root@server10 ~]# ping -c 3 192.168.10.200 PING 192.168.10.200 (192.168.10.200) 56(84) bytes of data. 64 bytes from 192.168.10.200: icmp_seq=1 ttl=255 time=0.446 ms 64 bytes from 192.168.10.200: icmp_seq=2 ttl=255 time=2.65 ms 64 bytes from 192.168.10.200: icmp_seq=3 ttl=255 time=0.394 ms --- 192.168.10.200 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2046ms rtt min/avg/max/mdev = 0.394/1.163/2.650/1.051 ms [root@server10 ~]# [client50:RockyLinux8.4] [root@client50 ~]# ping -c 3 192.168.50.200 PING 192.168.50.200 (192.168.50.200) 56(84) bytes of data. 64 bytes from 192.168.50.200: icmp_seq=1 ttl=255 time=0.875 ms 64 bytes from 192.168.50.200: icmp_seq=2 ttl=255 time=0.475 ms 64 bytes from 192.168.50.200: icmp_seq=3 ttl=255 time=0.424 ms --- 192.168.50.200 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2031ms rtt min/avg/max/mdev = 0.424/0.591/0.875/0.202 ms [root@client50 ~]#
動作確認 (2) virtual serverの併用
virtual serverの設定
virtual serverのDestinationをFIP(floating IP)にする事で障害発生後も通信を継続させる事ができます。
以下のようなDestinationをFIP(floating IP)とするvirtual serverの設定を作成します。以下の設定をload sys config from-terminal mergeなどのコマンドを使用して流し込みます。
ltm node 192.168.10.10 { address 192.168.10.10 } ltm node 192.168.10.11 { address 192.168.10.11 } ltm pool pool01 { members { 192.168.10.10:any { address 192.168.10.10 } 192.168.10.11:any { address 192.168.10.11 } } monitor gateway_icmp } ltm virtual VS_01 { destination 192.168.50.200:any mask 255.255.255.255 pool pool01 }
疎通確認
サーバ側のデフォルトゲートウェイがFIP(floating IP)に向いている事を確認します。
[server10:RockyLinux8.4] [root@server10 ~]# ip route default via 192.168.10.200 dev ens192 proto static metric 100 192.168.10.0/24 dev ens192 proto kernel scope link src 192.168.10.10 metric 100 [root@server10 ~]# [server11:RockyLinux8.4] [root@server11 ~]# ip route default via 192.168.10.200 dev ens192 proto static metric 100 192.168.10.0/24 dev ens192 proto kernel scope link src 192.168.10.11 metric 101 [root@server11 ~]#
server10とserver11に大きなファイルを配置し、長時間ダウンロードの疎通確認ができるようにします。以下はCentOS7のイメージを/var/www/html配下に配置する例です。
[server10:RockyLinux8.4] [root@server10 ~]# ls -l /var/www/html/ total 811008 -rwxr-xr-x 1 root root 830472192 9月 4 16:17 CentOS-7-x86_64-Minimal-1708.iso [root@server10 ~]# [server11:RockyLinux8.4] [root@server11 ~]# ls -l /var/www/html/ total 811008 -rwxr-xr-x 1 root root 830472192 9月 4 16:15 CentOS-7-x86_64-Minimal-1708.iso [root@server11 ~]#
この状態で、clientからserverへのHTTP download処理を発生させてみましょう
[client50:RockyLinux8.4] [root@client50 ~]# wget -O /dev/null http://192.168.50.200/CentOS-7-x86_64-Minimal-1708.iso
ダウンロード発生中にActive機となるbigipを再起動させます。
[bigip01:BIG-IP 16.1.0] [root@bigip01:Active:In Sync] config # reboot Connection to 192.168.2.31 closed by remote host. Connection to 192.168.2.31 closed.
再起動すると、以下のようにダウンロード処理がハングアップしています。これはwgetコマンドのタイムアウトがデフォルトの900秒だからです。
アプリケーションが適切なエラーハンドリングをしていれば業務停止する事はないのですが、以下スクリーンショットのように十分なエラーハンドリングをしてない場合は、業務が止まってしまいます。
このような状況はセッションレプリケーションと呼ばれる機能を用いて、BIG-IPのActive/Standby間でセッション情報を共有すれば通信断を避ける事ができます。
動作確認 (3) connection mirror
connection mirrorの設定
connection mirrorはvirtual serverに対して設定します。リスクの大きな設定ですので、Basicの設定画面では表示されません。
「Configuratoin」欄を「Advanced」に変更します。
画面を下の方にスクロールさせ「Connection Mirro」にチェックを入れます。注意書き「May degrade performance when enable」とあるように、性能劣化を引き起こすのでイタズラに有効化して良い設定ではありません。アプリケーション側でエラーハンドリングできない特段の事情(殆どの場合は契約や予算)がある かつ 業務上の影響が大きくてダウンタイムを最小化したい場合のみに有効化する設定です。
この設定をload sys config from-terminal mergeで反映させる場合は以下の通りです。
ltm virtual VS_01 { destination 192.168.50.200:any mask 255.255.255.255 mirror enabled pool pool01 }
疎通確認
この状態で、clientからserverへのHTTP download処理を発生させてみましょう
[client50:RockyLinux8.4] [root@client50 ~]# wget -O /dev/null http://192.168.50.200/CentOS-7-x86_64-Minimal-1708.iso
ダウンロード発生中にActive機となるbigipを再起動させます。
[bigip02:BIG-IP 16.1.0] [root@bigip02:Active:In Sync] config # reboot Connection to 192.168.2.32 closed by remote host. Connection to 192.168.2.32 closed.
以下スクリーンショットのように障害発生後も問題なくダウンロード処理が継続されています。