2019年1月23日水曜日

VyOSでステートフルフェイルオーバー(conntrack-sync)をできるようにした話

以前、VyOSを冗長化するために、VRRPによる冗長化を記事にした。
VRRPだけでも障害時は数秒で切り替わることが確認できており、特に動作に不満はないのだが、VyOSではTCPやUDPのコネクション情報をフェイルオーバー時に引き継ぐ「ステートフルフェイルオーバー」という機能が実装できることを知った。これはVyOSでは「conntrack-sync」と呼ばれる機能となる。本記事では、VyOSでのconntrack-syncの設定を行い、動作確認をしてみた。

環境

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


VRRPの設定

VyOSでVRRPを実装する方法は、以下の過去記事に記載しており、本記事ではVyOS2台でVRRPの構成が組まれていることが前提となる。

conntrack-syncを設定する

設定は2台のVyOS両方に対し、同じコマンドで設定する。

VyOS#1設定

まずはVyOS#1の設定をコメント付きで記載する。
vyos@t3033vyos# set service conntrack-sync accept-protocol 'tcp,udp,icmp'
→★conntrack-syncで同期するプロトコルとしてTCP/UDP/ICMPを設定
vyos@t3033vyos# set service conntrack-sync failover-mechanism vrrp sync-group syncgrp01
→★フェイルオーバーのタイプをVRRPに設定
vyos@t3033vyos# set service conntrack-sync interface eth1
→★情報同期に利用するインタフェースを指定

vyos@t3033vyos# compare
[edit service]
+conntrack-sync {
+    accept-protocol tcp,udp,icmp
+    event-listen-queue-size 8
+    failover-mechanism {
+        vrrp {
+            sync-group syncgrp01
+        }
+    }
+    interface eth1
+    mcast-group 225.0.0.50
+    sync-queue-size 1
+}
vyos@t3033vyos# commit
vyos@t3033vyos# save

VyOS#2設定

続いてVyOS#2の設定となるが、コマンドは完全に同一となる。
vyos@t3032vyos# set service conntrack-sync accept-protocol 'tcp,udp,icmp'
vyos@t3032vyos# set service conntrack-sync failover-mechanism vrrp sync-group syncgrp01
vyos@t3032vyos# set service conntrack-sync interface eth1
vyos@t3032vyos# compare
[edit service]
+conntrack-sync {
+    accept-protocol tcp,udp,icmp
+    event-listen-queue-size 8
+    failover-mechanism {
+        vrrp {
+            sync-group syncgrp01
+        }
+    }
+    interface eth1
+    mcast-group 225.0.0.50
+    sync-queue-size 1
+}
vyos@t3032vyos# commit
vyos@t3032vyos# save

動作確認

conntrack-syncのステータスを確認

設定が完了したら、conntrack-syncのステータスを確認する。VyOS#1がMaster、VyOS#2がStandbyになっている。
  • VyOS#1
vyos@t3033vyos:~$ show conntrack-sync status
sync-interface        : eth1
failover-mechanism    : vrrp [sync-group syncgrp01]
last state transition : MASTER at Sun Jan 20 06:11:04 JST 2019
ExpectationSync       : disabled
  • VyOS#2
vyos@t3032vyos:~$ show conntrack-sync status
sync-interface        : eth1
failover-mechanism    : vrrp [sync-group syncgrp01]
last state transition : BACKUP at Sun Jan 20 06:13:05 JST 2019
ExpectationSync       : disabled

保持しているコネクション情報を確認

conntrack-syncでは、2つのコネクション情報を管理している。
  1. 自身のもつコネクション情報(Internal Cache)
  2. 対向ルーターが持つコネクション情報(External Cache)
簡単に図に書くと以下の通りとなる。各ルーターはExternal Cacheとして対向ルーターのコネクション情報を同期しており、対向ルーター障害時に、即座に引き継げる。
VyOS#1VyOS#2マルチキャスト(225.0.0.50)でInternal Cacheを送信受信したCacheをExternal Cacheとして保持マルチキャスト(225.0.0.50)でInternal Cacheを送信受信したCacheをExternal Cacheとして保持VyOS#1VyOS#2
実際にコマンドで確認してみよう。実行タイミングで随時変更が入るため完全に同一とならないが、2台のルーター間で「cache internal」と「cache external」がほぼ同数となっていることがわかる。
  • VyOS#1
vyos@t3033vyos:~$ show conntrack-sync statistics
Main Table Statistics:

cache internal:
current active connections:              128
connections created:                  138830    failed:            0
connections updated:                  431529    failed:            0
connections destroyed:                138702    failed:            0

cache external:
current active connections:               19
connections created:                   77975    failed:            0
connections updated:                    4198    failed:            0
connections destroyed:                 77956    failed:            0

traffic processed:
                   0 Bytes                         0 Pckts

multicast traffic (active device=eth1):
            39144744 Bytes sent              7447944 Bytes recv
              546040 Pckts sent               116175 Pckts recv
                   0 Error send                    0 Error recv

message tracking:
                   0 Malformed msgs                  537 Lost msgs

  • VyOS#2
yos@t3032vyos:~$ show conntrack-sync statistics
Main Table Statistics:

cache internal:
current active connections:               12
connections created:                   83300    failed:            0
connections updated:                    6895    failed:            0
connections destroyed:                 83288    failed:            0

cache external:
current active connections:              128
connections created:                  167162    failed:            0
connections updated:                  349591    failed:            0
connections destroyed:                167034    failed:            0

traffic processed:
                   0 Bytes                         0 Pckts

multicast traffic (active device=eth1):
             7474996 Bytes sent             38942708 Bytes recv
              116529 Pckts sent               543314 Pckts recv
                   0 Error send                    0 Error recv

message tracking:
                   0 Malformed msgs                 2418 Lost msgs

フェイルオーバー時の動作を確認する

VyOS#1を停止させ、VRRPがフェイルオーバーした際のconntrack-syncの動作確認を行う。
まずは、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     4s          syncgrp01
次にconntrack-syncのステータス確認を行うと、こちらもMASTERになっている。
vyos@t3032vyos:~$ show conntrack-sync status
sync-interface        : eth1
failover-mechanism    : vrrp [sync-group syncgrp01]
last state transition : MASTER at Mon Jan 21 06:47:09 JST 2019
ExpectationSync       : disabled
コネクション情報を確認すると、VyOS#1のコネクション情報がVyOS#2に引き継がれており、Internal Cacheが増加していることがわかる。
vyos@t3032vyos:~$ show conntrack-sync statistics
Main Table Statistics:

cache internal:
current active connections:              157
connections created:                   84647    failed:            0
connections updated:                    7251    failed:            0
connections destroyed:                 84490    failed:            0

cache external:
current active connections:                0
connections created:                  173852    failed:            0
connections updated:                  370742    failed:            0
connections destroyed:                173852    failed:            0

traffic processed:
                   0 Bytes                         0 Pckts

multicast traffic (active device=eth1):
             7660420 Bytes sent             41014156 Bytes recv
              121520 Pckts sent               572546 Pckts recv
                   0 Error send                    0 Error recv

message tracking:
                   0 Malformed msgs                 2418 Lost msgs

参考

0 件のコメント:

コメントを投稿

人気の投稿