Мы используем возможность для размещения нескольких узлов в качестве кластера. Машины представляют собой экземпляры, созданные в пользовательской подобной инфраструктуре AWS. У нас есть около ста задач на разных книжках, и они выполняются на каждом узле.Ansible ** спорадически ** терпит неудачу с недоступным хостом - Не удалось подключиться к хосту через ssh
Проблема заключается в том, мы получаем спорадический хост ошибку и выполнение PlayBook прекращается со следующей неудачей:
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 (с помощью несанкционированного модуля ping, а не команды ping shell), этот хост с незаменимым правом после сбоя, он выдает ту же ошибку, но если мы подождем около минуты или около того, мы можем пинговать его.
Что мы можем сообщить о нашей пользовательской инфраструктуре, основанной на AWS, заключается в том, что время от времени могут возникать спорадические проблемы подключения, которые не занимают больше времени, чем говорят 1-2 минуты.
Пробовал параметр таймаута установки для большого числа (то есть 600) в ansible.cfg, но это не помогло.
Мы предоставляем узлы ubuntu, redhat и suse, но независимо от ОС, мы получаем эту ошибку примерно на вероятность 20%.
Это не то же самое или аналогичные задачи в моей плей-книжке, где он терпит неудачу, это просто случайный случай. (Иногда в модуле настройки, иногда в модуле пакета, ...)
Наша анзибль версия 2.1 (устанавливается вместе с ПУМ), ОС рабочей станции является Ubuntu 14,04
Итак, что нам нужно как-то, сказать, невозможно, если вы видите узел недоступным, пожалуйста, не сдавайтесь с ошибкой. Подождите некоторое время или повторите попытку n раз, прежде чем отказаться от недостижимого. Как мы можем это сделать?
Если это происходит в процессе вращения новых серверов, рассмотрите возможность использования 'wait_for'. Мы используем его после запуска новых облачных серверов, чтобы ждать, пока ssh станет доступным, а затем приступим к выполнению задач для этих новых серверов. –
На самом деле у меня уже есть задача wait_for, которая запускается сразу после создания экземпляров AWS и имеет wait_for, пока ssh не будет готов. Я сталкиваюсь с проблемой на более поздних этапах, то есть после установки некоторых пакетов/запуска некоторых служб и т. Д. И, как я уже упоминал выше, неудачная задача не одинакова для разных запусков.Но я могу подумать о добавлении pre_task к каждой роли, которая ждет, пока ssh не будет готова, потому что проблема, похоже, происходит между перераспределениями роли. Спасибо! – turkenh