• 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节点的变更情况。因为锁是一个临时节点,释放锁有两种方式

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

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

  • 相关阅读:
    vmware workstation 10.0
    成为嵌入式程序员应知道的0x10个基本问题
    Linux嵌入式系统与硬件平台的关系
    vasprintf的实现
    GIT常用命令
    ip地址转化代码实例
    Linux网络编程实例解析
    openwrt的交叉编译
    appium初学者,使用之检查appium环境报错Could not detect Mac OS X Version from sw_vers output: '10.12.1’,
    第二章 mac上运行第一个appium实例
  • 原文地址:https://www.cnblogs.com/mxz1994/p/9363243.html
Copyright © 2020-2023  润新知