アービトレーションサーバープロセスの起動に失敗し、NICが見つからないというエラーが表示される
現象
コマンドラインでアービトレーションサーバーを起動する際、次のようなエラーメッセージが表示されます:
[2023-11-08 11:01:54.555369] ERROR issue_dba_error (ob_log.cpp:1841) [2649528][observer][T0][Y0-0000000000000000-0-0] [lt=3][errcode=-4388] Unexpected internal error happen, please checkout the internal errcode(errcode=-4182, file="ob_net_util.cpp", line_no=212, info="can not find ifname by local ip")
[2023-11-08 11:01:54.555407] EDIAG [LIB] get_ifname_by_addr (ob_net_util.cpp:212) [2649528][observer][T0][Y0-0000000000000000-0-0] [lt=37][errcode=-4182] can not find ifname by local ip(local_ip=0.0.0.0) BACKTRACE:0x10a24a3c 0x5e92550 0xb0a0c38 0x5e9228c 0x5e8b32c 0x10f7503c 0x10f74ac8 0x8e3a8bc 0x8e31a30 0x5e8c4c4 0xffffaad3485c 0x453d958
[2023-11-08 11:01:54.555846] ERROR init_config (ob_server.cpp:1840) [2649528][observer][T0][Y0-0000000000000000-0-0] [lt=434][errcode=-4393] observer start process failure(local_ip is not a valid IP for this machine, local_ip="0.0.0.0")
原因
エラーメッセージによると、local_ip は 0.0.0.0 です。これは、初めてコマンドラインでアービトレーションサーバープロセスを起動した際に、NIC名(-i eth0 で指定)またはIPアドレス(-I 10.xx.xx.xx で指定)を指定しなかったため、アービトレーションサーバーがdevnameを推測しようと試みましたが失敗し、デフォルトのbond0を使用した可能性があります。同時に、-I パラメータを指定していないため、local_ip の値にシステムのデフォルトの空文字列(0.0.0.0)が使用され、そのIPアドレスが設定ファイルに保存されました。その後、再度アービトレーションサーバープロセスを起動する際、NIC名を指定しても、以前保存された誤ったIPアドレスのためにエラーが発生します。これは、アービトレーションサーバーが local_ip が有効かどうかを強制的にチェックするためであり、その方法はその local_ip からNIC名を取得できるかどうかを確認することです。しかし、local_ip=0.0.0.0 の場合はNIC名を取得できず、local_ip のチェックに失敗し、最終的にアービトレーションサーバープロセスの起動が失敗します。
解決策
方法1:/etc ディレクトリ下の永続化ファイルを削除し、コマンドラインで -i eth0 を指定してアービトレーションサーバープロセスを再起動します。
方法2:永続化ファイルを削除せず、コマンドラインで直接 -I 10.xx.xx.xx を指定してアービトレーションサーバープロセスを再起動します。
アービトレーションサーバーのプロセス起動失敗、プロセス起動時にkilledと表示される
現象と分析
アービトレーションサーバーのプロセスが起動失敗し、起動コマンドを実行してもシステムがずっと killed を返す場合は、ローカルの vm.min_free_kbyte パラメータの設定を確認する必要があります。カーネルパラメータ vm.min_free_kbyte は、メモリ断片化を防ぐためにシステムが確保する最小空きメモリ量を設定します。新しく起動したプロセスによってマシンの残りメモリがこの値を下回ると、そのプロセスはオペレーティングシステムによってKillされる可能性があります。
解決策
vm.min_free_kbyte パラメータの値を適切に小さく調整できます。小規模マシン(サーバーの物理メモリが8GBを超えない)にアービトレーションサービスをデプロイするシナリオでは、この設定値をシステムのデフォルト値のままにすることを推奨します。
vm.min_free_kbyte パラメータの値を確認および変更する方法は以下のとおりです:
rootユーザーでアービトレーションサーバーが稼働しているマシンにログインします。システムの最低空きメモリの水準値を確認します。このパラメータ値の単位はKBです。
[root@xxx admin]# cat /proc/sys/vm/min_free_kbytes
実際の環境に応じて、システムの最低空きメモリの水準値を変更します。
例えば、システムの最低空きメモリの水準値を256MB、すなわち262144KBに調整します。
[root@xxx admin]# echo 262144 > /proc/sys/vm/min_free_kbytes
関連ドキュメント
アービトレーションサービスに関連するその他の運用操作については、アービトレーションによる高可用性 の章を参照してください。