问题标签 [leader-election]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
2128 浏览

redis - 使用集群设置在 Redisson 和 Lettuce 之间挑选 Redis

我正在考虑在我的应用程序服务器中使用LettuceRedisson Java 客户端(以连接到 Redis)。我无法从在一个共同地方尝试过两者或其中一个的人那里找到两者的适当比较。我看到的唯一详细比较是这里和其他一些链接,它们都是由Redisson自己发布的。我发现的另一个链接是这个SO帖子,它没有得到很好的接收。

我想听听那些实际消费过这两个或任何一个客户的人的意见,他们的经验/用例以及利弊是什么。我目前有一个集群的 Redis 设置,我正在使用生菜。生菜达到了我想要的效果。然而,在故障转移时发现集群中的新节点有一些痛点。我在这个SO 线程中提出了这个问题,并且能够按照答案中的说明解决它。从积极的方面来说,我发现与 Redisson 的文档相比,Lettuce 文档更清晰、更易于理解。

我主要考虑迁移到Redisson,因为我希望通过 Redis使用 Redisson 的 RedLock 实现来在我的应用服务器的多个实例之间进行领导者选举。Lettuce 没有提供它的实现。因此,开箱即用的唯一选择是 Redisson。在这种情况下,我还必须完全摆脱生菜和单独的 Redisson。Redisson 如何支持 Redis 集群部署。我想知道 Redisson 是否已报告/未决故障转移时集群节点发现的问题(我在他们的repo中没有看到任何问题)。我还阅读了有关该库体积庞大且不如 Lettuce 轻量级的担忧。

鉴于上述担忧和我已经掌握的知识,我想知道关于使用这两个客户的评论,以帮助我做出决定。

谢谢

0 投票
0 回答
91 浏览

apache-curator - 关于 Apache Curator Leader 选举的问题

我正在构建一个分布式应用程序,其中一组进程(在不同的机器上运行)一起工作。每个进程都在自己的一组“资源”上工作(并且进程之间不共享资源)。当应用程序启动时,我需要在进程之间分配资源池,以便它们可以独立工作。为了进行资源分配,我正在考虑使用 Apache Curator 的 Leader Election 配方。

一旦一个进程被选为领导者,它将进行资源分配,然后剩余的进程可以在分配的资源上工作。当领导者在做工作时,其他进程必须被“阻塞”。非领导进程的策展人行为是什么?他们会立即从领导者选举 api 中获得失败还是被阻止?

0 投票
1 回答
67 浏览

netlogo - NetLogo:如果条件为真,让海龟直接链接

我正在尝试在 netlogo 中实现 YOYO 领导者选举算法,该算法的第一步是将链接(直接链接)从最小值定向到最大值,但仅限于邻居之间!我试过命令

