我們使用ansible將多個節點配置爲一個集羣。這些機器是在定製的AWS類似基礎設施上創建的實例。 我們在不同的劇本上有大約100個任務,並且它們在每個節點上執行。Ansible **零星**失敗,無法訪問主機 - 無法通過ssh連接到主機
TASK [common : install basic packages] *************************
fatal: [fqdn.for.a.node]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh.", "unreachable": true}
輸出與-vvv:
的問題是,我們得到了零星的主機不可達的錯誤和劇本的執行與以下故障停止
TASK [common : install basic packages] *******************************
task path: /jenkins/workspace/Cluster-Deployment/91/roles/common/tasks/install-basic-packages.yml:1
<fqdn.for.a.node> ESTABLISH SSH CONNECTION FOR USER: root
<fqdn.for.a.node> SSH: EXEC ssh -C -q -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o 'IdentityFile="id_rsa"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=root -o ConnectTimeout=600 -o ControlPath=/home/turkenh/.ansible/cp/ansible-ssh-%h-%p-%r fqdn.for.a.node '/bin/sh -c '"'"'(umask 77 && mkdir -p "` echo $HOME/.ansible/tmp/ansible-tmp-1466523588.96-210828884892875 `" && echo ansible-tmp-1466523588.96-210828884892875="` echo $HOME/.ansible/tmp/ansible-tmp-1466523588.96-210828884892875 `") && sleep 0'"'"''
failed: [fqdn.for.a.node] (item=[u'unzip']) => {"item": ["unzip"], "msg": "Failed to connect to the host via ssh.", "unreachable": true}
這是我們ansible.cfg文件:
[defaults]
forks = 50
sudo_flags=-i
nocows=1
# do not check host key while doing ssh
host_key_checking = False
# use openssh not paramiko
transport = ssh
private_key_file = id_rsa
remote_user = root
請看我們下面的注意事項:
當我們嘗試ping(與ansible平模塊,無法ping通shell命令),該主機與失敗後ansible正確的,它會引發同樣的錯誤,但是如果我們等待大約一分鐘左右,就可以ping它。
我們可以說我們定製的基於AWS的基礎架構是,在某種程度上,可能會偶爾出現一些零星的連接問題,這不會比1-2分鐘更長的時間。
嘗試設置超時參數爲ansible.cfg中的大數字(即600),但它沒有幫助。
我們正在調配節點ubuntu,redhat和suse,但無論操作系統如何,我們都會以20%的概率獲得此錯誤。
在我的劇本中,它並不是相同或相似的任務,它在失敗時只是隨機失敗。 (有時在設置模塊,有時在封裝模塊,...)
我們ansible版本是2.1(PIP與安裝),工作站的操作系統是Ubuntu的14.04
那麼,我們需要什麼對某個人來說,如果你看到一個節點無法到達,請不要放棄失敗。在放棄無法訪問之前,請等待一段時間或重試n次。我們應該怎麼做?
如果在啓動新服務器的過程中發生這種情況,請考慮使用'wait_for'。我們在啓動新的雲服務器之後使用它來等待ssh變得可用,然後繼續處理這些新服務器的任務。 –
實際上,我已經有一個wait_for任務,它在創建AWS實例後立即運行,並等待ssh準備就緒。我在後面的步驟中遇到了這個問題,即在安裝了一些軟件包/啓動一些服務之後等等。正如我上面提到的,失敗的任務在不同的運行中不相同。但是,我可能會考慮向每個等待ssh的角色添加一個pre_任務,因爲問題似乎發生在角色轉換之間。謝謝! – turkenh