问题标签 [apache-curator]

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 投票
1 回答
246 浏览

logging - Apache Zookeeper 设置的模棱两可的文档

在此链接,Official Zookeeper doc,我发现引用模棱两可。

ZooKeeper 将其数据存储在数据目录中,并将其事务日志存储在事务日志目录中。默认情况下,这两个目录是相同的。服务器可以(并且应该)配置为将事务日志文件存储在与数据文件不同的目录中。当事务日志驻留在专用日志设备上时,吞吐量会增加,延迟会减少。

它说事务日志文件应该将事务日志存储在单独的目录中。然后它说专用设备是最佳的?为什么默认将数据目录文件和事务日志文件存储在同一位置?我相信我很困惑,因为我可能不明白他们所说的“目录”是什么意思。当我听到目录时,我会想到文件夹。当他们说目录时,他们是指硬件存储设备吗?如果这些文件存储在同一设备上但在不同的文件夹中,我不希望吞吐量增加和延迟减少。如果文件存储在不同的设备上,我预计吞吐量会增加,延迟会减少。

我是否正确解释了他们的文档?仅将事务日志和数据文件存储在单独的文件夹中不会提高性能。它们仅意味着如果将它们存储在不同的硬件存储设备上,将获得这些收益,对吗?

0 投票
1 回答
1258 浏览

java - Zookeeper 中的多用户身份验证,使用来自单个 java 应用程序的 sasl

我有 zookeeper 配置,允许客户端通过 sasl(使用摘要 md5)进行身份验证。Zookeeper 配置为使用 sasl,sasl 身份验证提供程序存在于 zookeeper 配置中。我有所有用户列表的 jaas 配置。每个客户端都有自己的带有用户名和密码的 jaas 配置文件。在此配置中,一切正常 - 客户端可以使用 zookeeper。

但事情就是这样。我有一些客户端无法直接连接到 Zookeeper - 它连接并验证到单独的模块中。该模块(用 Java 编写)理解传入的请求并使用 Curator Framework 客户端与 Zookeeper 通信,然后在需要时返回结果。

Java 模块有它自己的 jaas 配置用于身份验证(用户/密码),所以基本上它可以在 zookeeper 内部作为一个用户进行身份验证 - 即使有很多用户(具有单独的用户/密码)在这个模块中进行身份验证。

我怎样才能实现java模块可以在zookeeper中验证尽可能多的用户(如果user1调用java模块,它应该在zookeeper中验证为user1,如果user2调用java模块,它应该验证user2等)

这是我尝试过的一种方法(我知道这种方法不是最好的方法,但我不是动物园管理员的专家,所以我还没有更好的主意):

  • Java 模块有许多 jaas 配置(每个用户一个)。
  • 当请求到达并且用户在 java 模块中验证自己时 - 模块选择 jaas 配置(通过将系统属性 java.security.auth.login.config 设置为指向 jaas 配置之一)
  • 模块创建新的 Curator Framework 客户端(它将为来自同一用户的后续请求缓存)
  • 模块使用新客户端对zookeeper进行操作

令我惊讶的是,sasl 身份验证只执行了一次 - 对于第一个策展人客户。所有其他客户端“共享”相同的身份验证。

有什么方法可以让每个客户端对 Zookeeper 使用单独的身份验证?

0 投票
1 回答
643 浏览

apache-zookeeper - 看不到从 Java 应用程序添加的 znodes (DigestLoginModule)

