アービトレーションサーバーのプロセス起動に失敗し、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 パラメータが指定されていなかったため、システムのデフォルトの空文字列(0.0.0.0)が local_ip の値として使用され、その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
関連ドキュメント
アービトレーションサービスに関するその他の運用操作については、アービトレーションの高可用性セクションを参照してください。