zookeeper集群版本安装

准备三台机器:

192.168.0.104

192.168.0.105

192.168.0.106

分别在zoo.cfg配置文件中添加以下内容:

192.168.0.104:2888:3888

192.168.0.105:2888:3888

192.168.0.106:2888:3888

在data目录中添加myid,分别为1,2,3

关闭防火墙 systemctl stop firewalld

启动zk

./zkServer.sh start

./zkServer.sh status

data目录配置参考https://www.jianshu.com/p/db52e6945f0d

zookeeper集群扩展

在zoo.cfg配置文件中增加:

server.4=192.168.0.107:2888:3888:observer


zkClient连接集群:

public class Test {

    private static final String ADDRES = "192.168.0.104:2181,192.168.0.105:2181,192.168.0.106:2181";

    private static final int TIMEOUT = 5000;

    public static void main(String[] args) {

        ZkClient zkClient = new ZkClient(ADDRES, TIMEOUT);

        String path = "/cluster-test";

        zkClient.createPersistent(path);

        zkClient.close();

    }

}


Zookeeper中分为三种角色:

1、Leader(领导) Zookeeper集群中的主节点、负责写的请求操作;

2、Follower(跟随者) 是领导(Leader)角色根随着,出读取操作还可以实现对Leader提议与选举

3、Observer 如果后期当我们在扩展ZK集群节点时如果角色为Follower越来越多会导致选举的时间越来越长,所以Observer角色和Follower角色很相似,只是obServer不能够参与Leader角色选举;

增加obServer的作用主要不影响原来本身选举的时间效率、目的是提高客户端读的请求效率


Zookeeper核心是原子广播协议(ZAB原子广播协议),这种机制保证了各个节点的数据同步的问题

ZAB协议有有两种模式 分别为恢复模式(选主)、广播模式(同步)。

恢复模式也就是当我们leader的节点宕机之后,会从新在剩余节点选出新的leader,新的leader选出之后采用广播模式实现各个节点与新的leader同步。


ZooKeeper 选举实现原理

1、状态变更 服务器启动的时候 每个Server的状态都是为“选举状态”,如果当前的leader的角色宕机之后非ObServer角色的节点都会从新进入到选举

2、发起投票的时候,每个Server端都会产生(myid,zxid)投票选举,系统默认初始化的时候zxid为0,如果在运行期间每个Server的zxid可能不会不同,这取决于最后一次做更新的操作;

3、接受自己投票实现投票pk

    1、先检查zxid,谁最大谁就是为leader

    2、如果zxid都是一样的情况下时候,myid谁最大谁就是为leader

    3、如果有过半机制已经选举出了leader,之后启动的节点不会加入选举

你可能感兴趣的:(zookeeper集群版本安装)