Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon ec2 CoreOS、Fleet和Etcd2容错_Amazon Ec2_Containers_Coreos_Etcd_Fleet - Fatal编程技术网

Amazon ec2 CoreOS、Fleet和Etcd2容错

Amazon ec2 CoreOS、Fleet和Etcd2容错,amazon-ec2,containers,coreos,etcd,fleet,Amazon Ec2,Containers,Coreos,Etcd,Fleet,我有一个23节点的集群,在AWS上跨4个可用性区域运行CoreOS Stable 681.2.0。所有节点都运行etcd2和flannel。在23个节点中,8个是专用的etcd2节点,其余的专门指定为etcd2代理 集群计划使用3个nginx plus容器、一个私有Docker注册表、SkyDNS和4个应用程序容器。应用程序容器向etcd2注册,nginx容器接收任何更改,呈现必要的文件,最后重新加载 在单个etcd2节点因任何原因不可用之前,这一切都能正常工作。 如果投票etcd2成员群失去了

我有一个23节点的集群,在AWS上跨4个可用性区域运行CoreOS Stable 681.2.0。所有节点都运行etcd2和flannel。在23个节点中,8个是专用的etcd2节点,其余的专门指定为etcd2代理

集群计划使用3个nginx plus容器、一个私有Docker注册表、SkyDNS和4个应用程序容器。应用程序容器向etcd2注册,nginx容器接收任何更改,呈现必要的文件,最后重新加载

在单个etcd2节点因任何原因不可用之前,这一切都能正常工作。

如果投票etcd2成员群失去了与其他投票etcd2成员的连接,则调度到机队的所有服务都会变得不稳定。定时服务在我不干预的情况下开始停止和启动

作为测试,我开始停止承载投票etcd2节点的EC2实例,直到仲裁丢失。在第一个etcd2节点停止后,上述症状开始出现。在第二个节点之后,服务变得不稳定,没有明显的变化。然后,在第三次会议停止后,法定人数丧失,所有机组都没有安排。然后,我再次启动了所有三个etcd2节点,在60秒内,集群恢复到稳定状态

随后的测试产生了相同的结果

我是否遇到了etcd2、fleet或CoreOS中的已知错误


即使etcd因任何原因不可用,我是否可以修改一个设置以将单位安排在节点上?

我也经历过同样的事情。在我的例子中,当我运行一个特定的单元时,它导致了一切爆炸。预定的和运行良好的单元突然丢失,没有任何通知,甚至机器也从集群中退出

我仍然不确定确切的问题是什么,但我认为这可能与etcd和etcd2有关。我在单元文件中依赖于etcd.service,这(我想,不确定)导致CoreOS在etcd2.service已经运行时尝试启动etcd.service。在我的案例中,这可能会导致冲突,并将etcd单元和机器的注册表弄乱


类似的情况可能会发生在您身上,因此我建议您检查每个主机是否正在运行etcd或etcd2,并检查您的单元文件,以确定它们依赖于哪一个。

您有8个专用投票etcd2节点(这些主机上没有运行应用程序)?8是一个奇怪的数字,但不是问题(5、7或9会更好)。您能否共享示例投票etcd2和示例代理etcd2的配置?当一些受影响的主机发生不稳定时,日志将非常有用(journalctl--system)。每个代理etcd2能否到达所有投票etcd2?您的投票etcd2是否有可能在发现过程中降级为代理?事实上,当使用ectd2时,所有单元和依赖项都不得要求etcd,否则将导致出错。@ericson.cepeda,请解释为什么它会导致出错。在我看来,这很棘手,但并非不可能。Etcd2具有向后兼容性支持,因此运行Etcd2的新节点可以将现有集群与运行etcd的节点连接起来(如果我没有弄错的话)。但是,在调度单元时,当单元需要etcd时,可能会导致冲突。我认为一种解决方法是将有关etcd版本的元数据应用于CoreOS节点,并在运行单元文件中指定的etcd版本的节点上调度单元。是的,节点仍然可以通信,但正如您所说,在同一节点上运行具有不同etcd版本的单元会导致冲突,事实上:这种行为的示例: