• 【zookeeper】zookeeper集群安装


    环境规划

    实际的生产使用中,我们一般推荐搭建奇数多节点的zookeeper集群,如3/5/7。在本次测试中,我使用了centos7 三台服务器搭建,复用了我搭建k8s集群的环境,如下表。

    IPhostname
    192.168.2.140k8s-m1
    192.168.2.141k8s-m2
    192.168.2.142k8s-m3

    此次部署的zookeeper版本为3.7.1

    java安装

    java版本要求

    由于zookeeper服务需要java,至于版本要求,可以先将zookeeper的包下载下来解压后查看README.md 文件,里面相应说明。如 apache-zookeeper-3.7.1版本。

    [root@k8s-m1 apache-zookeeper-3.7.1-bin]# cat /opt/apache-zookeeper-3.7.1-bin/README.md 
    .....
    ## Java 8
    If you are going to compile with Java 1.8, you should use a
    recent release at u211 or above
    #说明java8的话需要u211以及以上版本
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    下面提供一个java安装的脚本,需要先下载这个包。直接在oracle上下载貌似要注册账号密码,之前用的下面的命令下载包,但是现在应该不行了。反正先找一个比要求版本高的jdk包安装就行。

    wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" https://download.oracle.com/otn-pub/java/jdk/8u191-b12/2787e4a523244c269598db4e85c51e0c/jdk-8u191-linux-x64.tar.gz
    
    • 1

    java安装脚本

    注意java需要在所有zookeeper节点上安装,我这就包括k8s-m1、k8s-m2、k8s-m3三个节点。

    [root@k8s-m1 ~]# cat install_java.sh 
    #!/bin/bash
    java -version
    if [ $? = 0 ];then
        echo "Java is installed"
    else
        echo "installing Java...."
        tar -zxf ./jdk-8u65-linux-x64.tar.gz -C /opt/
        JAVA_HOME="/opt/jdk1.8.0_65"
        echo "export JAVA_HOME=/opt/jdk1.8.0_65" >> /etc/profile
        echo "export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar" >> /etc/profile
        echo "export PATH=$JAVA_HOME/bin:$PATH" >> /etc/profile
        echo "installed successful"
    fi
    source /etc/profile
    exit
    
    ##运行脚本
    [root@k8s-m1 ~]# sh -x install_java.sh 
    [root@k8s-m1 ~]# java -version
    java version "1.8.0_65"
    Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
    Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)
    #找不到命令可以再执行一下source /etc/profile
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    zookeeper安装

    安装包下载

    下载地址https://archive.apache.org/dist/zookeeper/zookeeper-3.7.1/,目前该网站还可以下载历史版本的安装包。我们此次使用的是3.7.1版本。注意带有bin名称的包才是我们想要的下载可以直接使用的,里面有编译后的二进制的包,而之前的普通的tar.gz的包里面是只是源码的包无法直接使用。

    [root@k8s-m1 ~]# wget https://archive.apache.org/dist/zookeeper/zookeeper-3.7.1/apache-zookeeper-3.7.1-bin.tar.gz
    
    [root@k8s-m1 ~]# tar -zxf apache-zookeeper-3.7.1-bin.tar.gz -C /opt/
    [root@k8s-m1 ~]# cd /opt/apache-zookeeper-3.7.1-bin/
    
    [root@k8s-m1 apache-zookeeper-3.7.1-bin]# ls
    bin  conf  docs  lib  LICENSE.txt  log  logs  NOTICE.txt  README.md  README_packaging.md
    
    [root@k8s-m1 apache-zookeeper-3.7.1-bin]# ll lib/zookeeper-3.7.1.jar 
    -rw-r--r-- 1 kmc kmc 1305907 May  7  2022 lib/zookeeper-3.7.1.jar
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    配置更改

    默认有一个zoo_sample.cfg的配置文件,我们可以留着。直接新创建一个配置文件后再进行修改。修改完成后,可以将整个文件夹拷贝到其他两个节点再更改部分配置。

    [root@k8s-m1 apache-zookeeper-3.7.1-bin]# cd conf/
    [root@k8s-m1 apache-zookeeper-3.7.1-bin]# vi zoo.cfg 
    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/zookeeperData
    dataLogDir=/zookeeperDataLog
    clientPort=2181
    server.1=192.168.2.140:2888:3888
    server.2=192.168.2.141:2888:3888
    server.3=192.168.2.142:2888:3888
    4lw.commands.whitelist=*
    maxClientCnxns=1000
    minSessionTimeout=30000
    maxSessionTimeout=60000
    autopurge.snapRetainCount=10
    autopurge.purgeInterval=1
    #globalOutstandingLimit=200
    #preAllocSize=131072
    #snapCount=300000
    #leaderServes=yes
    
    #还需要创建上面配置中使用的两个目录,3个节点都需要创建
    [root@k8s-m1 apache-zookeeper-3.7.1-bin]# mkdir -p /zookeeperData
    [root@k8s-m1 apache-zookeeper-3.7.1-bin]# mkdir -p /zookeeperDataLog
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    部分配置说明:

    • tickTime:心跳基本时间单位,毫秒级,ZK基本上所有的时间都是这个时间的整数倍。

    • initLimit:tickTime的个数(倍数),表示在leader选举结束后,followers与leader同步需要的时间,如果followers比较多或者说leader的数据灰常多时,同步时间相应可能会增加,那么这个值也需要相应增加。当然,这个值也是follower和observer在开始同步leader的数据时的最大等待时间(setSoTimeout)

    • syncLimit:tickTime的个数(倍数),这时间容易和上面的时间混淆,它也表示follower和observer与leader交互时的最大等待时间,只不过是在与leader同步完毕之后,进入正常请求转发或ping等消息交互时的超时时间。

    • dataDir:内存数据库快照存放地址,如果没有指定事务日志存放地址(dataLogDir),默认也是存放在这个路径下,建议两个地址分开存放到不同的设备上。

    • clientPort:配置ZK监听客户端连接的端口

    • server.serverid=host:tickpot:electionport

      • server:固定写法
      • serverid:每个服务器的指定ID(必须处于1-255之间,必须每一台机器不能重复)
      • host:主机名
      • tickpot:心跳通信端口
      • electionport:选举端口
    • maxClientCnxns:默认值是10,一个客户端能够连接到同一个服务器上的最大连接数,根据IP来区分。如果设置为0,表示没有任何限制。设置该值一方面是为了防止DoS攻击。

    • minSessionTimeout:最小的session time时间,默认值是2个tick time,客户端设置的session time 如果小于这个值,则会被强制协调为这个最小值。

    • maxSessionTimeout:最大的session time 时间,默认值是20个tick time. ,客户端设置的session time 如果大于这个值,则会被强制协调为这个最大值。

    • globalOutstandingLimit:(Java system property: zookeeper.globalOutstandingLimit)默认值是1000,限定了所有连接到服务器上但是还没有返回响应的请求个数(所有客户端请求的总数,不是连接总数),这个参数是针对单台服务器而言,设定太大可能会导致内存溢出。

    • preAllocSize:(Java system property: zookeeper.preAllocSize)默认值64M,以KB为单位,预先分配额定空间用于后续transactionlog 写入,每当剩余空间小于4K时,就会又分配64M,如此循环。如果SNAP做得比较频繁(snapCount比较小的时候),那么请减少这个值。

    • snapCount:(Java system property: zookeeper.snapCount)默认值100,000,当transaction每达到snapCount/2+rand.nextInt(snapCount/2)时,就做一次SNAPSHOT,默认情况下是50,000~100,000条transactionlog就会做一次,之所以用随机数是为了避免所有服务器可能在同一时间做snapshot.

    分发文件

    [root@k8s-m1 conf]# scp -r /opt/apache-zookeeper-3.7.1-bin/ 192.168.2.141:/opt/
    [root@k8s-m1 conf]# scp -r /opt/apache-zookeeper-3.7.1-bin/ 192.168.2.142:/opt/
    
    • 1
    • 2

    serverid 配置

    最重要的步骤,一定不能忘了。 需要去的各个 ZooKeeper 服务器节点,在新建的dataDir目录中,这个目录就是在 zoo.cfg 中配置的 dataDir 的目录,新建一个名叫 myid的文件,该文件里面的内容就是服务器的 id,而id就是 server.1=192.168.2.140:2888:3888当中对应的id,如k8s-m1节点上myid的内容为1,:

    [root@k8s-m1 zookeeperData]# cat  myid 
    1
    
    • 1
    • 2

    其他两个节点配置类似依次为2,3。 到此,我们 ZooKeeper相关的配置文件就修改完成了。

    zookeeper服务启动与停止

    3台服务器都需要操作

    [root@k8s-m1 ~]# /opt/apache-zookeeper-3.7.1-bin/bin/zkServer.sh start
    [root@k8s-m1 ~]# /opt/apache-zookeeper-3.7.1-bin/bin/zkServer.sh stop
    
    • 1
    • 2

    zookeeper服务检查

    #进程检查,3台机器上都有QuorumPeerMain进程
    [root@k8s-m1 opt]# jps | grep QuorumPeerMain
    10277 QuorumPeerMain
    [root@k8s-m1 opt]# ps -ef |grep zookeeper
    
    # 角色查询
    [root@k8s-m1 opt]# /opt/apache-zookeeper-3.7.1-bin/bin/zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /opt/apache-zookeeper-3.7.1-bin/bin/../conf/zoo.cfg
    Client port found: 2181. Client address: localhost. Client SSL: false.
    Mode: follower
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    通过系统服务管理zookeeper

    有时候时间久了不记得zookeeper的目录,或者为了方便对zookeeper服务的管理等。3台服务器都需要进行操作。

    [root@k8s-m1 ~]# cat /usr/lib/systemd/system/zookeeper.service 
      [Unit]
      Description=Zookeeper service
      After=network.target
      
      [Service]
      Type=simple
      #Environment=ZOO_LOG_DIR=/opt/apache-zookeeper-3.7.1-bin/log
      PIDFile=/zookeeperData/zookeeper_server.pid
      ExecStart=/opt/apache-zookeeper-3.7.1-bin/bin/zkServer.sh start
      ExecStop=/opt/apache-zookeeper-3.7.1-bin/bin/zkServer.sh stop
      
      [Install]
      WantedBy=multi-user.target
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    通过systemctl来管理zookeeper需要修改zkServer.sh 文件。大致位置如下,只需要添加java的home路径

    vim /opt/apache-zookeeper-3.7.1-bin/bin/zkServer.sh
    ......
    # use POSIX interface, symlink is followed automatically
    ZOOBIN="${BASH_SOURCE-$0}"
    ZOOBIN="$(dirname "${ZOOBIN}")"
    ZOOBINDIR="$(cd "${ZOOBIN}"; pwd)"
    JAVA_HOME='/opt/jdk1.8.0_65
    ......
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    然后就可以用systemctl来管理zookeeper

    [root@k8s-m1 apache-zookeeper-3.7.1-bin]# systemctl enable zookeeper.service 
    Created symlink from /etc/systemd/system/multi-user.target.wants/zookeeper.service to /usr/lib/systemd/system/zookeeper.service.
    [root@k8s-m1 apache-zookeeper-3.7.1-bin]# systemctl start zookeeper.service 
    [root@k8s-m1 apache-zookeeper-3.7.1-bin]# systemctl status zookeeper.service 
    
    • 1
    • 2
    • 3
    • 4

    更多关于zookeeper的知识分享,请前往博客主页。编写过程中,难免出现差错,敬请指出

  • 相关阅读:
    多线程获取官方汇率
    应用ceph块存储(ceph-13.2.10)
    图像处理7-图像增强
    竞赛选题 深度学习二维码识别
    Spring 6.X IoC 容器
    Pyside6/PyQt6的QTreeWidget如何添加多级子项,如何实现选中父项,子项也全部选中功能,源码示例
    mybatis各阶段的详解
    浙大MBA经验分享:在工作生活的缝隙中奋勇上岸
    数学建模笔记
    QGIS编译(跨平台编译)之四十三:NetCDF编译(Windows、Linux、MacOS环境下编译)
  • 原文地址:https://blog.csdn.net/margu_168/article/details/132598962