Connect :
Uptime :
Secondary
15 Days
15 Hour
50 Min.
本番稼働中の自鯖インスタンスをテスト環境にコピーしながらAnsibleで操作していた時、
何故かAnsibleから操作出来たり出来なかったりと不安定になった。
Ansibleサーバ | Rocky Linux 8.5 | Ansible 2.9.27 |
Ansibleクライアント | openSUSE Leap 15.3 | OpenSSH 8.4p1 |
Ansibleのデバッグログも出力したがunreachableとしか表示されなかった。
実際にSSHで接続すると問題無く接続出来た為、認証鍵が怪しいと判断。
でも、クライアント側で利用しているOpenSSH鍵を作り直したり、
逆に稼働中の物と同じにしても繋がらずお手上げだった。
最終的にパケットキャプチャやカーネルトレースもしたのだが理由がわからず、
ググりつつ試行錯誤したら次の記事に遭遇。
ここでピンと来た。
自鯖のAnsibleはサーバ操作を高速化する為にMultiplexingを有効にしていた。
Multiplexingは指定ディレクトリにSSH接続用のソケットを作成し、
初回はソケット作成して以後のSSHはソケット経由で通信してオーバーヘッドを減らす機能となる。
今回はこのソケット接続が不安定になりSSH出来なくなっていると推測し、
同様の動きをするOpenSSHのControlMasterを弄って接続状況を再現した所、
Ansibleを叩いた時同様に対象サーバに繋がらない状況を再現出来た。
……
原因が判明したからチューニングが簡単というわけでもなく、
Multiplexingを有効にした状態で安定させられないか格闘。
しかし、機能を有効にした状態では安定させられず、最終的にMultiplexingを無効化した。
今回の事象は珍しいかもしれないが、今後再発した時の為にメモしておく。