• zookeeper


    zookeeper

    zookeeper-ha

    软件版本
    openEuler24.03
    jdk21.0.5
    zookeeper3.9.3
    主机名IP地址
    lihaozhe01192.168.10.101
    lihaozhe02192.168.10.102
    lihaozhe03192.168.10.103

    1. 升级内核和软件

    yum -y update
    

    2. 安装常用软件

    yum -y install gcc gcc-c++ autoconf automake cmake make \
     zlib zlib-devel openssl openssl-devel pcre-devel \
     rsync openssh-server vim man zip unzip net-tools tcpdump lrzsz tar wget
    

    3. 关闭防火墙

    sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
    setenforce 0
    systemctl stop firewalld
    systemctl disable firewalld
    

    4. 修改主机名

    lihaozhe01

    hostnamectl set-hostname lihaozhe01
    

    saprk02

    hostnamectl set-hostname lihaozhe02
    

    lihaozhe03

    hostnamectl set-hostname lihaozhe03
    

    5. 修改IP地址

    vim /etc/sysconfig/network-scripts/ifcfg-ens160
    

    参考如下:

    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    BOOTPROTO=none
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    IPV6_ADDR_GEN_MODE=eui64
    NAME=ens160
    UUID=1851e3d6-81c4-4af7-90b1-63482c79813c
    DEVICE=ens160
    ONBOOT=yes
    IPADDR=192.168.10.100
    PREFIX=24
    GATEWAY=192.168.10.2
    DNS1=192.168.10.2
    

    6. 修改hosts配置文件

    vim /etc/hosts
    

    修改内容如下:

    192.168.10.101	lihaozhe01
    192.168.10.102	lihaozhe02
    192.168.10.103	lihaozhe03
    

    7. 重启系统

    reboot
    

    8. 下载安装JDK和Zookeeper并配置环境变量

    在所有主机节点创建软件目录

    mkdir -p /opt/soft 
    

    以下操作在 lihaozhe01 主机上完成

    进入软件目录

    cd /opt/soft
    

    下载JDK

    wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz
    

    下载 Zookeeper

    wget https://dlcdn.apache.org/zookeeper/zookeeper-3.9.3/apache-zookeeper-3.9.3-bin.tar.gz
    

    解压 JDK 修改名称

    解压 zookeeper 修改名称

    tar -zxvf jdk-21_linux-x64_bin.tar.gz
    mv jdk-21.0.5 jdk-21
    tar -zxvf apache-zookeeper-3.9.3-bin.tar.gz
    mv apache-zookeeper-3.9.3-bin zookeeper-3
    

    配置环境变量

    vim /etc/profile
    

    追加以下内容:

    export Java_HOME=/opt/soft/jdk-21
    export ZOOKEEPER_HOME=/opt/soft/zookeeper-3
    
    export PATH=$PATH:$Java_HOME/bin:$ZOOKEEPER_HOME/bin
    

    在各服务器上使环境变量生效

    source /etc/profile
    

    验证环境变量

    printenv
    

    10. 编辑配置文件

    rm -rf $ZOOKEEPER_HOME/docs
    
    cd $ZOOKEEPER_HOME/conf
    
    vim zoo.cfg
    

    不要使用这个配置,这个配置仅仅是配置文件说明

    # 心跳单位,2s
    tickTime=2000
    # zookeeper-3初始化的同步超时时间,10个心跳单位,也即20s
    initLimit=10
    # 普通同步:发送一个请求并得到响应的超时时间,5个心跳单位也即10s
    syncLimit=5
    # 内存快照数据的存储位置
    dataDir=/home/zookeeper-3/data
    # 事务日志的存储位置
    dataLogDir=/home/zookeeper-3/datalog
    # 当前zookeeper-3节点的端口 
    clientPort=2181
    # 单个客户端到集群中单个节点的并发连接数,通过ip判断是否同一个客户端,默认60
    maxClientCnxns=1000
    # 保留7个内存快照文件在dataDir中,默认保留3个
    autopurge.snapRetainCount=7
    # 清除快照的定时任务,默认1小时,如果设置为0,标识关闭清除任务
    autopurge.purgeInterval=1
    #允许客户端连接设置的最小超时时间,默认2个心跳单位
    minSessionTimeout=4000
    #允许客户端连接设置的最大超时时间,默认是20个心跳单位,也即40s,
    maxSessionTimeout=300000
    #zookeeper-3 3.5.5启动默认会把AdminService服务启动,这个服务默认是8080端口
    admin.serverPort=9001
    #集群地址配置
    server.1=lihaozhe01:2888:3888
    server.2=lihaozhe02:2888:3888
    server.3=lihaozhe03:2888:3888
    

    使用这个配置

    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/home/zookeeper-3/data
    dataLogDir=/home/zookeeper-3/datalog 
    clientPort=2181
    maxClientCnxns=1000
    autopurge.snapRetainCount=7
    autopurge.purgeInterval=1
    minSessionTimeout=4000
    maxSessionTimeout=300000
    admin.serverPort=9001
    server.1=lihaozhe01:2888:3888
    server.2=lihaozhe02:2888:3888
    server.3=lihaozhe03:2888:3888
    

    11. 保存后根据配置文件创建目录

    在每台服务器上执行

    mkdir -p /home/zookeeper-3/data
    mkdir -p /home/zookeeper-3/datalog
    

    12. 编写zookeeper-3开机启动脚本

    在/etc/systemd/system/文件夹下创建一个启动脚本zookeeper-3.service

    注意:在每台服务器上编写

    cd /etc/systemd/system
    vim zookeeper.service
    

    内容如下:

    [Unit]
    Description=zookeeper
    After=syslog.target network.target
    
    [Service]
    Type=forking
    Environment=ZOO_LOG_DIR=/home/zookeeper-3/datalog
    Environment=JAVA_HOME=/opt/soft/jdk-21
    ExecStart=/opt/soft/zookeeper-3/bin/zkServer.sh start
    ExecStop=/opt/soft/zookeeper-3/bin/zkServer.sh stop
    Restart=always
    User=root
    Group=root
    
    [Install]
    WantedBy=multi-user.target
    

    服务启动步骤需要所有节点配置完成后执行,即以下步骤暂时

    systemctl daemon-reload
    # 等所有主机配置好后再执行以下命令
    systemctl start zookeeper
    systemctl enable zookeeper
    systemctl status zookeeper
    

    13. 配置ssh免密钥登录

    创建本地秘钥并将公共秘钥写入认证文件

    ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
    
    ssh-copy-id root@lihaozhe01
    
    ssh-copy-id root@lihaozhe02
    
    ssh-copy-id root@lihaozhe03
    
    ssh root@lihaozhe01
    exit
    
    ssh root@lihaozhe02
    exit
    
    ssh root@lihaozhe03
    exit
    

    14. 分发软件和配置文件

    分发 ssh 免密钥

    scp -r ~/.ssh root@lihaozhe02:~/
    scp -r ~/.ssh root@lihaozhe03:~/
    

    分发 hosts 文件

    scp -r /etc/hosts root@lihaozhe02:/etc/
    scp -r /etc/hosts root@lihaozhe03:/etc/
    

    分发软件

    scp -r /opt/soft/jdk-21 root@lihaozhe02:/opt/soft
    scp -r /opt/soft/zookeeper-3 root@lihaozhe02:/opt/soft
    scp -r /opt/soft/jdk-21 root@lihaozhe03:/opt/soft
    scp -r /opt/soft/zookeeper-3 root@lihaozhe03:/opt/soft
    
    

    分发环境变量

    scp /etc/profile root@lihaozhe02:/etc
    scp /etc/profile root@lihaozhe03:/etc
    

    分发开启启动脚本

    scp /etc/systemd/system/zookeeper.service root@lihaozhe02:/etc/systemd/system
    scp /etc/systemd/system/zookeeper.service root@lihaozhe03:/etc/systemd/system
    

    在所有主机节点 使新的环境变量生效

    source /etc/profile
    

    15. myid

    lihaozhe01

    echo 1 > /home/zookeeper-3/data/myid
    more /home/zookeeper-3/data/myid
    

    lihaozhe02

    echo 2 > /home/zookeeper-3/data/myid
    more /home/zookeeper-3/data/myid
    

    lihaozhe03

    echo 3 > /home/zookeeper-3/data/myid
    more /home/zookeeper-3/data/myid
    

    16. 启动服务

    在各节点执行以下命令

    systemctl daemon-reload
    systemctl start zookeeper
    systemctl enable zookeeper
    systemctl status zookeeper
    

    17. 验证

    jps
    
    zkServer.sh status
    

    18. 修改 windows hosts文件

    C:\Windows\System32\drivers\etc\hosts

    使用管理员身份打开 powershell 执行以下命令

    cd drivers/etc
    attrib -r hosts
    start hosts
    

    hosts 文件追加以下内容:

    192.168.10.101	lihaozhe01
    192.168.10.102	lihaozhe02
    192.168.10.103	lihaozhe03
    

    powershell
    hosts

    19. 浏览器访问 AdminServer

    浏览器访问:http://lihaozhe03:9001/commands

    zookeeper AdminServer

    zookeeper shell

    zookeeper 存储结构类似于Linux文件系统 使用根结构

    node 不是文件也不是目录

    客户端命令行

    # 连接本地服务
    zkCli.sh
    # 连接其他节点
    zkCli.sh -server spark02:2181
    # 这里并不是连接了三个节点,而是按照顺序连接一个,当第一个连接无法获取时,就连接第二个
    zkCli.sh -server spark01:2181,spark02:2181,spark03:2181
    

    查看帮助

    help
    ZooKeeper -server host:port -client-configuration properties-file cmd args
    	addWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVE
    	addauth scheme auth
    	close 
    	config [-c] [-w] [-s]
    	connect host:port
    	create [-s] [-e] [-c] [-t ttl] path [data] [acl]
    	delete [-v version] path
    	deleteall path [-b batch size]
    	delquota [-n|-b|-N|-B] path
    	get [-s] [-w] path
    	getAcl [-s] path
    	getAllChildrenNumber path
    	getEphemerals path
    	history 
    	listquota path
    	ls [-s] [-w] [-R] path
    	printwatches on|off
    	quit 
    	reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]
    	redo cmdno
    	removewatches path [-c|-d|-a] [-l]
    	set [-s] [-v version] path data
    	setAcl [-s] [-v version] [-R] path acl
    	setquota -n|-b|-N|-B val path
    	stat [-w] path
    	sync path
    	version 
    	whoami
    

    连接其他节点

    # 在某节点连接其他节点
    connect spark01:2181
    

    退出

    quit
    

    查看节点

    ls /
    ls -s /
    
    cZxid = 0x0	# 节点创建的时候的zxid 
    ctime = Thu Jan 01 08:00:00 CST 1970  # 节点创建的时候的zxid
    mZxid = 0x0 #节点修改的时候的zxid,与子节点的修改无关
    mtime = Thu Jan 01 08:00:00 CST 1970 # 节点修改的时间
    pZxid = 0x0  # 子节点的创建/删除对应的 zxid,和修改无关,和孙子节点无关
    cversion = -1 # 子节点的更新次数
    dataVersion = 0 # 节点数据的更新次数
    aclVersion = 0 # 节点(ACL)的更新次数
    ephemeralOwner = 0x0 # 值表示与该节点绑定的 session id. 如果该节点不是 ephemeral 节点, ephemeralOwner 值为0
    dataLength = 0  # 节点数据的字节数
    numChildren = 1 # 节点数据的字节数
    

    创建节点

    持久

    临时

    有序号

    无序号

    # 持久无序号
    # 节点lihaozhe存储的数据是 李昊哲
    create /lihaozhe "李昊哲"
    # 节点lihaozhe存储的数据是 空
    create /lihaozhe ""
    
    # 查看该节点中的文件或目录,[]代表其中没有文件或子目录
    [zk: localhost:2181(CONNECTED) 7] ls /lihaozhe
    []
    
    # 创建持久无序号子节点
    create /lihaozhe/zk01
    # 创建持久有序号子节点
    create -s /lihaozhe/zk01
    
    # 创建临时无序号节点
    create -e /lihaozhe/zk10
    # 创建临时有序号节点
    create -e -s /lihaozhe/zk10
    

    删除节点

    delete /lihaozhe/zk04
    delete /lihaozhe/zk01 # Node not empty: /lihaozhe/zk01
    deleteall /lihaozhe
    

    获取节点数据

    get /lihaozhe
    

    设置节点数据

    set /lihaozhe "李大宝"
    

    关闭当前session

    close
    

    监听

    # NodeChildrenChanged
    ls -w /lihaozhe
    # NodeDataChanged
    stat -w /lihaozhe
    # 
    

    localhost:2181(CONNECTED) 7] ls /lihaozhe
    []

    创建持久无序号子节点

    create /lihaozhe/zk01

    创建持久有序号子节点

    create -s /lihaozhe/zk01

    创建临时无序号节点

    create -e /lihaozhe/zk10

    创建临时有序号节点

    create -e -s /lihaozhe/zk10

    
    ### 删除节点
    
    ```bash
    delete /lihaozhe/zk04
    delete /lihaozhe/zk01 # Node not empty: /lihaozhe/zk01
    deleteall /lihaozhe
    

    获取节点数据

    get /lihaozhe
    

    设置节点数据

    set /lihaozhe "李大宝"
    

    关闭当前session

    close
    

    监听

    # NodeChildrenChanged
    ls -w /lihaozhe
    # NodeDataChanged
    stat -w /lihaozhe
    # 
    
  • 相关阅读:
    【Linux】进程地址空间
    车载以太网解决方案,你了解多少?
    ADB与 Android 设备建立连接并进行通信
    设计模式之装饰模式
    解析Moonbeam的安全性、互操作性和市场竞争力
    【问题思考总结】联合概率密度和条件概率密度的化简方法【通过样本空间进行辨析,离连型随机变量】
    Filter/过滤器基本使用
    【C/C++内功心法】剖析预处理过程,详解预处理指令,提升C/C++内功
    python excel 读取及写入固定格式
    【Pytorch深度学习开发实践学习】B站刘二大人课程笔记整理lecture10 Basic_CNN
  • 原文地址:https://blog.csdn.net/qq_24330181/article/details/143400677