2018年10月13日土曜日

VyOSをVRRPを使って冗長化する

ネットワーク機器の冗長化方式として、VRRP (Virtual Router Redundancy Protocol) というものがある。多くのネットワーク機器の冗長化方式で採用されている標準的な方式となっており、VyOSでも利用可能である。

この度、自宅検証環境にESXi用のサーバーが1台増設することができ、自宅のネットワークのゲートウェイとして利用しているVyOSの冗長化が必要となったため、VRRPを実装してみた。さらに、簡単な障害時の切り替わり動作の確認を行ってみた。

環境

環境は以下の通りとなる。利用しているVyOSのバージョンは1.1.8となる。


各VyOSのインターフェース設定は以下の通り。

・VyOS#1
vyos@t3033vyos:~$ show interfaces
------------------------------
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface        IP Address                        S/L  Description
---------        ----------                        ---  -----------
eth0             192.168.33.33/24                  u/u
eth1             192.168.11.33/24                  u/u
lo               127.0.0.1/8                       u/u
                 ::1/128
------------------------------

・VyOS#2
vyos@t3032vyos:~$ show interfaces
------------------------------
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface        IP Address                        S/L  Description
---------        ----------                        ---  -----------
eth0             192.168.33.32/24                  u/u
eth1             192.168.11.32/24                  u/u
lo               127.0.0.1/8                       u/u
                 ::1/128
------------------------------

VRRPの設定

以下設定を投入する。VyOS#1とVyOS#2の設定の違いは、Priorityの箇所のみである。Priorityの値が高いVyOSが通常Masterとして動作する (今回であればVyOS#1)。

・VyOS#1
------------------------------
# eth0側の設定
# アドバタイズの間隔を1秒間毎に設定
set interfaces ethernet eth0 vrrp vrrp-group 10 advertise-interval 1
# VIPを192.168.33.31に設定
set interfaces ethernet eth0 vrrp vrrp-group 10 virtual-address 192.168.33.31/24
# 自動フェイルバックをONにする
set interfaces ethernet eth0 vrrp vrrp-group 10 preempt true
# eth0とeth1を連動して切り替えるための設定
set interfaces ethernet eth0 vrrp vrrp-group 10 sync-group syncgrp01
# Masterになる優先度を150に設定 (大きいほど優先される)
set interfaces ethernet eth0 vrrp vrrp-group 10 priority 150
# eth1側の設定
# アドバタイズの間隔を1秒間毎に設定
set interfaces ethernet eth1 vrrp vrrp-group 10 advertise-interval 1
# VIPを192.168.11.31に設定
set interfaces ethernet eth1 vrrp vrrp-group 10 virtual-address 192.168.11.31/24
# 自動フェイルバックをONにする
set interfaces ethernet eth1 vrrp vrrp-group 10 preempt true
# eth0とeth1を連動して切り替えるための設定
set interfaces ethernet eth1 vrrp vrrp-group 10 sync-group syncgrp01
# Masterになる優先度を100に設定 (大きいほど優先される)
set interfaces ethernet eth1 vrrp vrrp-group 10 priority 150
------------------------------

・VyOS#2
------------------------------
# eth0側の設定
# アドバタイズの間隔を1秒間毎に設定
set interfaces ethernet eth0 vrrp vrrp-group 10 advertise-interval 1
# VIPを192.168.33.31に設定
set interfaces ethernet eth0 vrrp vrrp-group 10 virtual-address 192.168.33.31/24
# 自動フェイルバックをONにする
set interfaces ethernet eth0 vrrp vrrp-group 10 preempt true
# eth0とeth1を連動して切り替えるための設定
set interfaces ethernet eth0 vrrp vrrp-group 10 sync-group syncgrp01
# Masterになる優先度を100に設定 (大きいほど優先される)
set interfaces ethernet eth0 vrrp vrrp-group 10 priority 100
# eth1側の設定
# アドバタイズの間隔を1秒間毎に設定
set interfaces ethernet eth1 vrrp vrrp-group 10 advertise-interval 1
# VIPを192.168.11.31に設定
set interfaces ethernet eth1 vrrp vrrp-group 10 virtual-address 192.168.11.31/24
# 自動フェイルバックをONにする
set interfaces ethernet eth1 vrrp vrrp-group 10 preempt true
# eth0とeth1を連動して切り替えるための設定
set interfaces ethernet eth1 vrrp vrrp-group 10 sync-group syncgrp01
# Masterになる優先度を100に設定 (大きいほど優先される)
set interfaces ethernet eth1 vrrp vrrp-group 10 priority 100
------------------------------

