Назад | Перейти на главную страницу

Невозможно вернуть приложение в ELB: экземпляр не прошел последовательно настроенное количество проверок работоспособности HealthyThreshold

Установка экземпляра EC2 обратно в ELB работала в 90% случаев. К сожалению, в последнее время регулярное развертывание не удается со следующей ошибкой:

15:51:59 TASK: [Start the app] ********************************************************* 
15:51:59 changed: [app-01a] => {"changed": true, "enabled": true, "name": "app", "state": "started"}
15:51:59 
15:51:59 TASK: [Wait for the app to be ready] ****************************************** 
15:52:17 ok: [app-01a] => {"changed": false, "elapsed": 17, "path": null, "port": 8080, "search_regex": null, "state": "started"}
15:52:17 
15:52:17 TASK: [Check health check on localhost] *************************************** 
15:52:22 ok: [app-01a] => {"cache_control": "must-revalidate,no-cache,no-..."status": 200,...
15:52:22 
15:52:22 TASK: [Exit if health check fails] ******************************************** 
15:52:22 skipping: [app-01a]
15:52:22 
15:52:22 TASK: [Register restapp instance back into load balancer] ********************* 
15:52:39 failed: [app-01a -> 127.0.0.1] => (item=app-ELB) => {"failed": true, "item": "app-ELB"}
15:52:39 msg: The instance i-b1234567 could not be put in service on LoadBalancer:app-ELB. Reason: Instance has not passed the configured HealthyThreshold number of health checks consecutively.
15:52:39 
15:52:39 FATAL: all hosts have already failed -- aborting

Это код Ansible:

- name: Start the app
  service: name={{ app_name }} state=started enabled=yes

- name: Wait for the app to be ready
  wait_for: port={{ app_port }} state=started timeout=120

- name: Check health check on localhost
  action: uri url=http://localhost:8081/healthcheck
  register: webpage

- name: Exit if health check fails
  command: /bin/false
  when: webpage.status != 200

- name: Register restapp instance back into load balancer
  sudo: false
  local_action:
    module: ec2_elb
    instance_id: "{{ appInstanceId }}"
    ec2_elbs: "{{ item }}"
    state: 'present'
    region: "eu-west-1"
  with_items: appLoadBalancer

Настройки ELB:

Вероятно, вам нужно изменить цель ping с HTTP: 8081 / pin (обрезано) на HTTP: 8081 / healthcheck, как в вашей игре с Ansible.

Это ожидаемое поведение AWS. Если вы исправите свое приложение, ELB повторно включит трафик для вашей конечной точки. Попытка принудительно запустить автономный хост идет вразрез с тем, что пытаются выполнить проверки работоспособности.

Вы не можете сделать это в консоли ELB, и даже удаление и повторное добавление хоста потребует от вас дождаться прохождения проверки работоспособности, прежде чем будет передан трафик.

Если вы хотите, чтобы хост возвращался к работе быстрее, измените допуски проверки работоспособности.