• 在Linux上安装Zookeeper集群(zookeeper-3.5.9)


    记录:455

    场景:在CentOS 7.9操作系统上,使用zookeeper-3.5.9版本,在三台机器上,安装Zookeeper集群。

    版本:zookeeper-3.5.9,CentOS 7.9,Linux kernel-5.4.218。

    1.主机规划

    目标:使用三台主机部署Zookeeper集群。

    主机app161;IP:192.168.19.161;端口:22181,28001,28501。

    主机app162;IP:192.168.19.162;端口:22181,28001,28501。

    主机app163;IP:192.168.19.163;端口:22181,28001,28501。

    2.下载zookeeper-3.5.9安装包

    下载版本:apache-zookeeper-3.5.9-bin.tar.gz

    下载地址:https://archive.apache.org/dist/zookeeper/

    下载命令:wget https://archive.apache.org/dist/zookeeper/zookeeper-3.5.9/apache-zookeeper-3.5.9-bin.tar.gz

    解析:下载完成后,apache-zookeeper-3.5.9.tar.gz包在当前目录。

    3.解压zookeeper包到指定目录

    3.1解压

    命令:tar -zxvf /home/apps/software/apache-zookeeper-3.5.9-bin.tar.gz -C /home/opt/zk

    解析:解压到指定目录:/home/opt/zk/apache-zookeeper-3.5.9-bin。

    3.2重命名

    命令:mv /home/opt/zk/apache-zookeeper-3.5.9-bin /home/opt/zk/zookeeper-3.5.9

    解析:把apache-zookeeper-3.5.9重命名为zookeeper-3.5.9。

    4.创建zookeeper的数据和日志目录

    数据和日志目录可以放在/home/opt/zk/zookeeper-3.5.9内,也可以独立放置。

    数据目录命令:mkdir -p /home/opt/zk/data

    日志目录命令:mkdir -p /home/opt/zk/log

    解析:data目录是存放zookeeper运行数据。log目录存放zookeeper运行日志。

    5.修改zookeeper的配置

    5.1把zoo_sample.cfg复制并重命名为zoo.cfg

    命令:cp -r /home/opt/zk/zookeeper-3.5.9/conf/zoo_sample.cfg  /home/opt/zk/zookeeper-3.5.9/conf/zoo.cfg

    解析:zoo_sample.cfg是官方提供的模板配置,用户按需配置就行。

    (1)把zoo_sample.cfg复制并重命名为zoo.cfg

    5.2修改zoo.cfg配置文件

    修改命令:vi /home/opt/zk/zookeeper-3.5.9/conf/zoo.cfg

    修改内容:

    1. #修改数据目录和日志目录
    2. dataDir=/home/opt/zk/data
    3. dataLogDir=/home/opt/zk/log
    4. #修改端口号,默认是2181
    5. clientPort=22181
    6. #zookeeper集群配置
    7. server.1=192.168.19.161:28001:28501
    8. server.2=192.168.19.162:28001:28501
    9. server.3=192.168.19.163:28001:28501

    5.3解析集群配置格式

    在zoo.cfg文件中的zookeeper集群配置格式说明。

    格式: server.A = B:C:D

    A: 是一个数字,集群中表示第几号服务器。

    B: 服务器IP地址。

    C: 是一个端口号,用来集群成员的信息交换,表示这个服务器与集群中的leader服务器交换信息的端口。

    D: 是一个端口号,是在leader挂掉是专门用来进行选举leader所用的端口。

    6.把主机app161配置的zookeeper拷贝到其它主机

    6.1远程创建目录

    脚本名称:mkdir_script.sh

    脚本内容:

    1. #!/bin/bash
    2. for host_name in app162 app163
    3. do
    4. ssh -t root@${host_name} 'mkdir -p /home/opt/zk/zookeeper-3.5.9/ ;\
    5. mkdir -p /home/opt/zk/data/ ;\
    6. mkdir -p /home/opt/zk/log/'
    7. done

    执行脚本:bash mkdir_script.sh

    6.2远程拷贝zookeeper到其它主机

    脚本名称:scp_script.sh

    脚本内容:

    1. #!/bin/bash
    2. for host_name in app162 app163
    3. do
    4. scp -r /home/opt/zk/zookeeper-3.5.9/* root@${host_name}:/home/opt/zk/zookeeper-3.5.9
    5. scp -r /home/opt/zk/data/* root@${host_name}:/home/opt/zk/data
    6. scp -r /home/opt/zk/log* root@${host_name}:/home/opt/zk/log
    7. done

    执行脚本:bash scp_script.sh

    7.创建myid文件和写入编号

    命令:echo '1' > /home/opt/zk/data/myid

    解析:如果同一台主机部署zookeeper集群多个节点,那么myid的值需不一样。

    脚本名称:create_myid_script.sh

    脚本内容:

    1. #!/bin/bash
    2. for host_name in app161 app162 app163
    3. do
    4. if [[ ${host_name} = 'app161' ]] ;then
    5. ssh -t root@${host_name} " echo '1' > /home/opt/zk/data/myid "
    6. elif [[ ${host_name} = 'app162' ]] ;then
    7. ssh -t root@${host_name} " echo '2' > /home/opt/zk/data/myid "
    8. elif [[ ${host_name} = 'app163' ]] ;then
    9. ssh -t root@${host_name} " echo '3' > /home/opt/zk/data/myid "
    10. fi
    11. done

    执行脚本:bash create_myid_script.sh

    解析:每台主机的myid编号是不一样的。检测两个字符串是否相等使用“=”,同时“=”两边有空格。

    8.修改zookeeper目录所有权

    在此步骤前,zookeeper相关操作使用root用户操作。生产环境一般运行zookeeper使用普通用户,修改目录所有权。

    脚本名称:chown_script.sh

    脚本内容:

    1. #!/bin/bash
    2. for host_name in app161 app162 app163
    3. do
    4. ssh -t root@${host_name} 'chown -R learn:learn /home/opt/zk/'
    5. done

    执行脚本:bash chown_script.sh

    解析:把/home/opt/zk/目录所有权赋给learn用户。如下:

    zookeeper主目录:/home/opt/zk/zookeeper-3.5.9。

    zookeeper数据目录:/home/opt/zk/data。

    zookeeper日志目录:/home/opt/zk/log。

    9.启动zookeeper集群

    操作用户切换为learn用户:su learn

    启动zookeeper集群,只需启动每个节点,zookeeper会自动组成集群。

    9.1启动zookeeper集群(逐台启动)

    使用启动名到每台主机启动zookeeper就行。

    使用用户:su learn

    操作目录:/home/opt/zk/zookeeper-3.5.9/bin

    启动命令:sh zkServer.sh start

    解析:每次都登录集群主机,挺麻烦,可以考虑使用脚本启动。

    9.2启动zookeeper集群(使用脚本启动)

    脚本名称:zk-start_script.sh

    脚本内容:

    1. #!/bin/bash
    2. for host_name in app161 app162 app163
    3. do
    4. ssh -t learn@${host_name} 'cd /home/opt/zk/zookeeper-3.5.9/bin/ ; sh zkServer.sh start '
    5. done

    执行脚本:sh zk-start_script.sh

    日志信息:

    9.3使用脚本启动zookeeper需修改zkEnv.sh文件

    本例中,当使用脚本启动zookeeper集群需修改zkEnv.sh文件。

    (1)修改主机app161的zkEnv.sh

    文件全路径:/home/opt/zk/zookeeper-3.5.9/bin/zkEnv.sh

    修改内容:

    JAVA_HOME=/home/apps/module/jdk1.8.0_281

    解析:在使用脚本远程启动时,报错:Error: JAVA_HOME is not set and java could not be found in PATH.因此,在zkEnv.sh文件指定环境变量。

    (2)把修改zkEnv.sh同步到其它主机

    脚本名称:scp_zkEnv.sh

    脚本内容:

    1. for host_name in app162 app163
    2. do
    3. scp -r /home/opt/zk/zookeeper-3.5.9/bin/zkEnv.sh root@${host_name}:/home/opt/zk/zookeeper-3.5.9/bin/zkEnv.sh
    4. done

    执行脚本:bash scp_zkEnv.sh

    10.查看zookeeper集群启动状态

    脚本名称:zk-status_script.sh

    脚本内容:

    1. #!/bin/bash
    2. for host_name in app161 app162 app163
    3. do
    4. echo "查看主机 ${host_name} 启动端口:"
    5. ssh -t learn@${host_name} ' netstat -tlnp | grep java '
    6. done

    执行脚本:bash zk-status_script.sh

    日志信息:

    11.使用客户端登录集群

    客户端:/home/opt/zk/zookeeper-3.5.9/bin/zkCli.sh

    连接命令:

    sh zkCli.sh -timeout 5000 -server 192.168.19.161:22181

    sh zkCli.sh -timeout 5000 -server 192.168.19.162:22181

    sh zkCli.sh -timeout 5000 -server 192.168.19.163:22181

    12.查看zookeeper集群信息

    脚本名称:zk-cluster.sh

    脚本内容:

    1. #!/bin/bash
    2. for host_name in app161 app162 app163
    3. do
    4. echo "查看主机 ${host_name} 在集群角色:"
    5. ssh -t learn@${host_name} 'cd /home/opt/zk/zookeeper-3.5.9/bin/ ; sh zkServer.sh status '
    6. done

    执行脚本:bash zk-cluster.sh

    日志信息:

    以上,感谢。

    2023年6月11日

  • 相关阅读:
    【数据结构】链表
    正则 删除特定字符后面所有的元素(不区分大小写)
    Docker容器内用户与宿主机用户同名不同ID的问题
    【微信小程序】文章设置
    [附源码]java毕业设计火车票预订系统论文2022
    华为od(D卷)最大N个数和最小N个数的和
    【MyBatis】#{ } 和 ${ } 的区别
    这两天搭建环境遇到的几个问题
    KD01策略丨SuperTrend+空头波段
    NEFU离散数学实验1-排列组合
  • 原文地址:https://blog.csdn.net/zhangbeizhen18/article/details/131153837