設定投入後は、VyOS#1、VyOS#2の順にcommit、saveしておこう。

VRRPの状態確認

設定後、VRRPの状態を確認してみると、VyOS#1側がMASTER、VyOS#2がBACKUPとして動作していることがわかる。

・VyOS#1
vyos@t3033vyos:~$ show vrrp
------------------------------
                                 RFC        Addr   Last        Sync
Interface         Group  State   Compliant  Owner  Transition  Group
---------         -----  -----   ---------  -----  ----------  -----
eth0              10     MASTER  no         no     22m11s      syncgrp01
eth1              10     MASTER  no         no     22m10s      syncgrp01
------------------------------

vyos@t3033vyos:~$ show interfaces
------------------------------
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface        IP Address                        S/L  Description
---------        ----------                        ---  -----------
eth0             192.168.33.33/24                  u/u
                 192.168.33.31/24
eth1             192.168.11.33/24                  u/u
                 192.168.11.31/24
lo               127.0.0.1/8                       u/u
                 ::1/128
------------------------------

・VyOS#2
vyos@t3032vyos:~$ show vrrp
------------------------------
                                 RFC        Addr   Last        Sync
Interface         Group  State   Compliant  Owner  Transition  Group
---------         -----  -----   ---------  -----  ----------  -----
eth0              10     BACKUP  no         no     22m3s       syncgrp01
eth1              10     BACKUP  no         no     22m3s       syncgrp01
------------------------------

vyos@t3032vyos:~$ show interfaces
------------------------------
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface        IP Address                        S/L  Description
---------        ----------                        ---  -----------
eth0             192.168.33.32/24                  u/u
eth1             192.168.11.32/24                  u/u
lo               127.0.0.1/8                       u/u
                 ::1/128
------------------------------

VRRPの切り替わり動作確認 (筐体障害編)

VRRPの冗長性確認を行うために、実際にMaster側のVyOS#1を停止し、切り替わり動作の確認を行う。


まずは、192.168.11.82の端末のARPテーブルを確認してみると、VIPはVyOS#1側のMACアドレスとなっていることがわかる。

C:\Users\tadmin>arp -a
------------------------------
インターフェイス: 192.168.11.82 --- 0x10
  インターネット アドレス 物理アドレス           種類
  192.168.11.31         00-0c-29-cf-37-09     動的  ←★VIP
  192.168.11.32         00-0c-29-77-3c-a4     動的  ←★VyOS#2のIP
  192.168.11.33         00-0c-29-cf-37-09     動的  ←★VyOS#1のIP
------------------------------

通信断時間の確認のために、192.168.11.82の端末からPingを飛ばしつつ、ESXiからVyOS#1をシャットダウンした。

Pingの結果は以下の通り、1回の欠けが発生したものの、通信は正常に回復した。

C:\Users\tadmin>ping 192.168.33.1 -t
------------------------------
192.168.33.1 に ping を送信しています 32 バイトのデータ:
192.168.33.1 からの応答: バイト数 =32 時間 <1ms TTL=63
192.168.33.1 からの応答: バイト数 =32 時間 <1ms TTL=63
192.168.33.1 からの応答: バイト数 =32 時間 <1ms TTL=63
192.168.33.1 からの応答: バイト数 =32 時間 <1ms TTL=63
要求がタイムアウトしました。
192.168.33.1 からの応答: バイト数 =32 時間 <1ms TTL=63
192.168.33.1 からの応答: バイト数 =32 時間 <1ms TTL=63
192.168.33.1 からの応答: バイト数 =32 時間 <1ms TTL=63
------------------------------

