我正在尝试在我的分布式 node.js 应用程序中实现领导者选举算法。我使用 Kubernetes 作为容器管理器并部署 docker 容器。我没有在不同 pod 中运行的其他应用程序实例的主机和端口的详细信息。
Kubernetes 已经使用领导者选举算法一次选择一个领导者,但我的应用程序在容器和 pod 内,它不知道我是否是领导者。还有一个示例代码可用于了解谁是当前领导者。
https://github.com/kubernetes-retired/contrib/tree/master/election
此代码有助于了解哪个容器是领导者,但它需要一些特殊权限才能调用 kubernetes API。
Bully/Ring 算法可以是一个解决方案,但由于限制不使用任何队列/集中式服务,如 redis 或 zookeeper,因为我们需要另一个进程来运行这些,但我可以使用共享文件系统,因为它不需要监控一个额外的过程。
不确定是否可以在不运行新进程的情况下使用 redis/zookeeper 并且可以在应用程序本身内完成。
我如何使用该应用程序实现此解决方案,或者通过 ping 它们检查它是否已关闭,然后使自己掌握。在这个过程中也会出现很多竞争条件。
我尝试过Kubenetes的leader算法来选举leader,但是由于API的访问受限,无法使用。
尝试过 Bully 算法,但由于容器位于不同的 pod 中,它们彼此不知道。
尝试了 Ring algorithm ,但与 Bully 算法相同的问题。
我希望使用任何算法来实现领导者选举,但不引入任何新流程。