CentOS7安装Zookeeper分布式集群

CentOS7安装Zookeeper分布式集群

  1. 前言
    ZooKeeper 是一个开源的分布式协调服务框架,主要用于分布式系统中的数据同步、配置管理、集群控制和命名服务等方面的处理。本文在3个系统为CentOS7的Linux节点上配置了Zookeeper分布式集群,安装配置的过程均在普通用户sxZhang的账户上完成,安装路径为~/bigdata,3个Linux节点的主机和IP的映射如下:

     10.10.10.1 host01
     10.10.10.2 host02
    10.10.10.3 host03
    

    在正式安装之前,我们需要进行免密登录的配置、JDK的安装和关闭防火墙,本文假设读者已经完成这些工作,之后直接安装Zookeeper。

    若未完成上述工作,可参考:
    免密登录参考博客:Linux 配置SSH免密登录详细步骤
    CentOS7关闭防火墙参考博客:Centos7关闭防火墙详细教程

  2. 下载zookeeper安装包

    前往zookeeper的下载页面Index of /apache/zookeeper下载相关安装包。

    注意事项:
    1)zookeeper节点必须是奇数个,因为zookeeper选举的规则:leader选举,要求可用节点数量必须大于总节点数量/2
    2)zookeeper 是使用 java 来运行的,所以需要依赖 JDK,所以安装 zookeeper 之前需要安装部署 JDK
    3) 注意关闭节点服务器的防火墙
    4) 官网上有两个tar.gz文件,bin名称结尾的包就是我们要下载的,可以直接使用。
    

    笔者选择的安装包版本为apache-zookeeper-3.8.3-bin.tar.gz

  3. 将下载的安装包使用xftp工具或rz命令上传到host01的~/bigdata/后,解压安装

    # 1.解压到当前目录
    tar -zxvf apache-zookeeper-3.8.3-bin.tar.gz
    # 2.重命名
    mv apache-zookeeper-3.8.3-bin zookeeper
    
  4. 修改环境变量

    编辑用户级环境变量的配置文件~/.bashrc,命令为vim ~/.bashrc,之后添加如下内容:

    #ZOOKEEPERR_HOME 需要与读者自己的安装路径匹配
    export ZOOKEEPER_HOME=/home/sxZhang/bigdata/zookeeper
    export PATH=$PATH:$ZOOKEEPER_HOME/bin
    

    编辑完成后,使用source ~/.bashrc或重新打开一个xshell会话终端更新环境变量,执行echo $ZOOKEEPER_HOM的结果为zookeeper的目标安装路径则正确。

    Tips:如果想在系统环境下安装配置,则需要选择/opt/usr/local等路径进行安装,且编辑文件为/etc/proflie

  5. 编辑Zookeeper的集群配置

    • 创建Zookeeper集群的数据存储目录及日志目录

      cd $ZOOKEEPER_HOME
      mkdir data
      mkdir log
      
    • 生成zookeeper配置文件

      cd ./conf
      cp zoo_sample.cfg zoo.cfg
      
    • 编辑zookeeper配置文件

      使用vim zoo.cf编辑zookeeper配置文件,在配置文件中修改如下内容:

      # 心跳时间
      tickTime=2000
      
      # follow连接leader的初始化连接时间,表示tickTime的倍数
      initLimit=10
      
      # syncLimit配置表示leader与follower之间发送消息,请求和应答时间长度。
      # 如果followe在设置的时间内不能与leader进行通信,那么此follower将被丢弃,tickTime的倍数
      syncLimit=5
      
      # 客户端连接超时时间ms
      maxClientCnxns=600
      
      # 客户端连接端口,访问 zookeeper的端口
      clientPort=2181
      
      # 节点数据存储及日志目录,需要提前创建
      dataDir=/home/sxZhang/bigdata/zookeeper/data
      dataLogDir=/home/sxZhang/bigdata/zookeeper/log
      
      server.1=10.10.10.1:2888:3888
      server.2=10.10.10.2:2888:3888
      server.3=10.10.10.3:2888:3888
      

      特别需要注意的是dataDirdataLogDirserver.x的配置,需要指定自己的Zookeeper安装路径和自己集群主机的IP。

  6. 将host01上配置好的Zookeeper文件夹打包分发到另外两个节点解压:

    集群规模较小时,分发和打包的操作可以手动在每个节点一步一步的操作,但当集群的节点规模成百上千时,显然需要一种批量操作的方式,下面代码块中的for循环语句就是用于批量处理的。Linux基础较弱看不懂该代码的读者,可自行查阅shell的循环控制语句scp的用法以及ssh远程执行命令

    使用该方式前应配置好免密登录,否则每次循环都需要输入一次密码。

    # 1.打包zookeeper文件夹
    tar -zcf zookeeper.tar.gz zookeeper
    
    # 2.以遍历的方式转发到另外两个节点
    for host in {host02,host03} #需要修改主机列表为自己的主机
    do
      scp zookeeper.tar.gz $host:~/bigdata  #修改为zk的安装路径,并保证路径存在
    done
    
    # 3..以遍历的方式在另外2个节点上解压压缩包,解压成功后删除压缩包
    for host in {host02,host03} #需要修改主机列表为自己的主机
    do
      echo 正在${host}上解压ZK压缩包到目标位置:
      ssh $host "cd ~/bigdata; tar -zxvf  ~/zookeeper.tar.gz; rm ~/zookeeper.tar.gz"
      echo 操作成功
    done
    
  7. 为每台机器配置Zookeeper的节点id

    for i in {1..3} #改成自己的id范围
    do
      node=host0$i  #改成自己的主机名形式,仅id与主机编号相同时,才可使用for循环遍历处理
      ssh $node "echo $i >~/bigdata/zookeeper/data/myid"
    done
    

    即在各个节点上,在$ZOOKEEPER_HOME/data/conf/zoo.cfgdataDir所指定的具体路径下,创建一个名为myid的文本文件,其内容为Zookeeper集群中节点的id,例如令host01、host02、host03对应的myid依次为1、2、3。

  8. 启动、查看和停止Zookeeper集群

    启动、查看和停止某个Zookeeper节点的命令分别是:

    cd $ZOOKEEPER_HOME/bin/
    ./zkServer.sh star
    ./zkServer.sh status
    ./zkServer.sh stop
    

    $ZOOKEEPER_HOME/bin/目录下存放的是zookeeper可用的可执行命令,单个节点的启动、停止、状态查看都是通过该目录下的zkServer.sh传入不同的命令参数实现的,如果正确配置了环境变量,将该目录添加到了环境变量$PATH,则可在任意路径执行该目录下的可执行文件。

    当然,因为每次仅对一个节点操作效率会很低,因此可以编写批量启动、停止、查看状态的脚步文件,首先使用vim zkcmd.sh新建一个文件,添加如下内容后保存:

    #!/bin/bash
    cmd=$1
    
    # 判断是否提供了输入参数
    if [ -z "$1" ]; then
      echo "本脚本需要输入参数cmd"
      echo -e "cmd 在 {start, stop, status} 中选择:\n-start\t启动zk集群\n-stop\t关闭zk集群\n-status\t查看zk集群状态"
      exit 1
    fi
    
    # 合法的命令集合 
    cmdlist=("start" "stop" "status")
    
    # 检查传入的命令是否合法 
    if [[ " ${cmdlist[@]} " =~ " ${cmd} " ]]; then
      # cmd合法,在zookeeper cluster上执行cmd
      for host in host{01..03}
      do
          echo 当前在${host}进行操作:
          ssh $host "zkServer.sh ${cmd}"; echo
      done
    else
      # cmd不合法,在终端进行提示
      echo "输入参数'$cmd'不合法,请从{start,stop,status}中选择命令"
    fi
    

    上述代码需要shell基础,如果读者没有shell基础,修改倒数第9行的host{01..03}亦可使用。

    保存文件后,需要对该文件添加可执行权限:

    chmod +x zkcmd.sh
    

    输入合适的参数即可批量启动、查看或关闭Zookeeper集群:

    使用sh zkcmd.sh start./zkcmd.sh start启动集群,成功的输出如下:

    当前在host01进行操作:
    ZooKeeper JMX enabled by default
    Using config: /home/sxZhang/bigdata/zookeeper/bin/../conf/zoo.cfg
    Starting zookeeper ... STARTED
    
    当前在host02进行操作:
    ZooKeeper JMX enabled by default
    Using config: /home/sxZhang/bigdata/zookeeper/bin/../conf/zoo.cfg
    Starting zookeeper ... STARTED
    
    当前在host03进行操作:
    ZooKeeper JMX enabled by default
    Using config: /home/sxZhang/bigdata/zookeeper/bin/../conf/zoo.cfg
    

    类似的,使用sh zkcmd.sh status./zkcmd.sh status查看集群状态,执行成功的输出如下:

    当前在host01进行操作:
    ZooKeeper JMX enabled by default
    Using config: /home/sxZhang/bigdata/zookeeper/bin/../conf/zoo.cfg
    Client port found: 2181. Client address: localhost. Client SSL: false.
    Mode: follower
    
    当前在host02进行操作:
    ZooKeeper JMX enabled by default
    Using config: /home/sxZhang/bigdata/zookeeper/bin/../conf/zoo.cfg
    Client port found: 2181. Client address: localhost. Client SSL: false.
    Mode: leader
    
    当前在host03进行操作:
    ZooKeeper JMX enabled by default
    Using config: /home/sxZhang/bigdata/zookeeper/bin/../conf/zoo.cfg
    Client port found: 2181. Client address: localhost. Client SSL: false.
    Mode: follower
    

    使用sh zkcmd.sh stop./zkcmd.sh stop停止ZK集群的运行。

    当前在host01进行操作:
    ZooKeeper JMX enabled by default
    Using config: /home/sxZhang/bigdata/zookeeper/bin/../conf/zoo.cfg
    Stopping zookeeper ... STOPPED
    
    当前在host02进行操作:
    ZooKeeper JMX enabled by default
    Using config: /home/sxZhang/bigdata/zookeeper/bin/../conf/zoo.cfg
    Stopping zookeeper ... STOPPED
    
    当前在host03进行操作:
    ZooKeeper JMX enabled by default
    Using config: /home/sxZhang/bigdata/zookeeper/bin/../conf/zoo.cfg
    Stopping zookeeper ... STOPPED
    

    如果想在任何路径都可以执行zkcmd.sh [start/stop/status],可以将zkcmd.sh拷贝到各个节点的$ZOOKEEPER_HOME/bin下。
    至此,拥有3个节点分布式zookeeper集群搭建成功。

  • 19
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值