- 配置集群中的zookeeper机器,格式逗号分隔的 host:port,如"127.0.0.1:4545" 或者"127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002"。还可以在端口后面加上一个自定义的path, 例如"127.0.0.1:4545/app/a" or "127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002/app/a",这样配置的话,当client对/path执行操作时,最终执行的znode是/app/a/path。
- zookeeper随机选一个zookeeper连接,建立连接时有两个重要参数,一个是session timeout,这个值必须大于2*ticks,小于20*ticks,另一个参数是一个默认的watcher, 连接的任何状态变化都会通知这个watcher。连接成功后,zookeeper会为这个连接建立一个session以及对应的一个session password,并且会把一个64位的sessionid和password返回给客户端。
- client在session timeout的时间间隔内,不断发送ping,保持和zookeeper之间的心跳。
- client和zookeeper之间断开连接
- 如果断开连接的时间超过session timeout,则zookeeper会清除session对应的client创建的临时节点,并通知关注这个临时节点的clients。
- client随机选择另外一个zookeeper重新建立连接,此时watcher会收到session expired的通知,连接断开。
- 如果连接断开后在session timeout时间内重新连接,则连接成功。
client负载均衡,client可以在运行过程中提供一个新的zookeeper host:port连接串,这个行为会导致client重新连接zookeeper。
- 例如原来有3台zookeeer机器,现在机器增加到5台,则每个client都有40%的概率会重新连接到新增加的两台zookeeper上。如果client连接新的两台机器时失败,则会随机选择连接旧的三台机器,如果仍然失败则会在所有的5台机器中随机选择一台连接,如果仍然连接失败,则会轮询这5台机器尝试连接。
- 如果原来有5台zookeeper机器,现在变成3台,则现有的三台机器上的连接不变,删除的那两台机器的client会随机选择这三台机器进行连接。