2

我正在尝试在我的分布式 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 算法相同的问题。

我希望使用任何算法来实现领导者选举,但不引入任何新流程。

4

1 回答 1

0

查看这篇博客文章,了解如何使用 sidecar 模式和 nodejs 应用程序实现这一目标

于 2021-01-09T17:18:39.513 回答