Вопрос или проблема
Во время фазы Сбор фактов соединение блокируется на неопределенный срок (это также происходит, например, когда я пытаюсь запустить сервисы на узлах). У меня настроено 4 узла одинаковым образом, и к ним всем можно получить доступ через ping, но один из них вызывает блокировку соединения.
Инвентарь (inventory/dev)
[master]
headnode ansible_host=xxx.xx.xx.xxx
[workers]
node001 ansible_host=node001
node002 ansible_host=node002
node003 ansible_host=node003
node004 ansible_host=node004
[all:vars]
ansible_user=root
[workers:vars]
ansible_ssh_common_args="-o [email protected]"
Ping (node00[1-4])
node00X | УСПЕШНО => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}
headnode | УСПЕШНО => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}
Задача
- name: Статус Рабочих
hosts: workers
gather_facts: true
tasks:
- name: hostname
command: hostname
register: hostname
- name: hostname workers
debug: msg="{{ hostname }}"
Проблема:
ansible-playbook -i inventory/dev playbooks/test.yml
TASK [Сбор фактов] ***************************************************************************************************************************************************************************************
ok: [node002]
ok: [node003]
ok: [node001]
Узлы 001 до 003 корректно возвращают ответ, но узел 004 застревает на неопределенный срок на следующей строке:
<node004> УСТАНАВЛИВАЕТ SSH СОЕДИНЕНИЕ ДЛЯ ПОЛЬЗОВАТЕЛЯ: root
<node004> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="root"' -o ConnectTimeout=10 -o [email protected] -o 'ControlPath="/home/user/.ansible/cp/ba0c33ed59"' -tt node004 '/bin/sh -c '"'"'/usr/libexec/platform-python /root/.ansible/tmp/ansible-tmp-1731335666.477472-3501-262350450854534/AnsiballZ_setup.py && sleep 0'"'"''
--> застрял на неопределенный срок <--
Я не могу найти причину, почему только узел 004 застревает в выполнении, так как все узлы настроены одинаково и ping работает для всех из них.
Ответ или решение
Ситуация, которую вы описываете, связана с проблемами подключения к одному из узлов вашего кластера, что вызывает блокировку выполнения Ansible во время фазы сбора фактов. Вы привели исчерпывающие данные о конфигурации и поведении системы, что позволяет проанализировать проблему более детально.
Основание проблемы
Как вы указали, узел node004
не отвечает, в то время как другие узлы успешно проходят этап сбора фактов. Это может указывать на несколько потенциальных проблем, связанных с конфигурацией узла, сетевыми настройками или SSH-соединением.
Возможные причины и решения
-
Проблемы с SSH-клиентом:
- Убедитесь, что SSH-сервер на
node004
запущен, и проверьте его состояние командой:systemctl status sshd
- Проверьте наличие блокировок в конфигурации SSH, таких как
AllowUsers
, в файле/etc/ssh/sshd_config
.
- Убедитесь, что SSH-сервер на
-
Проблемы с сетью:
- Проверьте, доступен ли узел
node004
для подключения. Используйте команду:ssh root@node004
- Проверьте, нет ли правил брандмауэра, блокирующих соединение SSH, с помощью:
firewall-cmd --list-all
- Убедитесь, что
node004
не находится в состоянии перегрузки сети. Для этого можно использовать командуtop
илиhtop
.
- Проверьте, доступен ли узел
-
Конфигурация Ansible:
- Освободите параметр
ansible_ssh_common_args
, изменив его в инвентаризации. Попробуйте убрать или изменить параметры, чтобы упростить команду SSH, например, отключитьControlMaster
. - Вы можете также установить таймаут подключения:
[all:vars] ansible_ssh_common_args="-o ConnectTimeout=30"
- Освободите параметр
-
Проверка логов:
- Загляните в логи SSH на
node004
по адресу/var/log/auth.log
или/var/log/secure
, чтобы найти возможные сообщения об ошибках, которые могут указать на причину проблемы.
- Загляните в логи SSH на
-
Проблемы с Python или зависимостями:
- Убедитесь, что Python доступен и корректно установлен на
node004
. Запустите:/usr/libexec/platform-python --version
- Проверьте, что необходимые модули для выполнения
AnsiballZ_setup.py
отсутствуют.
- Убедитесь, что Python доступен и корректно установлен на
-
Ограничения на стороне сервера:
- Иногда политика безопасности на сервере может ограничивать выполнение определенных команд от имени root. Убедитесь, что конфигурация SELinux или AppArmor не мешает выполнению Ansible.
Заключение
После проверки и устранения вышеперечисленных проблем, попробуйте снова выполнить вашу Ansible команду. Если node004
по-прежнему вызывает блокировку, рассмотрите возможность замены его на другой узел как временное решение, чтобы исключить возможные аппаратные сбои.
Если все предыдущие шаги не оправдали надежд, также рассмотрите возможность временного отключения node004
от кластера для достижения стабильного выполнения Ansible на других узлах.
Настоятельно рекомендуется документировать все изменения и тесты, чтобы упростить процесс диагностики и устранения неполадок в будущем.
Если у вас есть дальнейшие вопросы или требуется помощь, не стесняйтесь обращаться за поддержкой.