再度、192.168.11.82の端末のARPテーブルを確認すると、VIPはVyOS#2側のMACアドレスとなっていることがわかる。

C:\Users\tadmin>arp -a
------------------------------
インターフェイス: 192.168.11.82 --- 0x10
  インターネット アドレス 物理アドレス           種類
  192.168.11.31         00-0c-29-77-3c-a4     動的  ←★VIP
  192.168.11.32         00-0c-29-77-3c-a4     動的  ←★VyOS#2のIP
  192.168.11.33         00-0c-29-cf-37-09     動的  ←★VyOS#1のIP
------------------------------

VyOS#2のVRRPのステータスもMASTERになっている。

vyos@t3032vyos:~$ show vrrp
------------------------------
                                 RFC        Addr   Last        Sync
Interface         Group  State   Compliant  Owner  Transition  Group
---------         -----  -----   ---------  -----  ----------  -----
eth0              10     MASTER  no         no     4s          syncgrp01
eth1              10     MASTER  no         no     3s          syncgrp01
------------------------------

なお、VRRPの切り替わり時間だが、デフォルトで1秒間隔のアドバタイズをMasterルーターが送信し続け、Backupルーターはアドバタイズを受信することでMasterルーターが正常に動作していることを検知する。Backupルーターでアドバタイズが受信できなくなると、3秒間 (アドバタイズ間隔の3倍の時間) 待機し、さらに受信ができない場合は、BackupルーターはMasterルーターに昇格するという動作をする。

VRRPの動作確認 (NIC障害編)

先ほどはVyOS#1を停止させたが、今度はVyOS#1のeth0をLinkDownさせた場合の切り替わり動作を確認する。


192.168.11.82の端末からPingを飛ばしながら、ESXiよりVyOS#1のeth0の仮想NICを切断してみる。

今度は2回の欠けが発生したが、前述したとおり、最大3秒間の切り替わり時間があるので、想定通りの結果と言えるだろう。

C:\Users\tadmin>ping 192.168.33.1 -t
------------------------------
192.168.33.1 に ping を送信しています 32 バイトのデータ:
192.168.33.1 からの応答: バイト数 =32 時間 <1ms TTL=63
192.168.33.1 からの応答: バイト数 =32 時間 <1ms TTL=63
192.168.33.1 からの応答: バイト数 =32 時間 <1ms TTL=63
192.168.33.1 からの応答: バイト数 =32 時間 <1ms TTL=63
要求がタイムアウトしました。
要求がタイムアウトしました。
192.168.33.1 からの応答: バイト数 =32 時間 <1ms TTL=63
192.168.33.1 からの応答: バイト数 =32 時間 <1ms TTL=63
192.168.33.1 からの応答: バイト数 =32 時間 <1ms TTL=63
------------------------------

なお、VyOSのステータスは以下の通りとなる。NIC障害の場合、VRRPのStateが「FAULT」になる。

・VyOS#1
vyos@t3033vyos:~$ show vrrp
------------------------------
                                 RFC        Addr   Last        Sync
Interface         Group  State   Compliant  Owner  Transition  Group
---------         -----  -----   ---------  -----  ----------  -----
eth0              10     FAULT   no         no     1m29s       syncgrp01
eth1              10     FAULT   no         no     1m29s       syncgrp01
------------------------------

・VyOS#2
vyos@t3032vyos:~$ show vrrp
------------------------------
                                 RFC        Addr   Last        Sync
Interface         Group  State   Compliant  Owner  Transition  Group
---------         -----  -----   ---------  -----  ----------  -----
eth0              10     MASTER  no         no     3m12s       syncgrp01
eth1              10     MASTER  no         no     3m15s       syncgrp01
------------------------------

まとめ

VyOSでVRRPの設定を行い障害時の動作確認をしてみたが、非常に簡単な設定をするだけで、VyOSを冗長構成にすることができた。仮想環境でVyOSを動作させる場合、vSphere HAの機能ではどうしても数分間の通信断が発生するが、VRRPであれば数秒の通信断に抑えることができる。

0 件のコメント:

コメントを投稿

人気の投稿