AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 624495
Accepted
pkaeding
pkaeding
Asked: 2014-08-28 08:53:46 +0800 CST2014-08-28 08:53:46 +0800 CST 2014-08-28 08:53:46 +0800 CST

为什么我的实例通过 Ansible 添加到负载均衡器时 ELB 运行状况检查失败?

  • 772

我正在尝试使用带有模块的 Ansible 剧本将 EC2 实例添加到弹性负载均衡ec2_elb器。这是应该执行此操作的任务:

- name: "Add host to load balancer {{ load_balancer_name }}"
  sudo: false
  local_action:
    module: ec2_elb
    state: present
    wait: true
    region: "{{ region }}"
    ec2_elbs: ['{{ load_balancer_name }}']
    instance_id: "{{ ec2_id }}"

但是,它通常会失败,并出现以下输出(出现冗长):

TASK: [Add host to load balancer ApiELB-staging] ****************************** 
<127.0.0.1> REMOTE_MODULE ec2_elb region=us-east-1 state=present instance_id=i-eb7e0cc7
<127.0.0.1> EXEC ['/bin/sh', '-c', 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1409156786.81-113716163813868 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1409156786.81-113716163813868 && echo $HOME/.ansible/tmp/ansible-tmp-1409156786.81-113716163813868']
<127.0.0.1> PUT /var/folders/d4/17fw96k107d5kbck6fb2__vc0000gn/T/tmpki4HPF TO /Users/pkaeding/.ansible/tmp/ansible-tmp-1409156786.81-113716163813868/ec2_elb
<127.0.0.1> EXEC ['/bin/sh', '-c', u'LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python /Users/pkaeding/.ansible/tmp/ansible-tmp-1409156786.81-113716163813868/ec2_elb; rm -rf /Users/pkaeding/.ansible/tmp/ansible-tmp-1409156786.81-113716163813868/ >/dev/null 2>&1']
failed: [10.0.115.149 -> 127.0.0.1] => {"failed": true}
msg: The instance i-eb7e0cc7 could not be put in service on LoadBalancer:ApiELB-staging. Reason: Instance has not passed the configured HealthyThreshold number of health checks consecutively.

FATAL: all hosts have already failed -- aborting

我有这样定义的 ELB 配置(也通过 Ansible):

- name: "Ensure load balancer exists: {{ load_balancer_name }}"
  sudo: false
  local_action:
    module: ec2_elb_lb
    name: "{{ load_balancer_name }}"
    state: present
    region: "{{ region }}"
    subnets: "{{ vpc_public_subnet_ids }}"
    listeners:
      - protocol: https
        load_balancer_port: 443
        instance_protocol: http
        instance_port: 8888
        ssl_certificate_id: "{{ ssl_cert }}"
    health_check:
        ping_protocol: http # options are http, https, ssl, tcp
        ping_port: 8888
        ping_path: "/internal/v1/status"
        response_timeout: 5 # seconds
        interval: 30 # seconds
        unhealthy_threshold: 10
        healthy_threshold: 10
  register: apilb

当我从笔记本电脑或服务器本身(作为本地主机)访问状态资源时,我得到了200预期的响应。在将实例添加到 ELB 之前,我还在commandAnsible 剧本中添加了一个任务,以确认应用程序已启动并正确处理请求(确实如此):

- command: /usr/bin/curl -v --fail http://localhost:8888/internal/v1/status

在我的应用程序的日志中,我没有看到任何针对状态检查资源的非 200 响应(当然,如果请求从未到达我的应用程序,它们将不会被记录)。

另一个奇怪的事情是实例确实被添加到了 ELB,而且它似乎工作正常。所以我知道,至少在某个时候,负载均衡器可以正确访问应用程序(对于状态检查资源和其他资源)。AWS 控制台显示实例运行状况良好,Cloudwatch 图表未显示任何失败的运行状况检查。

有任何想法吗?

amazon-elb
  • 2 2 个回答
  • 10244 Views

2 个回答

  • Voted
  1. Best Answer
    Ladadadada
    2014-08-28T11:11:56+08:002014-08-28T11:11:56+08:00

    改编自我之前的评论:

    从 Ansible 文档来看,有一个wait_timeout参数必须设置为高于 300 才能使其工作。(330 是安全的)。

    或者你可以降低你的interval或healthy_threshold两者,这样你就必须等待不到 300 秒。

    Yourunhealthy_threshold与 相同healthy_threshold,因此一旦 Web 服务器开始抛出 500 个响应,它将在 ELB 丢弃之前在池中停留 5 分钟。

    • 4
  2. Alexey Vazhnov
    2015-09-24T10:26:25+08:002015-09-24T10:26:25+08:00

    您可以使用 ec2_elb 选项wait: no。

    • 3

相关问题

  • ELB 中现有节点的 AWS 自动缩放问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve