问题描述
在AWS上部署了Docker EE集群,选择了直接从AWS Marketplace获取的包:Docker EE for AWS(标准/高级)- BYOL。集群已成功在AWS上启动和部署。
然而,在部署了一些UCP堆栈之后,出现了一个非常奇怪的问题:管理节点之间无法相互通信,失去了Swarm内的一致性,而且docker info
命令显示它们已经退出了Swarm集群。
AWS的AutoScaling组启动了新的管理节点加入Swarm集群,但新启动的管理节点在几分钟内被终止,因为它们同样无法成为Swarm的参与者。实际上,AutoScaling组陷入无限循环,不断启动新的管理节点,终止旧的管理节点。
更糟糕的是,用户失去了Docker服务中的数据,没有恢复数据的方式。
解决方案
请注意以下操作可能涉及Docker EE和AWS的特定设置,如果遇到问题请及时联系官方支持。
最佳解决方案
根据您的描述,问题可能出在AWS的AutoScaling组和Docker Swarm配置之间的不同步,以及AutoScaling的默认超时设置在Docker Swarm管理节点中不适用。
此外,根据您提供的信息,EE CloudFormation模板中默认的健康检查配置可能不适合您的情况。即使管理节点运行并稳定,健康检查仍然失败,导致AutoScaling组尝试启动新的管理节点。新启动的管理节点无法成为集群的参与者,并很快处于终止状态。
检查AutoScaling组配置
首先,您需要检查AutoScaling组的配置,确保其适用于Docker Swarm的需求。以下是一些可能的操作步骤:
1. 登录到AWS管理控制台,并找到您的AutoScaling组。
2. 检查AutoScaling组的启动配置,确保它们与Docker Swarm的需求相匹配。特别注意CPU、内存和网络配置。
3. 确保AutoScaling组的健康检查设置与Docker Swarm的状态检查相适应。您可能需要调整健康检查的频率和超时设置。
调整Docker Swarm配置
考虑到您使用的是Docker EE,您可能需要检查Swarm配置是否与AutoScaling组的设置相匹配。以下是一些可能的操作步骤:
1. 登录到Docker EE集群的管理节点。
2. 检查Swarm配置,确保节点之间的通信设置正确。特别注意通信端口和协议。
3. 调整Swarm节点的健康检查设置,确保它们能够与AutoScaling组的健康检查协同工作。
寻求官方支持
如果您尝试了上述步骤仍然无法解决问题,强烈建议您联系Docker和AWS的官方支持。他们可以为您提供更具体的指导,并帮助您解决集群一致性问题和数据丢失问题。
请注意,由于Docker EE和AWS的特定性,上述解决方案可能需要根据您的实际情况进行调整和扩展。如果您不确定如何操作,请务必在操作之前备份重要数据,并在做出任何更改之前咨询官方支持。
总结
在部署Docker Swarm集群时,确保AWS的AutoScaling组和Docker Swarm配置之间的一致性非常重要。通过调整AutoScaling组的设置和Swarm配置,您可以解决管理节点失去一致性的问题,避免数据丢失和集群混乱。
请牢记,技术细节可能因Docker EE和AWS版本而异,因此在进行任何更改之前,请务必查阅官方文档和支持资源。