2021-05-02 08:13 PM
NSO 5.4 より、NSO に実装されている HA 機能が一新されました。これにより、使用方法の変更がありますので、以下説明します。
NSO の HA の仕組みは NSO の公開当初より存在していますが、NSO ノードの役割 (Master/Slave) 毎の動作についてのみが内蔵されており、
例えば、特定の NSO ノードを Master にする、もう一方のノードを Slave とする、Virtual IP アドレスを用意しそれを制御する、と言ったことは NSO 自体には備わっておらず、
公開されている HA Framework API を使用してユーザによる制御アプリケーションの実装が必要でした。
HA Framework API を使用することにより非常に柔軟な HA 実装を作成することが可能ですが、
ユーザがそのフレームワークを実装するためにはプログラミングスキル・コストが必要となり、またお客様はそういった機能が同時に提供されていることを期待していたため、
Cisco は tailf-hcc パッケージを公開致しています。これは Java を使用した HA フレームワーク実装例とも言え、ユーザがこれを参考に独自にフレームワークを作成することも可能です。
ただし、実際には多くのユーザが tailf-hcc をそのまま使用しています。
本コミュニティにも、以下に使用方法を投稿しております。
NSO: tailf-hcc を使用して HA を操作する方法
NSO 5.4 より、tailf-hcc で実現していた一部機能が内蔵されることとなりました。これにより、Layer-3 (BGP) での HA を使用する場合は、tailf-hcc では Quagga と quagga-bgp NED を使用して制御しておりましたが、それについても GoBGP を使用した方法に変わっています。
本投稿では、新しい HA の設定方法について説明します。
NSO 上での HA には いくつかの機能があります。
NSO Version | 担当 |
---|---|
5.4 | NSO |
5.3以下 | NSO + tailf-hcc |
NSO が当該クラスタに参加しているノードを把握している必要があります。HA の手法は色々なものがありますが、NSO では設定済みの、既知のノードを参加させることが出来ます。
また、HA が有効化された NSO の各ノードは、Master, Slave, None のいずれかの状態にあります。
Master ノード, None ノードでは設定の変更などが可能ですが、Slave ノードは Read Only に設定され、Config モードへ入ることが出来ません。
また、Master/Slave にある場合、package の更新などが出来ないため、package のアップグレードを行う際には、None 状態である必要があります。
NSO Version | 担当 |
---|---|
5.4 | NSO |
5.3以下 | NSO |
Master ノードで発生した変更は、ConfigデータとOperationalデータ共に Slave ノードへ同期されます。トランザクション単位で同期が実施され、デフォルト設定では、同期が完了するまで当該トランザクションは終了しません。これにより、Slave ノードは必ず最新のデータを保持することが保証されます。
NSO Version | 担当 |
---|---|
5.4 | tailf-hcc |
5.3以下 | tailf-hcc |
ノードの状態が種々の条件によって遷移しますが、それを管理する必要があります。例えば、Masterノードが動作を停止した場合、それを検知し、Slave ノードが新しい Master ノードとして動作を開始する必要があります。それに伴い、Virtual IP アドレスが設定してある場合は付け替えが正しく行われる必要があります。
以下のような設定が必要です。
この設定は、L2 HA / L3 HA によらずその設定方法は共通ですが、参考として以下の図を掲示します。
high-availability token $9$EB2nNu0z9/2hQVIMc/lxhHcsx35lP65qxJgQSvvyzCc=
high-availability ha-node nso1
address 192.168.10.1
nominal-role master
!
high-availability ha-node nso2
address 192.168.10.2
nominal-role slave
failover-master true
!
high-availability settings enable-failover true
high-availability settings start-up assume-nominal-role true
high-availability settings start-up join-ha true
hcc enabled
hcc vip-address [ 192.168.10.99 ]
NSO Master/Slave ノード間で通信を行いますが、token としてパスワード情報を添付し、未知のノードが接続されないようにします。全てのノードが同じ token を使用します。
参加するノード全てを記述します。始めて HA の設定を行う場合、当然ですがどのノードにも HA 関連の設定がありません。ノードリストを含む HA の設定もまたノード間で同期しますが、初回設定時には、Slave ノードにも Master ノードの IPアドレスなどの設定が必要です。
HA の各種設定を行います。
admin@ncs# high-availability enable
result enabled
admin@ncs#
admin@ncs# high-availability enable
result enabled
admin@ncs#
HA の設定が完了したら、NSO ノードを HA クラスターへ組み込みます。
マスターノードでは、そのノードを Master へ設定します。Slave ノードでは、参加する Master ノード名を指定して、Slave へ設定します。
admin@ncs# high-availability be-master
result ok
admin@ncs#
admin@ncs# high-availability be-slave-to
Value for 'node' [nso1,nso2]: nso1
result Attempting to be slave to node nso1
admin@ncs#
admin@ncs# show high-availability
high-availability enabled
high-availability status mode master
high-availability status current-id nso1
high-availability status assigned-role master
ID ADDRESS
--------------------
nso2 192.168.10.2
admin@ncs#
自身の ID が nso1 であること、また master であることがわかります。
admin@ncs# show high-availability
high-availability enabled
high-availability status mode slave
high-availability status current-id nso2
high-availability status assigned-role slave
high-availability status be-slave-result initialized
high-availability status master-id nso1
admin@ncs#
自身の ID が nso2 であること、また slave であり、その master は nso1 であることがわかります。
Slave ノード (NSO2) は、Master ノード (NSO1)の死活監視を行います。その結果、Master ノードがダウンしたと判断した場合、以下の設定がされている場合は Slave ノード自身が Master へと昇格させます。
high-availability settings enable-failover true
また、その時に master となるノードは、以下で設定されています。
high-availability ha-node nso2
failover-master true
assume-nominal-role
と join-ha
の設定により、起動時の動作が変わります。
high-availability settings start-up assume-nominal-role true
high-availability settings start-up join-ha true
各ノードに設定された role が現在の動作 role であると仮定し、起動したノードが master に設定されたノードである場合 (nso1)、master ノードとして宣言し、クラスタに参加します。起動したノードが slave に設定されたノードである場合 (nso2)、slave ノードとして宣言し、設定上 nominal-role が master に設定されたノードを master として、クラスタに参加します。
false に設定された場合、設定された nominal-role に頼らず、その時点での master ノードを探します。例えば、nso2 が failover-master となった後、nso1 が再度起動してきた場合には nso2 を master として、nso1 は slave として参加します。
自身を slave として、HA クラスタに参加させるための設定です。この値が false であったとしても、一度はクラスタへの参加は試みますが、何らかの問題が出来ない場合に中止します。
true へ設定された場合は、reconnect-interval
に設定された値の間隔で、HA クラスタへの参加を引き続き試みます。
以下のトポロジー上で設定します。上記の例で使用したものですが、2つの NSO ノードは、共に 192.168.10.0/24 ネットワークに配置され、192.168.10.99 を VIP として使用しています。
tailf-hcc パッケージが提供する設定内容です。VIP の管理は tailf-hcc が行うため、hcc 配下に設定をします。この例では、vip として 192.168.10.99 を設定しているため、Master ノードの NIC に、このアドレスが以下のように追加されます。
ubuntu@nso1:~$ ip -4 addr show ens2
2: ens2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
inet 192.168.10.1/24 brd 192.168.10.255 scope global ens2
valid_lft forever preferred_lft forever
inet 192.168.10.99/32 scope global ens2
valid_lft forever preferred_lft forever
以下のトポロジー上で設定します。2つの NSO ノードは、3つのルータを介して接続されています。
NSO は近隣のルータと eBGP を使用して接続し、Master Role となっている場合には VIP を広報します。
NSO 5.4 においても、BGP 実装が Nativeでされたわけではなく、外部 BGP 実装として GoBGP を使用します。別途インストールする必要がありますので、以下のようにインストールを行ってください。
apt-get install gobgp
yum install gobgp
レポジトリ: https://github.com/osrg/gobgp/
# mkdir /opt/gobgp
# cd /opt/gobgp
# wget https://github.com/osrg/gobgp/releases/download/v2.24.0/gobgp_2.24.0_linux_amd64.tar.gz
# tar xfzv ~/gobgp_2.24.0_linux_amd64.tar.gz
root@nso-5:~# ls -la /opt/gobgp
total 29468
drwxr-xr-x 2 root root 4096 Feb 12 14:12 .
drwxr-xr-x 4 root root 4096 Feb 12 13:54 ..
-rw-r--r-- 1 1001 119 11324 Feb 3 06:23 LICENSE
-rw-r--r-- 1 1001 119 2419 Feb 3 06:23 README.md
-rwxr-xr-x 1 1001 119 14233600 Feb 3 06:25 gobgp
-rwxr-xr-x 1 1001 119 15917056 Feb 3 06:25 gobgpd
root@nso-5:~#
high-availability の設定は、L2 HA と同様です。
hcc に bgp 関連の設定が必要となります。
high-availability token $9$yumaELjtA3pTSsffRmNypptXReCa7dQeSr3PtZZHn2k=
high-availability ha-node nso-5
address 192.168.15.5
nominal-role master
!
high-availability ha-node nso-6
address 192.168.36.6
nominal-role slave
failover-master true
!
high-availability settings enable-failover true
high-availability settings start-up assume-nominal-role false
high-availability settings start-up join-ha true
bgp speaker として必要な設定を追加します。BGP の設定としては、特に変わったものは有りません。gobgp-bin-dir
へは、gobgp 実行ファイルが設置されたディレクトリパスを設定します。
hcc enabled
hcc vip-address [ 9.9.9.9 ]
hcc bgp node nso-5
gobgp-bin-dir /opt/gobgp
as 65000
router-id 5.5.5.5
neighbor 192.168.15.1
as 100
enabled
!
!
hcc bgp node nso-6
gobgp-bin-dir /opt/gobgp
as 65001
router-id 6.6.6.6
neighbor 192.168.36.3
as 300
enabled
!
!
show high-availability
によって、HA のステータスが確認出来ます。
Master ノード上では、接続されている slave のリストが表示されます。
ubuntu@ncs# show high-availability
high-availability enabled
high-availability status mode master
high-availability status current-id nso-5
high-availability status assigned-role master
ID ADDRESS
---------------------
nso-6 192.168.36.6
ubuntu@ncs#
ubuntu@ncs# show high-availability
high-availability enabled
high-availability status mode slave
high-availability status current-id nso-6
high-availability status assigned-role slave
high-availability status be-slave-result initialized
high-availability status master-id nso-5
ubuntu@ncs#
NSOノードからの、Neighborへの接続情報が確認出来ます。
他ノードについては、その存在のみが確認可能で、bgpd ステータスなどは "-" が表示されます。
ubuntu@ncs# show hcc
NODE BGPD BGPD
ID PID STATUS ADDRESS STATE CONNECTED
-------------------------------------------------------------
nso-5 18003 running 192.168.15.1 ESTABLISHED true
nso-6 - - 192.168.36.3 - -
ubuntu@ncs#
ubuntu@ncs# show hcc
NODE BGPD BGPD
ID PID STATUS ADDRESS STATE CONNECTED
------------------------------------------------------------
nso-5 - - 192.168.15.1 - -
nso-6 6437 running 192.168.36.3 ESTABLISHED true
ubuntu@ncs#
gobgp は動的に作成された conf ファイルを読み込み、起動します。
root@nso-5:~# ps -ef | grep gobgp | grep -v grep
root 18003 17942 0 Feb12 ? 00:02:02 /opt/gobgp/gobgpd -l debug -f /tmp/bgp.wtyv7l740g.conf
root@nso-5:~#
具体的には、以下の内容のファイルが生成され、gobgp に使用されています。
root@nso-5:~# cat /tmp/bgp.wtyv7l740g.conf
[global.config]
as = 65000
router-id = "5.5.5.5"
[[neighbors]]
[neighbors.config]
neighbor-address = "192.168.15.1"
peer-as = 100
[[neighbors.afi-safis]]
[neighbors.afi-safis.config]
afi-safi-name = "ipv4-unicast"
[[neighbors.afi-safis]]
[neighbors.afi-safis.config]
afi-safi-name = "ipv6-unicast"
root@nso-5:~#
Master ノード上では VIP が BGP RIB へインジェクトされ、また Neighbor に広報されます。Slave ノードではそれの受信が確認出来ます。
ubuntu@nso-5:~$ gobgp global rib
Network Next Hop AS_PATH Age Attrs
*> 9.9.9.9/32 0.0.0.0 00:01:28 [{Origin: ?}]
ubuntu@nso-5:~$
ubuntu@nso-6:~$ gobgp global rib
Network Next Hop AS_PATH Age Attrs
*> 9.9.9.9/32 192.168.36.3 300 200 100 65000 00:00:51 [{Origin: ?}]
ubuntu@nso-6:~$
今回のトポロジ上、コアルータ郡の意味合いで作成した AS 200 内の R2 ルータ上では、VIP が R1 から広報されています。
R2#show bgp ipv4 unicast
BGP table version is 7, local router ID is 2.2.2.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter,
x best-external, a additional-path, c RIB-compressed,
t secondary path,
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
Network Next Hop Metric LocPrf Weight Path
*> 9.9.9.9/32 192.168.12.1 0 100 65000 ?
R2#
検索バーにキーワード、フレーズ、または質問を入力し、お探しのものを見つけましょう
シスコ コミュニティをいち早く使いこなしていただけるよう役立つリンクをまとめました。みなさんのジャーニーがより良いものとなるようお手伝いします
下記より関連するコンテンツにアクセスできます