0

我使用 Cloud Formation 模板在 AWS 中创建了一个 3 节点集群。我在私有子网中有 EC2 实例,在公共子网中有 ELB,并启用了“AssociatePublicIpAddress”配置。配置安全组以允许 ELB 和 EC2 实例之间进行必要的通信。在最初创建堆栈时,EC2 实例能够加入集群并且工作正常,但是当我停止 EC2 实例以及稍后再次启动它时,节点没有加入集群。任何解决问题的方向都值得赞赏。

[更新]:这是附加信息

ELB 类型:AWS::ElasticLoadBalancing::LoadBalancer,方案为“面向互联网”

ASG:是的,使用 ASG,MinSize=1、MaxSize=3、DesiredCapacity=3

HealthCheck 类型:尝试了设置在 ASG 级别的 ELB 和 EC2。

HealthCheck 设置:在下面找到有关 HealthCheck 设置的详细信息。

 "HealthCheck": {
          "Target": "HTTP:7997/",
          "HealthyThreshold": "2",
          "UnhealthyThreshold": "10",
          "Interval": "60",
          "Timeout": "30"
        }
4

1 回答 1

0

如果 EC2 实例位于“私有子网”中 - 它们可能无法连接到托管集群运行所需的所有 AWS 服务端点。由于他们在第一次启动时加入,这意味着他们可以与 DynamoDB 实例对话。由于他们在停止/启动后没有加入,所以很多事情可能是错误的。如果使用了示例模板,该行为就没有多大意义——如果您“停止”一个 EC2 实例,它应该被终止,然后由 ASG 重新启动。如果这没有发生,那么与 ML 无关的东西配置不正确。几种调试方法。

1) 暂时使用公共 IP 地址重新制作集群,但没有其他更改,看看是否可以解决问题。--> 如果是这样,那么与 AWS 服务的连接可能是一个问题,您可能需要创建 NAT 实例或 VPN 端点。

2) 确定为什么停止实例不会触发 ASG 终止它。(为 ASG 启用云监视日志并查看其消息)

3) 创建一个 SNS 主题,通过电子邮件或其他方式订阅它,并将 SNS 主题 ARN 提供给指定参数中的 CF 脚本。这其中有大量的细节,用其他方法很难找到。

4) 查看所有 EC2 实例上的日志文件,包括系统日志 (/var/log/* )

5) 检查 DynamoDB 表,看看它是否随着您的实例状态变化而更新。

6) 检查在初始安装时创建的 cron 作业的行为——它应该轮询集群中所有节点的 EC2 状态并更新 DynamoDB。

于 2018-01-21T13:38:39.120 回答