【ZooKeeper系列】(2)ZooKeeper的安装与使用

环境准备

  1. 先从ZooKeeper的官网找到下载地址

  2. 准备四台配置已经安装过JDK的linux机器,本文就通过虚拟机软件来模拟集群了,四台机器我分别称之为node01node02node03node04

  3. 先进入node01环境中,找到想保存安装包的目录,通过命令wget {download_link}进行下载,其中download_link是我们第一步拿到的网址。

  4. 将上述得到的安装包进行解压,建议解压到/opt目录下,本文解压到opt/zookeeper目录中

    tar xf apache-zookeeper-3.6.3-bin.tar.gz -C /opt/zookeeper/
    
  5. 首先来准备ZooKeeper的配置文件。从解压后的目录中,我们会发现一个conf目录,进入这个目录后会发现一个文件名为zoo_sample.cfg的文件。将这个文件复制,并命名为zoo.cfg

    cd apache-zookeeper-3.6.3-bin/conf/
    cp zoo_sample.cfg zoo.cfg
    
  6. 创建完zookeeper的配置文件后,对这个文件进行一些魔改。

    dataDir改为/var/zookeeper,这个目录是用来持久化的。

    在该文件的最后添加下面一段

    server.1={node01的ip地址}:2888:3888
    server.2={node02的ip地址}:2888:3888
    server.3={node03的ip地址}:2888:3888
    server.4={node04的ip地址}:2888:3888
    

    需要把大括号中的内容替换掉。

    最后一段的意思是说,当前ZK集群一共有四台机器。

    当没有leader被选出来的时候,四台机器通过端口3888进行沟通。

    当leader被选出来后,其他机器连接leader的2888端口进行通信。

  7. 将刚才指定的持久化目录创建出来

    mkdir /var/zookeeper
    
  8. 然后第六步创建的目录中新建一个名为myid的文件,其中只写一个数字——1

  9. 将node01中/opt/zookeeper/的内容分发给其他几台node,通过scp的命令。

    # 在/opt目录下
    scp -r ./zookeeper/ xxx.xxx.xxx.xxx:`pwd`
    

    xxx.xxx.xxx.xxx是指其他node的ipv4地址。

  10. 在每一台node的目录/var/zookeeper中,新建一个myid的文件,然后将对应的编号填上,比如node02的文件中就写2。

    # 例如,在node02中
    mkdir /var/zookeeper
    echo 2 > /var/zookeeper/myid
    
  11. 将ZooKeeper的命令加到系统路径中,这样就可以直接在命令行中执行ZK的命令了。

    vi /etc/profile

    ZOOKEEPER_HOME=/opt/zookeeper/apache-zookeeper-3.6.3-bin
    PATH=$ZOOKEEPER_HOME/bin:PATH
    

    然后通过下面命令让上面的变化生效。

    . /etc/profile

  12. 验证:在命令行中输入zk,然后按Tab键,就会看到命令补全提示:

    > zk
    zkCleanup.sh            zkEnv.sh                zkSnapShotToolkit.cmd
    zkCli.cmd               zkServer.cmd            zkSnapShotToolkit.sh
    zkCli.sh                zkServer-initialize.sh  zkTxnLogToolkit.cmd
    zkEnv.cmd               zkServer.sh             zkTxnLogToolkit.sh
    
  13. 用与第9步相同的方法,将上面修改完的profile文件分发给其他node。

    scp /etc/profile xxx.xxx.xxx.xxx:/etc
    

启动集群

  1. 为了实验目的,为了能让各个节点之间相互通信,需要关闭防火墙,注意,在生产环境中不能关闭防火墙,需要跟运维沟通,但此处只是为了做实验。

    systemctl stop firewalld.service
    
  2. 在每一台ZK node中执行启动命令

    zkServer.sh start-foreground
    
  3. 在本文的实验环境中,因为在配置文件中已经声明了只有四台机器,所以当启动机器数目达到半数以上(3台),即可选出leader。

    通过命令zkServer.sh status可以查看当前节点的角色:

    > zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /opt/zookeeper/apache-zookeeper-3.6.3-bin/bin/../conf/zoo.cfg
    Client port found: 2181. Client address: localhost. Client SSL: false.
    Mode: leader
    
  4. 如果把当前的主节点——node3给停掉,ZK集群会快速的选出另外一个节点当做主节点。

交互

集群启动完后之后,就可以与ZK进行交互了。

一点前置知识:ZK在单个节点上是以目录树的形式存在的。

  1. 通过命令zkCli.sh进入命令行界面。

  2. 通过help命令可以查看可用的命令

  3. 在当前目录下创建一个新目录:

    create /testDir "testData"
    
  4. 查看某个目录下的情况,通过ls命令。

    > ls /
    [testDir, zookeeper]
    
  5. 获取某个目录的内容:get

    > get /testDir
    testData
    
  6. 获取某个目录更详细的内容:get -s

    > get -s /testDir
    testData
    cZxid = 0x100000002
    ctime = Mon May 24 00:22:57 EDT 2021
    mZxid = 0x100000002
    mtime = Mon May 24 00:22:57 EDT 2021
    pZxid = 0x100000002
    cversion = 0
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 8
    numChildren = 0
    

    cZxid—— (create) ZK Transaction ID

    mZxid——(modify)ZK Transaction ID

    pZxid——(parent) ZK Transaction ID

    ephemeralOwner—— 归属者。如果创建一个临时节点的时候,就会看到这里有变化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值