zoukankan      html  css  js  c++  java
  • Zookeeper(一)CentOS7.5搭建Zookeeper3.4.12集群与命令行操作

    一. 分布式安装部署

    1.0 下载地址

    官网首页: https://zookeeper.apache.org/

    下载地址: http://mirror.bit.edu.cn/apache/zookeeper/

    1.1 集群规划

    在node21、node22和ode23三个节点上部署Zookeeper,三个节点都已安装jdk。

    IP 节点名称 Zookeeper JDK
    192.168.100.21 node21 Zookeeper JDK
    192.168.100.22 node22 Zookeeper JDK
    192.168.100.23 node23 Zookeeper JDk

    1.2 解压安装

    (1)解压zookeeper安装包到/opt/module/目录下

    [admin@node21 software]$ tar -zxvf zookeeper-3.4.12.tar.gz -C /opt/module/

    (2)在/opt/module/zookeeper-3.4.12/这个目录下创建Data

    [admin@node21 zookeeper-3.4.12]# sudo mkdir  Data

    (3)重命名/opt/module/zookeeper-3.4.12/conf这个目录下的zoo_sample.cfg为zoo.cfg

    [admin@node21 conf]# mv zoo_sample.cfg zoo.cfg

    1.3 配置zoo.cfg文件

    具体配置,修改dateDir,添加日志存放目录

    dataDir=/opt/module/zookeeper-3.4.12/Data
    dataLogDir=/opt/module/zookeeper-3.4.12/logs

    末尾增加如下配置

    server.1=node21:2888:3888
    server.2=node22:2888:3888
    server.3=node23:2888:3888

    1.4 集群配置

    (1)在/opt/module/zookeeper-3.4.12/Data目录下创建一个myid的文件

    [admin@node21 Data]# sudo touch myid

    (2)编辑myid文件, 在文件中添加与server对应的编号:如 1   

    [admin@node21 Data]# vi myid

    (3)拷贝配置好的zookeeper到其他机器上

    [admin@node21 module]# scp -r zookeeper-3.4.12/ admin@node22:/opt/module/
    [admin@node21 module]# scp -r zookeeper-3.4.12/ admin@node23:/opt/module/

    并分别修改node22,node23中myid文件中内容为2、3

    [admin@node22 Data]# echo 2 > myid
    [admin@node23 Data]# echo 3 > myid

    1.5 启动集群

    (1)分别启动zookeeper

    [admin@node21 zookeeper-3.4.12]# bin/zkServer.sh start
    [admin@node22 zookeeper-3.4.12]# bin/zkServer.sh start
    [admin@node23 zookeeper-3.4.12]# bin/zkServer.sh start

    (2)查看状态

    [admin@node21 zookeeper-3.4.12]# bin/zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /opt/module/zookeeper-3.4.12/bin/../conf/zoo.cfg
    Mode: follower
    [admin@node22 zookeeper-3.4.12]# bin/zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /opt/module/zookeeper-3.4.12/bin/../conf/zoo.cfg
    Mode: follower
    [admin@node23 zookeeper-3.4.12]# bin/zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /opt/module/zookeeper-3.4.12/bin/../conf/zoo.cfg
    Mode: leader

    (3)停止zookeeper

    [admin@node21 zookeeper-3.4.12]$ bin/zkServer.sh stop

    1.6 配置环境变量

    [admin@node21 zookeeper-3.4.12]$ sudo vi /etc/profile 
    export ZOOKEEPER_HOME=/opt/module/zookeeper-3.4.12
    export PATH=$PATH:$ZOOKEEPER_HOME/bin

    1.7zoo.cfg配置参数解读

    Server.A=B:C:D。

    A是一个数字,表示这个是第几号服务器;

    B是这个服务器的ip地址;

    C是这个服务器与集群中的Leader服务器交换信息的端口;

    D是万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。

    集群模式下配置一个文件myid,这个文件在dataDir目录下,这个文件里面有一个数据就是A的值,Zookeeper启动时读取此文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server。

    1)tickTime=2000:通信心跳数

    tickTime:通信心跳数,Zookeeper服务器心跳时间,单位毫秒

    Zookeeper使用的基本时间,服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳,时间单位为毫秒。

    它用于心跳机制,并且设置最小的session超时时间为两倍心跳时间。(session的最小超时时间是2*tickTime)

    2)initLimit=10:LF初始通信时限

    集群中的follower跟随者服务器(F)与leader领导者服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量),用它来限定集群中的Zookeeper服务器连接到Leader的时限。

    投票选举新leader的初始化时间

    Follower在启动过程中,会从Leader同步所有最新数据,然后确定自己能够对外服务的起始状态。

    Leader允许F在initLimit时间内完成这个工作。

    3)syncLimit=5:LF同步通信时限

    集群中Leader与Follower之间的最大响应时间单位,假如响应超过syncLimit * tickTime,

    Leader认为Follwer死掉,从服务器列表中删除Follwer。

    在运行过程中,Leader负责与ZK集群中所有机器进行通信,例如通过一些心跳检测机制,来检测机器的存活状态。

    如果L发出心跳包在syncLimit之后,还没有从F那收到响应,那么就认为这个F已经不在线了。

    4)dataDir:数据文件目录+数据持久化路径

    保存内存数据库快照信息的位置,如果没有其他说明,更新的事务日志也保存到数据库。

     5)clientPort=2181:客户端连接端口

    监听客户端连接的端口

    二. 客户端命令行操作

    1)启动客户端

    [admin@node21 zookeeper-3.4.12]$ zkCli.sh 

    2)显示所有操作命令

    [zk: localhost:2181(CONNECTED) 0] help
    ZooKeeper -server host:port cmd args
        stat path [watch]
        set path data [version]
        ls path [watch]
        delquota [-n|-b] path
        ls2 path [watch]
        setAcl path acl
        setquota -n|-b val path
        history 
        redo cmdno
        printwatches on|off
        delete path [version]
        sync path
        listquota path
        rmr path
        get path [watch]
        create [-s] [-e] path data acl
        addauth scheme auth
        quit 
        getAcl path
        close 
        connect host:port

    3)查看当前znode中所包含的内容

    [zk: localhost:2181(CONNECTED) 1] ls /
    [zookeeper]

    4)查看当前节点数据并能看到更新次数等数据

    [zk: localhost:2181(CONNECTED) 2] ls2 /
    [zookeeper]
    cZxid = 0x0
    ctime = Wed Dec 31 19:00:00 EST 1969
    mZxid = 0x0
    mtime = Wed Dec 31 19:00:00 EST 1969
    pZxid = 0x0
    cversion = -1
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 0
    numChildren = 1

    5)创建普通节点

    [zk: localhost:2181(CONNECTED) 3] create /opt "aa"
    Created /opt
    [zk: localhost:2181(CONNECTED) 4] create /opt/module "bb"
    Created /opt/module

    6)获得节点的值

    [zk: localhost:2181(CONNECTED) 5] get /opt
    aa
    cZxid = 0x4100000004
    ctime = Wed Jul 25 07:48:55 EDT 2018
    mZxid = 0x4100000004
    mtime = Wed Jul 25 07:48:55 EDT 2018
    pZxid = 0x4100000005
    cversion = 1
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 2
    numChildren = 1
    [zk: localhost:2181(CONNECTED) 6] get /opt/module
    bb
    cZxid = 0x4100000005
    ctime = Wed Jul 25 07:51:21 EDT 2018
    mZxid = 0x4100000005
    mtime = Wed Jul 25 07:51:21 EDT 2018
    pZxid = 0x4100000005
    cversion = 0
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 2
    numChildren = 0

    7)创建短暂节点

    [zk: localhost:2181(CONNECTED) 7] create -e /app 8888           
    Created /app
    (1)在当前客户端是能查看到的
    [zk: localhost:2181(CONNECTED) 8] ls /
    [app, opt, zookeeper]
    (2)退出当前客户端然后再重启启动客户端
    [zk: localhost:2181(CONNECTED) 9] quit
    [root@node21 zookeeper-3.4.12]$ bin/zkCli.sh
    (3)再次查看根目录下短暂节点已经删除
    [zk: localhost:2181(CONNECTED) 0] ls /
    [opt, zookeeper]

    8)创建带序号的节点

    (1)先创建一个普通的根节点app
    [zk: localhost:2181(CONNECTED) 1] create /app "app"
    create /app "app"
    (2)创建带序号的节点
    [zk: localhost:2181(CONNECTED) 2] create -s /app/aa 888
    Created /app/aa0000000000
    [zk: localhost:2181(CONNECTED) 3] create -s /app/bb 888
    Created /app/bb0000000001
    [zk: localhost:2181(CONNECTED) 4] create -s /app/cc 888
    Created /app/cc0000000002
    如果原节点下有1个节点,则再排序时从1开始,以此类推。
    [zk: localhost:2181(CONNECTED) 5] create -s /opt/aa 888
    Created /opt/aa0000000001

    9)修改节点数据值

    [zk: localhost:2181(CONNECTED) 6] set /opt 999
    cZxid = 0x4100000004
    ctime = Wed Jul 25 07:48:55 EDT 2018
    mZxid = 0x410000000e
    mtime = Wed Jul 25 08:14:18 EDT 2018
    pZxid = 0x410000000d
    cversion = 2
    dataVersion = 1
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 3
    numChildren = 2

    10)节点的值变化监听

    (1)在node22主机上注册监听/opt节点数据变化

    [admin@node22 ~]$ zkCli.sh 
    [zk: localhost:2181(CONNECTED) 0] get /opt watch

    (2)在node21主机上修改/opt节点的数据

    [zk: localhost:2181(CONNECTED) 7] set /opt 777

    (3)观察node22主机收到数据变化的监听

    [zk: localhost:2181(CONNECTED) 1] 
    WATCHER::
    
    WatchedEvent state:SyncConnected type:NodeDataChanged path:/opt

    11)节点的子节点变化监听(路径变化)

    (1)在node22主机上注册监听/opt节点的子节点变化

    [zk: localhost:2181(CONNECTED) 2] ls /opt watch
    [aa0000000001, module]

    (2)在node21主机/opt节点上创建子节点

    [zk: localhost:2181(CONNECTED) 8] create /opt/bb 666
    Created /opt/bb

    (3)观察node22主机收到子节点变化的监听

    [zk: localhost:2181(CONNECTED) 3] 
    WATCHER::
    
    WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/opt

    12)删除节点

    [zk: localhost:2181(CONNECTED) 9] delete /opt/bb

    13)递归删除节点

    [zk: localhost:2181(CONNECTED) 10] rmr /opt

    14)查看节点状态

    [zk: localhost:2181(CONNECTED) 14] stat /app
    cZxid = 0x4100000009
    ctime = Wed Jul 25 08:09:56 EDT 2018
    mZxid = 0x4100000009
    mtime = Wed Jul 25 08:09:56 EDT 2018
    pZxid = 0x410000000c
    cversion = 3
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 3
    numChildren = 3

    15)退出客户端

    [zk: localhost:2181(CONNECTED) 17] quit 
  • 相关阅读:
    如何基于GOCW,创建一个实时视频程序
    对OpenCV中“旋转”的思考和实验
    为基于OpenCV的图像处理程序编写界面—关于QTMFCCSharp的选择以及GOCW的介绍
    《学习OpenCV3》第6章课后习题
    《学习OpenCV3》第14章课后习题
    如何识别出轮廓准确的长和宽
    answerOpenCV轮廓类问题解析
    尝试解决cifar10问题
    在训练的过程中降低学习率
    kaggle竞赛_mnist_10%
  • 原文地址:https://www.cnblogs.com/frankdeng/p/9018177.html
Copyright © 2011-2022 走看看