• zookeeper安装配置及基础操作


    01【熟悉】Zookeeper概述

    1Zookeeper背景

    随着互联网技术的发展,企业对计算机系统的计算,存储能力要求越来越高,各大IT企业都在追求高并发,海量存储的极致,在这样的背景下,单纯依靠少量高性能单机来完成计算机,云计算的任务已经无法满足需求,企业的IT架构逐渐由集中式往分布式过渡。所谓的分布式是指:把一个计算任务分解成若干个计算单元,并分派到不同的计算机中去执行,最终汇总计算结果的过程。

    2Zookeeper概述

    Zookeeper是源代码开放的分布式协调服务,是一个高性能的分布式数据一致性的解决方案,它将那些复杂的,容易出错的分布式一致性服务封装起来。用户可以通过调用Zookeeper提供的接口来解决一些分布式应用中的实际问题。

    3Zookeeper典型应用场景

    1)数据发布/订阅

    数据的发布与订阅,顾名思义就是一方把数据发布出来,另一方通过某种手段获取。

    通常数据发布与订阅有两种模式:推模式和拉模式,推模式一般是服务器主动往客户端推送信息,拉模式是客户端主动去服务端请求目标数据(通常采用定时轮询的方式)

    Zookeeper采用两种方式互相结合:发布者将数据发布到Zookeeper集群节点上,订阅者通过一定的方法告诉Zookeeper服务器,自己对哪个节点的数据感兴趣,那么在服务端数据发生变化时,就会通知客户端去获取这些信息。

    2)负载均衡

     首先在服务端启动的时候,把自己在zookeeper服务器上注册成一个临时节点。zookeeper拥有两种形式的节点,一种是临时节点,一种是永久节点。这两种节点后面的会有较为详细的介绍。注册成临时节点后,再服务端出问题时,节点会自动的从zookeeper上删除,如此zookeeper服务器上的列表就是最新的可用的列表。

     客户端在需要访问服务器的时候首先会去Zookeeper获得所有可用的服务端的连接信息。

     客户端通过一定的策略(如随机)选择一个与之建立连接。

     当客户端发现连接不可用时,会再次从zookeeper上获取可用的服务端连接,并同时删除之前获取的连接列表。

      3)命名服务

     提供名称的服务。如一般使用较多的有两种id,一种是数据库自增长id,一种是UUID,两种id都有局限,自增长id仅适合在单表单库中使用,uuid适合在分布式系统中使用但由于id没有规律难以理解。而ZK提供了一定的接口可以用来获取一个顺序增长的,可以在集群环境下使用的id

      4)分布式协调,通知,心跳服务

     在分布式服务系统中,我们常常需要知道哪个服务是可用的,哪个服务是不可用的,传统的方式是通过ping主机来实现的,ping200的结果说明说明该服务是OK的。

     而在使用 zookeeper时,可以将所有的服务都注册成一个临时节点,我们判断一个服务是否可用,只需要判断这个节点是否在zookeeper集群中存在就可以了,不需要直接去连接和ping服务所在主机,减少系统的复杂度和对服务主机的压力。

    4Zookeeper优势

    1)源代码开放

    2)高性能,易用稳定,该优势已在众多分布式系统中得到验证

    3)有着广泛的应用,并且与众多大数据相关技术能实现良好的融合开发。

    02【掌握】Zookeeper的安装及单机版配置

    下载

    https://apache.org/dist/zookeeper/ 

     

    Window下的安装

    解压

     

    启动报错

     

    启动报错原因

    conf/zoo.cfg文件不存在

    复制zoo_simple.cfg的改名为zoo.cfg

     

    打开zoo.cfg查看端口

     

    Linux下的安装

    传到linux

     

    解压并移动

     

     

     

     

    复制zoo_simple.cfg--àzoo.cfg

     

    启动停止重启状态

     

     

    ./zkServer.sh start|stop|restart|status

    安装到阿里云

    linux下面一样

    03【掌握】Zookeeper文件系统及监听机制

    1,概述

    官方文档上这么解释zookeeper,它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。

    简单来说zookeeper=文件系统+监听通知机制

    2,文件系统

    2.1,示意图

    每个子目录项如 NameService 都被称作为 znode(目录节点),和文件系统一样,我们能够自由的增加、删除znode,在一个znode下增加、删除子znode,唯一的不同在于znode是可以存储数据的。

    2.2,四种类型的znode

    PERSISTENT-持久化目录节点      客户端与zookeeper断开连接后,该节点依旧存在

    PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点   客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号

    EPHEMERAL-临时目录节点    客户端与zookeeper断开连接后,该节点被删除

    EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点    客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号

    3,监听机制

    客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,zookeeper会通知客户端。

    zookeeper功能非常强大,可以实现诸如分布式应用配置管理、统一命名服务、状态同步服务、集群管理等功能,我们这里拿比较简单的分布式应用配置管理为例来说明。

    假设我们的程序是分布式部署在多台机器上,如果我们要改变程序的配置文件,需要逐台机器去修改,非常麻烦,现在把这些配置全部放到zookeeper上去,保存在 zookeeper 的某个目录节点中,然后所有相关应用程序对这个目录节点进行监听,一旦配置信息发生变化,每个应用程序就会收到 zookeeper 的通知,然后从 zookeeper 获取新的配置信息应用到系统中。

    04【掌握】Zookeeper单机版本使用

    通过 ./zkCli.sh 进入客户端后,就可以使用命令来操作zookeeper了。

    quit退出客户端

    1,创建节点

    使用create命令,可以创建一个zookeeper节点。

    //语法

    create [-s] [-e] path data acl

    //其中-s表示顺序节点,-e表示临时节点。默认情况下,创建的是持久节点。

    //path是节点路径,data是节点数据,acl是用来进行权限控制的。

    //案例

    create /sanguo  luoguanzhong  创建一个持久节点目录为/sanguo    值为  luoguanzhong

    create -s /shuihu  shinaian  创建一个持久顺序节点目录为/shuihu  值为  shinaian

    create -e /xiyou  wuchengren  创建一个临时节点目录为/xiyou  值为  wuchengren 

    create -e -s /honglou  caoxueqing  创建一个临时顺序节点目录为/honglou  值为 caoxueqing   

    2,查看节点内容

    使用get命令,可以获取zookeeper指定节点的内容和属性信息。

    如下:

    [zk: 127.0.0.1:2181(CONNECTED) 1] get /sanguo

    luoguanzhong

    cZxid = 0xd

    ctime = Tue Aug 13 20:27:20 CST 2019  创建时候

    mZxid = 0xd

    mtime = Tue Aug 13 20:27:20 CST 2019  修改时间

    pZxid = 0xd

    cversion = 0

    dataVersion = 0     #没有被修改过,所以版本为0如果有修改过版本会自增

    aclVersion = 0

    ephemeralOwner = 0x0

    dataLength = 12

    numChildren = 0

    3,查看子节点

    使用ls命令可以查看指定节点下的所有子节点

    以下查看根目录下的所有子节点:

     

    4,更新节点内容

    使用set命令,更新节点内容。格式为:

    #语法

    set path data 

    其中的data就是要更新的新内容。

    复制代码

     

    5,删除节点

     

    可以发现,一个节点存在子节点时,无法删除该节点。

    还有一个命令rmr path 删除当前节点及子节点

    6,节点监控

    再启动一个shell

    使用客户端连接

    操作步骤

    1,在右边的窗口创建一个节点

     

    2,在左边的窗口连接服务器并监控/sanguo节点

     

     

    3,修改右边窗口的值,发现左边的发生了变化

     

  • 相关阅读:
    Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '1288372549423476738' for key 'PRIMARY'
    环形数组循环
    less命令
    ln命令
    Vue中$refs的理解
    cut命令
    除数博弈
    find命令
    file命令
    最长公共前缀
  • 原文地址:https://www.cnblogs.com/yangzhuxian/p/13130527.html
Copyright © 2020-2023  润新知