これは今や十分な苛立たしい問題であり、私は最終的にコミュニティ全体に可能な解決策が何であるかを尋ねようと思いました。私だけがこの問題を経験しているように見えるのはさらにいらいらします。
基本的に、CentOS 7.x、sshd構成、またはsshdの一部でいつでも変更され、デーモンが次の3分間の「ランダムなポイント」で再起動/再ロードされ、ssh接続がすべてリセットされ、そのサーバーがssh経由で数秒間到達できません。
これは特に、sshdに対してこれらの変更自体を実行し、それを再ロードする必要がある(たとえば、新しいCentOS 7xサーバービルドで)ansibleの問題です。しかし、その後のプレイでは、ランダムにsshに接続できず、接続に失敗したそのホストの残りのプレイブックやプレイを爆破します。これは、いくつかがランダムに完了するため、大規模なホストパターンでは特に悪いですが、その他は、sshdが操作された後、プレイブックのさまざまな段階で失敗します。CentOS 5x、6x、またはSolarisでも、このようなことは発生しないことに注意してください。
これを回避するために私ができる最善の方法は、sshdに変更を加えた後に90秒の待機を作成することです。これでも完全に確実なわけではありません。7〜8回呼び出された場合でも、プレイブックの実行には20分以上かかります。
この環境に関するいくつかの事実は次のとおりです。
新しいインストールはすべて公式のISO DVDからのものです。すべてのサーバーはhyper-v 2012ゲストですこの問題のあるすべてのサーバーはCentOS 7.xです
問題と実際の解決策の実際の出力は次のとおりです。
間違い:
fatal: [voltron]: UNREACHABLE! => {"changed": false, "msg": "All items completed", "results": [{"_ansible_item_result": true, "item": ["rsync", "iotop", "bind-utils", "sysstat.x86_64", "lsof"], "msg": "Failed to connect to the host via ssh: Shared connection to voltron closed.\r\n", "unreachable": true}]}
sshdへの変更の1つの例:
- name: Configure sshd to disallow root logins for security purposes on CentOS and Redhat 7x servers.
lineinfile:
backup: yes
dest: /etc/ssh/sshd_config
regexp: '^(#PermitRootLogin)'
line: "PermitRootLogin no"
state: present
when: (ansible_distribution == "CentOS" or "RedHat") and (ansible_distribution_major_version == "7")
notify: sshd reload Linux 7x
次のハンドラ:
- name: sshd reload Linux 7x
systemd:
state: restarted
daemon_reload: yes
name: sshd
最後に、この問題を解決するための私のゲットー修正:
- name: Wait a bit on CentOS/Redhat 7x servers to ensure changes don't mess up ssh and screw up further plays.
pause:
seconds: 90
when: (ansible_distribution == "CentOS" or "RedHat") and (ansible_distribution_major_version == "7")
私が思いついた方法よりも優れた解決策が必要であり、他のすべての人がこれに遭遇し、それに耐えることも信じがたいです。これを防ぐためにCentOS 7.xサーバーで構成する必要があるものはありますか?これに対処するために必要なansibleに何かがありますか?最初の失敗時の再生ごとの複数のssh試行など
前もって感謝します!
Restart=on-failure
ますか?もしそうなら、終了ステータスは何でしたか?また、sshdはエラーメッセージをログに記録しませんでしたか?
sshd
してみましたが、接続はどうなりますか?またControlMaster
、AnsibleでSSH を使用していますか?ansible.cfgで有効にできssh_args = -o ControlMaster=auto -o ControlPersist=60s
ます。