从 Java 应用程序添加znode时,参展商资源管理器无法显示节点状态。我得到的错误是:KeeperErrorCode = NoAuth for /z/node/path。另一方面,当我从 REST API ( PUT www.my-zookeeper.com//exhibitor/v1/explorer/znode/z/node/path) 添加 znode 时,一切正常。

在我看来,问题可能出在,因为 Java 客户端正在使用DigestLoginModule身份验证。

另外值得一提的是,当我尝试在 Exhibitor 中分​​析节点时,出现此错误:

0 投票
1 回答
682 浏览

apache-zookeeper - 使用 Zookeeper 的集群监视器

我正在尝试使用 CuratorFramework 创建一个基于 Zookeeper 的应用程序。应用程序必须能够在更多节点上以仲裁方式运行。每个应用程序实例都嵌入了 Zookeeper 服务器和客户端的实例。节点已成功组装到仲裁中。每个节点都向 /workers/active/node1 写入一个 EPHEMERAL 节点(“active”是由领导者创建的 PERSISTENT znode)。因为当客户端连接到 Zookeeper 服务器的 localhost 实例时,Zookeeper 检测到节点故障的速度非常慢,并且临时节点在会话到期后消失了,我决定使用连接字符串“NodeB,NodeC”将 NodeA 的客户端连接到集群。带有连接字符串“NodeA,Node C”的 NodeB 和带有“NodeA,NodeB”的 NodeC。这导致,该集群在检测节点故障方面要快得多。我在每个节点上添加了观察者,以检测 /workers/active 上的 NodeChildren 事件。这个观察者有一个特殊的 CuratorFramework 客户端实例,连接到 localhost zookeeper 服务器。我这样做是因为回调只注册到客户端注册它的服务器。问题是,该解决方案不稳定,我不知道为什么。有时一切正常,但在那之后,我在 /workers/active 中松散了 znode,但所有节点都在运行或 /workers/active 中的状态正确,但 NodeChildren 回调不起作用,即使它在几秒钟前正常工作。 ..我能做错什么?我已经尝试了一切... 因为回调仅注册到客户端注册它的服务器。问题是,该解决方案不稳定,我不知道为什么。有时一切正常,但在那之后,我在 /workers/active 中松散了 znode,但所有节点都在运行或 /workers/active 中的状态正确,但 NodeChildren 回调不起作用,即使它在几秒钟前正常工作。 ..我能做错什么?我已经尝试了一切... 因为回调仅注册到客户端注册它的服务器。问题是,该解决方案不稳定,我不知道为什么。有时一切正常,但在那之后,我在 /workers/active 中松散了 znode,但所有节点都在运行或 /workers/active 中的状态正确,但 NodeChildren 回调不起作用,即使它在几秒钟前正常工作。 ..我能做错什么?我已经尝试了一切...

0 投票
0 回答
1135 浏览

connection-pooling - 如何使用 Curator 管理与 Zookeeper 的多个连接?

我是 Zookeeper 和 Curator 的新手。

我想知道,如果在 Curator 或 Zookeeper 中有一种方法,我们可以通过它维护一个 Zookeeper 连接的连接池。

我尝试在网上搜索,但大多数人说一个 CuratorFramework/Zookeeper 应该就足够了,或者尝试一次又一次地建立连接以并行使用多个连接。

我正在设计的系统,需要高号。来自 zookeeper 的并行读取数。我正在使用带有单个 zookeeper 连接的 Curator。多个 Zookeeper 连接将允许读取并行而不是顺序发生。此外,我想减少由于一次又一次地启动新连接而导致的任何延迟。

理想情况下,我假设应该存在一些连接池,但如果没有,我可能需要自己做。

谁能指出已经存在的东西?

0 投票
0 回答
235 浏览

apache-zookeeper - Reaquiring Curator InterProcessReadWriteLock

我正在尝试用 Curator 进程间锁替换数据库悲观锁。使用数据库锁,我select for update在事务开始时对实体进行锁定,并在事务提交时释放它。事务可以跨越多个方法,如果链中的任何方法尝试再次获取此锁,它会在同一事务/线程中运行时获取它。

现在有了 zookeeper 锁,我看到的例子是这样的:

如果我的服务调用跨越多个方法并且这些方法中的任何一个单独尝试获取此锁,这将产生问题。我不希望锁被传递,因为这些是独立的业务方法。如果我在同一个线程中运行,是否有一些服务/工厂实现可以返回同一个锁对象?

0 投票
1 回答
739 浏览

java - 如何在 Zookeeper/Curator 中进行 upsert?

如果 Zookeeper 中不存在节点,我希望能够更新或创建。我们正在使用策展人。

我可以这样做:

但这不是事务性的。还有 inTransaction(),但它似乎没有任何方法,如 createContainers,甚至没有任何方法来检查是否存在做 if/else。

我错过了什么吗?这似乎应该是非常基本的

0 投票
1 回答
152 浏览

apache-zookeeper - 如果在使用 Curator 的 Leader Election 时 takeLeadership() 永远不会返回会发生什么

如代码所示,我在业务代码中发现了任何异常,所以即使 zookeeper 断开连接,业务代码仍然会执行,对吧?

0 投票
1 回答
192 浏览

java - 带有临时节点的 Zookeeper 陷阱

Zookeeper Gotcha 博文

这篇博文提到了“会话”。它是指 Zookeeper 客户端会话(就像您在 Java 中创建的用于与服务器交互的会话)还是会话指的是 Zookeeper 服务器本身?

0 投票
2 回答
1737 浏览

java - Apache Curator Lock 食谱撤销

我正在尝试测试 Apache Curator 中的可撤销锁定。我有两个线程试图获取锁。如果第一个测试获得了锁,第二个线程可以要求第一个线程释放锁,以便第二个线程可以获取它

问题是,当第二个线程调用 attemptRevoke 时,回调异步方法在第一个进程上被调用,但是由于它是第三个线程的回调方法,如果调用 lock.release 它会抛出一个异常

java.lang.IllegalMonitorStateException:您不拥有锁

那是根据api

release() 如果调用线程与获取它的线程相同,则执行一次互斥锁释放。

所以基本上这是不可能的,因为回调永远是另一个线程。有没有其他方法可以实现这一目标?

感谢您的任何建议

-塔塔