tur*_*enh 2 openssh amazon-web-services ansible ansible-playbook ansible-2.x
我们正在使用ansible将多个节点配置为一个集群。这些机器是在自定义AWS类似基础设施上创建的实例。我们在不同的剧本上有大约一百个任务,它们在每个节点上执行。
问题是,我们收到零星的主机无法访问的错误,并且由于以下失败而停止了剧本的执行:
TASK [common : install basic packages] *************************
fatal: [fqdn.for.a.node]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh.", "unreachable": true}
Run Code Online (Sandbox Code Playgroud)
用-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}
Run Code Online (Sandbox Code Playgroud)
这是我们的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
Run Code Online (Sandbox Code Playgroud)
请参阅下面的注释:
当我们尝试在故障后立即使用可访问的主机对可访问的主机执行ping操作(使用ansible ping模块,而不是ping shell命令)时,它会抛出相同的错误,但是如果我们等待一分钟左右,便可以对其进行ping操作。
关于基于定制AWS的自定义基础架构,我们可以说的是,不时地可能会出现一些零星的连接问题,而这些问题所花费的时间不会超过1-2分钟。
尝试在ansible.cfg中将超时参数设置为较大的数字(即600),但没有帮助。
我们正在配置节点ubuntu,redhat和suse,但是无论操作系统如何,我们都会以20%左右的概率获取此错误。
它不是我的剧本中失败的相同或相似任务,而是随机失败。(有时在设置模块中,有时在包装模块中,...)
我们的版本是2.1(通过pip安装),工作站的操作系统是Ubuntu 14.04。
因此,我们需要以某种方式对ansible说,如果您看到一个节点不可达,请不要放弃失败。请等待一段时间或重试n次,然后再放弃无法访问的内容。我们应该怎么做?
正式回答您的问题:您可以使用来增加清单文件中的ssh尝试次数ansible_ssh_common_args="-o ConnectionAttempts=20"。为问题主机,主机组或all虚拟组(例如,在group_vars/all.yml文件中)指定它。
还有ssh_args配置选项,但是我不希望对其进行修改,因为它会覆盖ansible的默认ssh参数。
| 归档时间: |
|
| 查看次数: |
2802 次 |
| 最近记录: |