zookeeper编程
- zookeeper有一个java绑定和一个c绑定
- c绑定的两种形式:单线程和多线程
- 两种形式的区别在于如何循环消息以获取更多消息
主从复制的Zookeeper
在评估、开发和测试环境中。使用zookeeper独立模式
在生产模式中。应用主从复制模式。
相同应用中服务器主从复制组叫做 quorum , 并且在主从复制模式中,在quorum中的所有服务器有相同的配置文件副本
注意:如果使用zk的主从模式,至少3台服务器。并且建议基数服务器。
原因:1. 如果只有两台服务器,其中的一个故障的时候,没有足够的机器形成多数quorum。
2. 在本质上两台服务比单台服务更不稳定,因为有两个单点。
配置文件修改
tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
- initLimit: 限定quorum中的Zookeeper服务器连接到Leader的超时时间。(eg.initLimit的超时时间是5个标记号,2000毫秒一个标记,就是10秒)
- server.x: 列出了构成Zookeeper服务的服务器(eg.通过查找data目录中的myid文件知道是哪个服务。这个myid个文件包含了服务编号,用ASCII)
- 端口号2888和3888:服务器节点使用前面的端口连接到其他节点。便于同事之间的通信(eg.对更新的顺序取得统一的意见)
一个Zookeeper的服务器用这个端口连接follower到leader。当一个新的leader产生时,follower使用这个端口打开一个TCP连接,连接到leader。因为默认的leader选举也使用TCP。我们现在需要另一个端口用来leader选举。这是在服务器条目的第二个端口
注意:在一台机器上测试多台服务器,在服务器配置文件为每个server.x指定servername为localhost,和独有的quorum & leader选举端口(也就是 2888:3888, 2889:3889, 2890:3890在上面的示例中)。当然分开dataDir和不同的clientPort也是非常重要的
优化:获取更新的低延迟,有一个专门的事务日志目录非常重要。默认情况下,事务日志作为一个数据快照和myid文件放入同一个目录。datalogDir参数指示一个不同的目录用于事务日志