Loading

Zookeeper:集群和zab协议

一.集群搭建

分别搭建zookeeper环境和jdk环境。

配置文件的dataDir需要需改,并且要创建该目录。

 

 server.A=B:C:D

A:是一个数字,表示服务器的编号

B:服务器ip地址

C:zookeeper的通信端口

D:Leader选举的端口

在上一步的dataDir指定目录下,创建myid文件,文件中加入A数字。

echo "1">myid

如果zookeeper服务启动不了,可以在zookeeper的bin目录下看到报错的日志

cat zookeeper.out

 针对报错找到解决办法。

查看zookeeper状态:

./zkServer.sh status

 

登陆集群:

./zkCli.sh -server 192.168.10.132:2181

 

 

 二.一致性协议:zab协议

zab协议:zookeeper atomic broadcast(zookeeper原子广播),zookeeper是通过zab协议保证事务的一致性。

基于zab协议,zookeeper集群中的角色主要有一下三类:

角色 描述
领导者(Leader)  领导者负责进行投票的发起和决议,更新系统状态
学习者 跟随者(Follower)  Follower用于接收客户请求并向客户端返回结果,在选主过程中参与投票
 观察者(ObServer)  Observer可以接收客户端连接,将写请求转发给leader节点,单Observer不参与投票过程,之同步leader状态。
客户端(Client) 请求发起方

 

 

 

 

 

 

 

 

zab广播模式工作原理(写请求):

 3.observer角色及其配置

observer角色特点:

1.不参与集群的leader选举

2.不参与集群中写数据时的ack反馈

如果想要使用observer角色,在配置文件中配置

peerType=observer

 并且在所有的server的配置文件中,配置成observer模式的server的那行配置追加:observer,例如:

server.3=192.168.10.135:2281:2381:observer

4.JavaApi连接Zookeeper集群

ZooKeeper(String connectString, int sessionTimeout, Watcher watcher)

在connectString中:以逗号分隔开各个集群的ip端口号

代码:

public class ZKWatcher implements Watcher{

    static CountDownLatch latch = new CountDownLatch(1);

    static ZooKeeper zooKeeper;

    public static void main(String[] args) throws Exception{
        Watcher watcher;
        zooKeeper = new ZooKeeper("192.168.10.132:2181,192.168.10.133:2181,192.168.10.135:2181", 5000, new ZKWatcher());
        latch.await();
    }

    public void process(WatchedEvent event) {
        if(event.getType() == Event.EventType.None){
            if(event.getState() == Event.KeeperState.SyncConnected){
                System.out.println("连接成功");
                latch.countDown();
            }else if(event.getState() == Event.KeeperState.Disconnected){
                System.out.println("断开连接");
            }else if(event.getState() == Event.KeeperState.Expired){
                System.out.println("会话超时");
            }else if(event.getState() == Event.KeeperState.AuthFailed){
                System.out.println("认证失败");
            }
        }

    }
}

  

posted @ 2020-05-25 11:57  秋风飒飒吹  阅读(255)  评论(0编辑  收藏  举报