【问题标题】:How to programmatically detect which server in ensemble client is connected to?如何以编程方式检测集成客户端中连接到哪个服务器?
【发布时间】:2015-02-15 10:07:35
【问题描述】:

如何以编程方式检测客户端连接到 ZooKeeper 集成中的哪个服务器?

我正在使用Apache Curator API,并通过注册ConnectionStateListener 来监听连接状态的变化。如果客户端连接的服务器出现故障,我想知道当客户端重新连接时客户端连接到集合中的哪个服务器。

【问题讨论】:

    标签: apache-zookeeper apache-curator


    【解决方案1】:

    您可以在 Curator 生成的日志中看到这一点。在下面的示例输出中,CuratorFramework 客户端在connectionString 中获得了 4 个不同的 ZooKeeper 实例,它可以连接到这些实例。从日志中可以看出,它选择了第一个:

    21:13:45.384 [main] INFO  org.apache.curator.framework.imps.CuratorFrameworkImpl - Starting
    21:13:45.386 [main] INFO  org.apache.zookeeper.ZooKeeper - Initiating client connection, connectString=127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183,127.0.0.1:2184 sessionTimeout=60000 watcher=org.apache.curator.ConnectionState@2876f0c
    21:13:45.388 [main-SendThread(127.0.0.1:2181)] INFO  org.apache.zookeeper.ClientCnxn - Opening socket connection to server 127.0.0.1/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
    21:13:45.388 [main-SendThread(127.0.0.1:2181)] INFO  org.apache.zookeeper.ClientCnxn - Socket connection established to 127.0.0.1/127.0.0.1:2181, initiating session
    21:13:45.392 [main-SendThread(127.0.0.1:2181)] INFO  org.apache.zookeeper.ClientCnxn - Session establishment complete on server 127.0.0.1/127.0.0.1:2181, sessionid = 0x14aac461eb70004, negotiated timeout = 40000
    

    如果客户端连接的 ZooKeeper 服务器崩溃,您还会在日志中看到客户端连接的新服务器:

    21:23:03.675 [main-SendThread(127.0.0.1:2182)] INFO  org.apache.zookeeper.ClientCnxn - Opening socket connection to server 127.0.0.1/127.0.0.1:2182. Will not attempt to authenticate using SASL (unknown error)
    21:23:03.677 [main-SendThread(127.0.0.1:2182)] INFO  org.apache.zookeeper.ClientCnxn - Socket connection established to 127.0.0.1/127.0.0.1:2182, initiating session
    21:23:03.697 [main-SendThread(127.0.0.1:2182)] INFO  org.apache.zookeeper.ClientCnxn - Session establishment complete on server 127.0.0.1/127.0.0.1:2182, sessionid = 0x14aac461eb70004, negotiated timeout = 40000
    21:23:03.697 [main-EventThread] INFO  org.apache.curator.framework.state.ConnectionStateManager - State change: RECONNECTED
    

    【讨论】:

    • 但是,我如何使用 Curator 和扩展 Zookeeper API 以编程方式获取这些信息?
    猜你喜欢
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    • 2013-04-15
    • 2018-12-14
    • 2016-09-23
    • 1970-01-01
    相关资源
    最近更新 更多