这会创建从 min 到 max(邻居)的直接链接,但也会创建从 max 到 min(邻居)的直接链接,我不知道出了什么问题 :( 这是一个屏幕截图,如果您注意到从 0 到 2的直接链接还有从 2 到 0,我的目标是只有从 0 到 2

0 投票
0 回答
186 浏览

apache-kafka - 分区领导者重新平衡后,KafkaStreams 停止消费分区

我们已经试验了一个可能由参数 引起的问题,该参数auto.leader.rebalance.enable在代理上默认设置为 true。

具体来说,当自动重新平衡发生时,例如在代理重新启动后,一些分区领导者将被移动以匹配首选领导者。在此事件之后,一些有状态的 Kafka Streams 应用程序阻塞在其领导者已移动的源分区上,并且消费者延迟开始增长。

这是一个已知问题吗?为什么应用程序收不到领导者更换的信息?

如果我们需要执行代理的滚动重启,我们发现的战术解决方案是:

  1. 停止有状态的应用程序
  2. 执行代理滚动重启。
  3. 等待 5 分钟(默认值),直到发生自动领导者重新平衡
  4. 启动有状态的应用程序。

我们正在使用Confluent Platform Community 5.2.2,部署在 prem 集群上的 3 个节点上。

我们正在尝试重现测试环境中发生的事情,但没有成功。是否有可能受到集群负载的影响,在测试中要低得多?

提前致谢!乔治奥

0 投票
0 回答
187 浏览

kubernetes - 如何在操作员框架中使用leader-with-lease选举pod成为leader后执行功能?

我正在尝试运行一个容器的 3 个 pod/副本,我希望其中一个作为领导者运行,如果该特定 pod 停止或失败,其他非领导者运行的 pod 应立即领导继续执行这是领导者吊舱所必需的。只是为了清楚其他 pod 会执行,但是领导 pod 一旦获得领导权,就会执行一些其他 pod 不会执行的额外代码。这是我关注的文档的链接。

这是我运行的一个测试示例,我在运行容器应该运行的实际代码时遇到问题。

leader pod的日志如下:

我希望 pod 能够运行到“我是领导者”打印语句并执行我希望领导者 pod 执行的任务。即使我可以在某个地方传递一个函数,一旦它获得领导权就可以执行它,这对我来说没问题。目前,我在某处犯了错误,在 3 个 pod 之一获得领导权后无法做任何事情。

0 投票
1 回答
359 浏览

c# - 如何使用 Consul 一次在一台机器上执行同步任务?

我有一个有 10 台机器的系统,我需要在每台机器上按同步顺序逐一执行特定任务。基本上只有一台机器应该在特定时间执行该任务。我们已经Consul用于其他目的,但我在想我们也可以这样Consul做吗?

我阅读了更多关于它的内容,看起来我们可以使用领事选举领导者,每台机器都会尝试获取锁,完成工作,然后释放锁。一旦工作完成,它将释放锁,然后其他机器将再次尝试获取锁并执行相同的工作。这样一来,一切都将一次同步一台机器。

我决定使用这个已经内置了这个功能的C# PlayFab ConsulDotNet ,但是如果有更好的选择,我也愿意接受。我的代码库中的以下Action方法几乎通过观察者机制在每台机器上同时调用。

现在在上述方法中,我需要做以下事情 -

  • 尝试获取锁。如果您无法获得锁,请等待它,因为其他机器可能在您之前抓住了它。
  • 如果获得锁,则 DoTheWork()。
  • 工作完成后,释放锁,以便其他机器可以获取锁并执行相同的工作。

想法是所有 10 台机器都应按DoTheWork()同步顺序一次一台。基于这个博客和这个博客,我决定修改他们的例子来适应我们的需要——

下面是我的LeaderElectionService课:

下面是我的LeaderChangedEventArgs课:

在上面的代码中,我的用例可能不需要很多部分,但想法是相同的。

问题陈述

现在在我的Action方法中,我想使用上面的类并在获得锁后立即执行任务,否则继续等待锁。一旦工作完成,释放并销毁会话,以便其他机器可以抓住它并完成工作。我对如何在下面的方法中正确使用上面的类有点困惑。

我最近开始使用,C#所以这就是为什么有点困惑如何通过使用Consul和这个库在生产中有效地工作。

更新

我根据您的建议尝试了下面的代码,我想我之前也尝试过,但是由于某种原因,一旦它进入这一行 await distributedLock.Acquire(cancellationToken);,它就会自动返回到 main 方法。它永远不会前进到我的Doing Some Work!打印输出。CreateLock真的有效吗?我期待它会data/lock在 consul 上创建(因为它不存在),然后尝试获取它的锁,如果获得,然后做工作,然后为其他机器释放它?

0 投票
1 回答
2659 浏览

kubernetes - kube-controller-manager 和 kube-scheduler leaderelection 丢失 Crashloopback

Kubernetes kube-controller-manager 和 kube-scheduler 不断重启。以下是 pod 日志。

0 投票
1 回答
131 浏览

algorithm - 这种容忍链路故障的两节点系统的领导者选举算法是否可以被认为是一项重大创新?

我和我的团队发明了一种方法来解决工程中的双节点系统的裂脑问题,并发表了一篇论文。我们不是一个知名的团队,但是我们觉得这个方法很新很实用,所以想和大家讨论一下,看看大家是否认为这是一个重大的创新。

我们试图解决的问题

让我先描述一下我们要解决的问题。在双节点分布式系统中,如果节点之间的链路发生故障,并且没有第三个节点,那么由这两个节点组成的系统就无法同时进行可用性(活跃性)和一致性(安全性)的领导者选举。这使得设计一个两节点的分布式存储或数据库系统变得不可能。

为了解决这个问题,工程师想了很多办法。有些在两个节点之间使用更可靠的硬件来避免链路故障,有些则使用第三个节点或共享介质进行仲裁。但这对硬件提出了额外的要求。

我们提出的解决方案

在本文中,我们提出了一种新方法,该方法既不依赖于额外的第三节点或共享介质,也不依赖于可靠的链接。这种方法称为“基于级别的领导者选举算法”。但是这个名字在论文中没有使用。

假设这是一个部分同步(或最终同步,或半同步)的分布式存储和数据库系统,由S个服务器节点组成。有 C 个客户端节点访问它们。

  • 当 S>=3 时,S 个服务器节点可以使用 Paxos、Raft 等任何一种统一的共识算法来选举领导者。在这种情况下,可以保证可用性(活跃性,leader 最终会被选举出来)和一致性(安全性,任何时候都没有不同的leader)。
  • 当 S<=2 且 C>=1 时,客户端节点也将参与领导者选举过程。只要客户端节点数C>=1,总节点数不少于3个,在部分同步系统中可以采用统一共识算法选举Leader。但是,只有服务器节点有投票权和被选举权,而客户端节点只有投票权,没有被选举权。
  • 当 S<=2 且 C=0 时,虽然参与 Leader 选举过程的节点总数少于 3 个,因此没有一种算法可以保证可用性和一致性,但也完全没有来自客户端节点的请求!我们可以选择两个服务器节点中的任何一个作为领导者,因为不需要可用性或一致性!

要求

希望您能帮助我们看看这种方法是否可以算是一项重大创新。此外,我们计划将基于级别的领导者选举原语添加到当前的存储和数据库请求/响应协议中。如果有人有兴趣,请告诉我。

0 投票
0 回答
24 浏览

kubernetes - 以主备模式运行服务

我想将两个用 Java 编写的工作应用程序部署到一个 Kubernetes 集群以侦听外部提要,但我只希望其中一个应用程序向下游消费者发出事件。出于容错的原因,我想要两个实例。

我查看了 Kubernetes 文档,但没有看到任何明显的方法可以使用 Kubernetes 做到这一点。也许我遗漏了一些东西或滥用了 Kubernetes 模型,但我确实相信在二进制星型配置中运行应用程序是一种常见的模式。我正在考虑只使用 Zookeeper,但希望 Kubernetes 有一条更简单的路径。

0 投票
0 回答
63 浏览

apache-kafka - Kafka控制器如何选举leader?有没有它使用的算法?

kafka控制器负责选择每个topic下partition的leader和follower,现在它是如何选择leader的,依据是什么?