Zookeeper

1. cp   zoo_sample.cfg zoo.cfg  配置集群   server.1 = ip1:端口号:选举端口号

2.创建zookeeper文件夹  创建myid文件   存入编号   3

3.zkServer.sh start  启动

  jps查看启动 QuorumPeerMain

zkServer.sh status  查看状态  leader  follower 自动选举 

客户端连接到leader自动转发, 连接到follower会先转接到leader上  集群数量低于一半就挂掉了

ZooKeeper 是一个开源的分布式协调服务,分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协 调/通知、集群管理、Master 选举、配置维护,名字服务、分布式同步、分布式锁和分布式队列 等功能。

Zookeeper 中 有三种角色 

Leader(1)  Follower(n)  Observer(peerType=observer)

private CountDownLatch latch = new CountDownLatch(1);
 
ZooKeeper zk = null;
        try {
            zk = new ZooKeeper(registryAddress, Constant.ZK_SESSION_TIMEOUT, new Watcher() {
                @Override
                public void process(WatchedEvent event) {
                    if (event.getState() == Event.KeeperState.SyncConnected) {
                        latch.countDown();
                    }
                }
            });
            latch.await();

//连接成功后往下执行


//创建节点
 String path = zk.create(Constant.ZK_PROVIDER_PATH, data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL); 

//消费节点
 byte[] data = zk.getData(Constant.ZK_REGISTRY_PATH + "/" + node, false, null); // 获取 /registry 的子节点中的数据

三 .ZooKeeper应用的典型场景

ZooKeeper 是一个高可用的分布式数据管理与协调框架。基于对ZAB算法的实现,该框架 能够很好地保证分布式环境中数据的一致性。也是基于这样的特性,使得 ZooKeeper 成为了 解决分布式一致性问题的利器

1 . 数据发布与订阅(配置中心)

ZooKeeper 采用的是推拉相结合的方式: 客户端想服务端注册自己需要关注的节点,一旦该节点的数据发生变更,那么服务端就会向相应 的客户端发送Watcher事件通知,客户端接收到这个消息通知后,需要主动到服务端获取最新的数据

2 . 命名服务

其中较为常见的就是一些分布式服务框架(如RPC)中的服务地址列表。通过在ZooKeepr里 创建顺序节点,能够很容易创建一个全局唯一的路径,这个路径就可以作为一个名字。 ZooKeeper 的命名服务即生成全局唯一的ID。

3 . 分布式协调服务/通知

ZooKeeper 中特有 Watcher 注册与异步通知机制,能够很好的实现分布式环境下不同机器, 甚至不同系统之间的通知与协调,从而实现对数据变更的实时处理。使用方法通常是不同的客户端 如果 机器节点 发生了变化,那么所有订阅的客户端都能够接收到相应的Watcher通知,并做出相应 的处理。 ZooKeeper的分布式协调/通知,是一种通用的分布式系统机器间的通信方式。

4 . Master选举

5 . 分布式锁

分布式锁又分为排他锁和共享锁两种

排它锁 
ZooKeeper如何实现排它锁?

定义锁 
ZooKeeper 上的一个 机器节点 可以表示一个锁,获得锁 把ZooKeeper上的一个节点看作是一个锁,获得锁就通过创建临时节点的方式来实现。 ZooKeeper 会保证在所有客户端中,最终只有一个客户端能够创建成功,那么就可以 认为该客户端获得了锁。同时,所有没有获取到锁的客户端就需要到/exclusive_lock 节点上注册一个子节点变更的Watcher监听,以便实时监听到lock节点的变更情况。因为锁是一个临时节点,释放锁有两种方式

当前获得锁的客户端机器发生宕机或重启,那么该临时节点就会被删除,释放锁

正常执行完业务逻辑后,客户端就会主动将自己创建的临时节点删除,释放锁。

原文地址:https://www.cnblogs.com/mxz1994/p/9363243.html