概要
本ドキュメントでは tailf-hcc パッケージを使用して NSO の HA(High Availability) を構築する際によく発生する問題についてまとめます。
前提条件
本ドキュメントは以下のバージョンをベースに作成しています。バージョンによって動作が変わる可能性がありますので注意してください。
NSO: 4.2.1.4
Tail-f HCC Package : 4.0.6
また、HA の基本的な設定に関しては tailf-hcc package に含まれる deployment_guide.pdf を参照してください。
ncs.conf で HA を有効にしていない
HA を有効にするには、NSO CLI 上の設定以外に ncs.conf に以下の設定が必要です。デフォルトではコメントアウトされていますので、アンコメントしてください。
<ha> <enabled>true</enabled> </ha> |
アンコメントされていない場合、devel.log に以下のようなエラーが出力されます。
<ERR> 10-Jan-2017::08:51:26.239 foo-1 ncs[1544]: devel-econfd tailf_viperl_server: Got unexpected info: {'EXIT',<0.249.0>, {badmatch, {error, {1, <<"/tfnm:ncs-state/ha does not exist">>}}}} <ERR> 10-Jan-2017::08:51:27.596 foo-1 ncs[1544]: ncs Socket connection from "HA socket" rejected - probably due to NCS being in phase0 or service not enabled in config file
|
また、ncs-java-vm.log には以下のようなエラーが出力されます。
<ERROR> 10-Jan-2017::08:51:46.321 TcmApp (tailf-hcc:tailf-hcc)-Run-0: - NCS HA is likely not enabled |
HA を activate していない
NSO 起動後に CLI で HA を activate しなければなりません。
admin@ncs# ha commands activate status activated |
HA が activate されていないと status が none と表示されます。
admin@ncs# ha commands status status foo-1[none] admin@ncs# show ncs-state ha ncs-state ha mode none |
Hostname がマッチしていない
NSO 設定上のホスト名が Linux 上で名前解決できる状態で、かつマッチしていないと tailf-hcc package は正常に動作しません。以下のようにホスト名が合っているかどうか確認してください。
NSO 上の設定
ha member foo-1 address 172.17.0.2 default-ha-role master vip-interface eth0
|
Linux 上のホスト名
root@foo-1:/home/nso# cat /etc/hosts | grep foo-1 172.17.0.2 foo-1.cisco.com foo-1 root@foo-1:/home/nso# hostname foo-1
|
例えば、上記の設定で foo-1 を foo-1-wrong に変更した場合、ha commands status の表示は以下のようになります。foo-1 とは NSO が設定されている IP から解決したホスト名になりますので、設定されているホスト名と異なっていることが分かります。
admin@ncs# ha commands status status foo-1[none]
|
なお、Java 実行環境のバージョンや Linux OS 上の IPv6 有効・無効の設定によって FQDN がホスト名として NSO に認識されてしまうことがあるようです。そのような場合、/etc/modprobe.conf 内の options ipv6 disable=1 を削除して IPv6 を有効にしてみるか、どうしても回避できない場合は FQDN で NSO 上の設定も実施してみてください。ただし、将来的にはこの動作は tailf-hcc packge 内で改善される可能性があります。
Master/Slave 間が通信できていない
HA の通信にはデフォルトでポート番号 4570 を使用します。また、本ポート番号は ncs.conf の設定で変更できます。この通信ができないとリモートノードが認識できないなどの問題が発生します。
<ha> <enabled>true</enabled> <ip>0.0.0.0</ip> <port>4570</port> <tick-timeout>PT20S</tick-timeout> </ha>
|
Firewall などで通信がブロックされていないか確認してください。また、telnet <master NSO> 4570 などで接続が可能かなど確認してください。
Master/Slave で異なる Key を使用している
ncs.conf の encrypted-strings 内の値は Mater/Slave で同じ値が設定されている必要があります。これらの値を元に NSO 設定内のパスワードは暗号化・復号化されますので、もし Master/Slave 間で異なる場合切り替え後にデバイスと接続できないという問題が発生します。
Master 上
admin@ncs# devices device nxos connect result true
|
Slave に切り替え後
admin@ncs# devices device nxos connect result false info Failed to authenticate towards device nxos: Bad password for local/remote user admin/admin Auth failed
|
ncs.conf の encrypted-strings は必ず同じ値を使用するようにしてください。
HA 関連の一般的なログ
NSO CLI のコマンド
- show ncs-state ha
- show packages package tailf-hcc
- ha commands status
- show running-config ha
ログファイル(通常 Master/Slave 両方のものが必要です)
- ncs-java-vm.log
- devel.log
- syslog (/var/log/messages) ※ VIP に関するログが出力されます。
※ ncs-java-vm.log により詳しい情報を残したい場合は、以下の設定を入れることで tailf-hcc package のログレベルを debug に設定します。ログ取得が完了したら設定を削除してください。ログ出力増加に伴い負荷も増す可能性がありますので、ラボで確認のうえ実施してください。
root@ncs(config)# java-vm java-logging logger com.tailf.ns.tailfHcc level level-debug root@ncs(config-logger-com.tailf.ns.tailfHcc)# commit |