美文网首页
软件篇-kafka(四)-集群-zookeeper集群

软件篇-kafka(四)-集群-zookeeper集群

作者: 秃头猿猿 | 来源:发表于2021-05-11 21:27 被阅读0次

    Zookeeper

    1.简介

    zookeeper是 一个分布式的协调者,从名字可以看出来,zookeeper是动物管理员的意思。

    从其官网的介绍可以知道 它是一个用于维护,命名,提供分布式同步和提供服务的一个集中式组件。

    很多组件在做分布式时,例如:kafka,都会面临一些问题:

    • 当组件搭建集群时,无法通过自己去抉择出主和从

      一旦主节点挂掉,那么无法自动选择其节点成为主节点,从而导致整个集群挂掉。

    • 集群元数据信息无法存储

    基于上述原因出现了zookeeper,因此要搞懂分布式还是要先搞懂zookeeper组件

    注意:有一些组件在集群时不需要依赖于zookeeper,因为组件本身就具备了集群机制

    例如:ElasticSearch

    注意:zookeeper不仅仅可以是协调者,还可以充当dubbo或者springcloud的注册中心

    2.安装(普通)

    2.1 准备

    先准备三台虚拟机来搭建zookeeper集群,这里我选择的操作系统为centos,同时三台机器IP如下:

    • 192.168.80.130
    • 192.168.80.131
    • 192.168.80.132

    zookeeper之前需要先在三台机器安装java,这里就不细说了

    同时在三台机器上创建kafka用户,方便后期进行管理。当然不安装也可以,把所有的软件安装在同一个用户下也是可以的

    个人建议还是创建用户,不同的软件安装不同的用户下,方便管理

    创建组和用户命令如下

    groupadd kafka
    useradd -g kafka -s /bin/bash -d /home/kafka  -m kafka
    

    创建目录用来存放zookeeper存放

    mkdir -p /var/data/zookeeper
    

    修改文件该目录的组和拥有者

    chown -R kafka:kafka /var/data/zookeeper
    

    注意:三台机器都要操作

    2.2 下载

    zookeeper官网下载安装包,目前我下载的是3.7.0版本

    image-20210505220037946

    2.3 开始

    2.3.1 解压

    有了上面的准备之后,接下来就可以正式安装zookeeper了,先将在三台机器上分别解压下载好的安装包,命令如下:

    tar -zxvf /home/apache-zookeeper-3.7.0-bin/zookeeper.tar.gz -C /opt
    
    mv /opt/apache-zookeeper-3.7.0-bin /opt/zookeeper
    

    修改安装目录的拥有者和组

    chown -R kafka:kafka /opt/zookeeper
    

    注意:三台机器都要操作且同时机器安装好java环境

    2.3.2 安装

    进入到zookeeperconf目录下,将zoo_sample.cfg文件复制为zoo.cfg

    cd /opt/zookeeper/conf
    cp zoo_sample.cfg zoo.cfg
    

    修改zoo.cfg文件,具体修改内容如下:

    #客户端与服务器之间维持心跳的间隔,每隔2000毫秒就会客户端就会像服务器发送一个心跳
    tickTime=2000
    
    # 允许从节点连接并同步到主节点的初始化连接时间
    # 这个值是tickTime的倍数,所以initlimit是10* 2OOOms,也就是20s
    initLimit=10
    
    # 表示允许从节点与主节点处于不同步状态的时间上限,如果从节点在于主节点在这个时间内,没有完成同步,那么这个从节点就会被舍弃
    # 这个值也是tickTime的倍数,所以syncLimit是 5 * 2000ms 也就是10s
    syncLimit=5
    
    # 存储内存中数据快照的位置
    dataDir=/var/data/zookeeper
    
    # 客户的端连接的端口
    clientPort=2181
    
    # 服务器编号  
    # 2888 zookeeper之间通信端口
    # 3888 选择leader端口
    # ip为zookeeper服务器ip
    server.0=192.168.80.130:2888:3888
    server.1=192.168.80.131:2888:3888
    server.2=192.168.80.132:2888:3888
    

    注意:三台机器都要改

    在上述指定的目录中/var/data/zookeeper,创建myid文件,并且文件的内容与上述的内容一致。

    例如,在192.168.80.131机器上创建myid文件,而131这台机器对应的server配置是server.1

    image-20210511210257129

    因此myid文件的内容就为1,同理,其他的机器也要配置成对应的内容

    image-20210511210353180

    2.3.3 环境

    上述步骤完成后,就可以去启动zookeeper

    注意 启动时需要关闭防火墙 或者把 2181端口加入到防火墙

    # 关闭防火墙
    systemctl stop firewalld
    
    # 加入端口
    firewall-cmd --add-port 2181/tcp --permanent
    firewall-cmd --add-port 2888/tcp --permanent
    firewall-cmd --add-port 3888/tcp --permanent
    firewall-cmd --reload
    

    启动zookeeper

    /opt/zookeeper/bin/zkServer.sh start
    

    发现以后每次去启动,都要到指定目录下去通过zkServer.sh启动,为了方便的启动zookeeper,可以配置环境变量,命令如下

    vi /etc/profie
    

    在文件末尾追加内容如下:

    export ZK_HOME=/opt/zookeeper
    export PATH=$PATH:$ZK_HOME/bin             
    
    image-20210511205357702

    输入以下指令让配置文件生效

     source /etc/profile
    

    注意:三台机器都要改

    2.3.4 启动

    输入以下指令:

    • 启动zookeeper

      zkServer.sh start
      
    • 停止zookeeper

      zkServer.sh stop
      
    • 查看集群状态

      zkServer.sh status
      

    例如查看集群状态:

    image-20210505231000906

    这样一个zookeeper集群搭建完毕

    2.4 服务

    虽然上述步骤中,通过配置变量让启动zookeeper启动更加优雅,但是还是有点不太方便

    更好是把启动交给systemd去管理,因此就需要把zookeeper做成一个服务,操作如下:


    2.4.1 配置

    /etc/systemd/system目录下创建一个zookeeper.service文件,其内容如下:

    [Unit]
    # 服务描述
    Description=zookeeper.service
    #
    # 在网络服务启动后运行
    After=network.target
    #
    [Service]
    # 指定以什么用户去启动
    User=kafka
    # 指定用户组
    Group=kafka
    # Type 必须为 forking 否则无法启动,
    Type=forking
    
    # 指定要依赖的环境
    Environment=JAVA_HOME=/opt/jdk
    #
    # 启动命令
    ExecStart=/opt/zookeeper/bin/zkServer.sh start
    #
    # 停止命令
    ExecStop=/opt/zookeeper/bin/zkServer.sh stop
    #
    # 重启命令
    ExecReload=/opt/zookeeper/bin/zkServer.sh restart
    
    # 启动失败后重启
    Restart=on-failure
    # 每次尝试重启间隔60秒
    StartLimitInterval=60
    # 最终尝试重启3000次
    StartLimitBurst=3000
    
    #
    [Install]
    WantedBy=multi-user.target
    

    注意:三台机器都要配置,同时需要修改文件权限

    chmod o+x,u+x,g+x /etc/systemd/system/zookeeper.service

    由于之前的操作是在root用户下操作,所以之前启动zookeeperZK_HOME下产生了logs目录

    image-20210511211009454

    而现在systemd是以kafka用户去启动,而这个用户是没有权限去访问logs目录,因此需要修改

    chown -R kafka:kafka /opt/zookeeper
    

    三台机器都要操作

    2.4.2 操作

    让配置生效

    systemctl daemon-reload
    

    启动zookeeper

    systemctl start zookeeper
    

    查看zookeeper运行状态

    systemctl status zookeeper
    

    关闭zookeeper

    systemctl stop zookeeper
    

    重启zookeeper

    systemctl restart zookeeper
    

    开机自启动

    systemctl enable zookeeper
    

    3.安装(docker)

    3.1 镜像

    docker pull zookeeper
    

    注意三台机器均要拉去zookeeper镜像

    3.2 容器

    在三台机器中分别创建zookeeper容器,命令如下:

    192.168.80.132上执行以下命令

    docker run -di --name=zookeeper --net=host \
    -v /opt/zookeeper/logs:/opt/zookeeper/logs \
    -v /opt/zookeeper/data:/data \
    -v /opt/zookeeper/datalog:/datalog \
    -e "ZOO_MY_ID=1" \
    -e "ZOO_SERVERS=server.1=0.0.0.0:2888:3888;2181 server.2=192.168.80.131:2888:3888;2181 server.3=192.168.80.132:2888:3888;2181" --restart=always zookeeper
    

    192.168.80.133上执行以下命令

    docker run -di --name=zookeeper --net=host \
    -v /opt/zookeeper/logs:/opt/zookeeper/logs \
    -v /opt/zookeeper/data:/data \
    -v /opt/zookeeper/datalog:/datalog \
    -e "ZOO_MY_ID=2" \
    -e "ZOO_SERVERS=server.1=192.168.80.130:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=192.168.80.132:2888:3888;2181" --restart=always zookeeper
    

    192.168.80.134上执行以下命令

    docker run -di --name=zookeeper --net=host \
    -v /opt/zookeeper/logs:/opt/zookeeper/logs \
    -v /opt/zookeeper/data:/data \
    -v /opt/zookeeper/datalog:/datalog \
    -e "ZOO_MY_ID=3" \
    -e "ZOO_SERVERS=server.1=192.168.80.130:2888:3888;2181 server.2=192.168.80.131:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181" --restart=always zookeeper
    

    自此zookeeper集群搭建成功。

    当然我个人不推荐直接上手docker搭建,原生搭建方式虽然复杂一点,但是掌握了这种方式,再用docker就更加熟悉其原理了

    相关文章

      网友评论

          本文标题:软件篇-kafka(四)-集群-zookeeper集群

          本文链接:https://www.haomeiwen.com/subject/izwndltx.html