Zookeeper知识汇总(含分布式安装、配置)

------------ 本文来自 阿P官方博客

思考1:Zookeeper能解决大数据什么问题?

一、概述

Apache提供的开源的、分布式的用于服务协调的一套框架
    这里可以不用懂,随着深入学习,我们就知道Zookeeper到底有什么用。此处只是让大家有这个概念,后面会深入理解。
早期是根据Google关于Chubby Lock的论文来实现的。

二、Zookeeper分布式下的问题

什么是分布式?
    一个集群中,多个节点共同组成一个系统。或者说是本来需要一个节点去处理的问题,现在分成了很多个节点协同处理。
分布式下,若每个结点都发送自己的指令,造成逻辑混乱怎么办?
    故需提供对外接收请求提供统一的操作的管理节点。
若管理节点出现单点故障怎么办?
    为了避免管理节点出现单点故障,需要设置管理节点的集群
怎么确定管理节点?
    管理集群需要设置一个主节点,需要确定一套选举算法,选出一个主节点。
管理集群中,节点出现问题,怎么恢复、处理?
    管理集群需要进行崩溃恢复
    在从节点中重新选择主节点
管理集群消息不统一怎么办?
    管理集群之间各个节点需要进行实时共享

四、Zookeeper特点

zookeeper树状结构存储 - Znode树
根节点为 /
每一个子节点称之为znode节点
所有的节点路径,必须以根节点为起始
每一个持久节点下可以挂载节点
Znode存在磁盘和内存中
    Znode存在内存中的目的:查询速度更快
    Znode存在磁盘中的目的:崩溃恢复
Znode磁盘中的存储位置由dataDir路径决定
Zookeeper存在事务概念
    对每一次的写操作创建一个递增的事务ID(Zxid)

五、Zookeeper-Client命令

查看节点目录:ls 节点
创建:create /节点名
    -e:临时节点
    -s:创建顺序节点
删除:delete /节点【必须删除空节点】
递归删除:rmr /节点
查看:get /节点
    -s:查看节点详细信息
修改:set /节点 '内容'

六、节点信息详解

命令:get -s Znode
返回值:
    cZxid:创建事务ID
    ctime:创建时间
    mZxid:修改事务ID
    mtime:修改时间
    pZxid:子节点的增删事务ID,全局
    cversion:子节点的增删次数
    dataVersion:数据版本,修改次数
    aclVersion:权限修改次数
    ephemeralOwner:是否是临时节点。持久节点固定为0。临时节点为sessionid
    dataLength:数据字节个数
    numChildren:子节点个数

七、Zookeeper节点类型

节点持久性划分
    持久节点(默认节点)
    临时节点
    客户端退出,该结点删除。
节点顺序类型
    顺序节点
    非顺序节点

八、选举机制(以leader节点挂了为例)

第一个阶段:数据恢复阶段
    每个节点会找寻当前节点中的最大事务id
第二个阶段:选举阶段
    刚开始时,在集群中每个节点都会推荐自己做leader。
    将自己的信息发送给其他节点,最后胜出的为leader,失败的做follower。
        节点信息:
            最大事务ID:mzxid
            选举编号:myid
        逻辑时钟值:保证所有选举在同一轮次上
        比较原则
            事务ID谁大谁胜出
            事务ID一致时,myid谁大谁胜出
            选举的过半性:当某个结点胜过1半的节点(包括宕机的)时,就会成为leader
            当集群中已经选举出leader,后续添加的节点,不再考虑被选举成leader。【一个集群中,只需要启动一半节点,就会选举出leader】

九、节点状态

looking/voting:选举状态
follower:追随者
leader领导者
observer:观察者

十、脑裂

什么是脑裂?
    在集群中出现多leader时,这种情况称之为脑裂
产生脑裂的原因
    网络隔离导致多leader
    ledaer主机宕机后重启。
解决手段:
    过半存活性
        在zookeeper集群中,只有半数以上的节点存活,才会对外提供服务。
Tips:zookeeper节点一般是奇数个。

十一、安装方式

单机安装:只在一个节点上安装,只能提供部分功能。
伪分布式:只在一个节点上模拟集群环境
完全分布式:在集群环境中安装【本文列出三节点集群安装方式】

十二、单机安装(过程仅供有经验开发人员参考)

下载安装JDK1.8
下载并解压zookeeper
复制./conf/zoo_sample.cfg为zoo.cfg
修改zoo.cfg里的dataDir内容为你想要的存储路径
启动zookeeper:./bin/zkServer.sh start
注意:
    3.5.0(一说3.5.5)以后的官方版本,需要下载.bin.xxx的文件
    启动状态查询:./bin/zkServer.sh status

十三、三节点zookeeper完全分布式搭建流程【傻瓜式】

虚拟机安装配置
    利用vmware创建虚拟机(略)
        配置:centos7 + 1core + 1G内存 + 20G硬盘 + NAT模式
        centos7镜像地址(如果下载慢,可以使用NeatDownload Manager开启多线程下载):http://mirrors.aliyun.com/centos/7.8.2003/isos/x86_64/CentOS-7-x86_64-DVD-2003.iso
        注意:
            实际的内存、硬盘分配看你物理机的情况。
    配置镜像源
            参考:https://blog.csdn.net/qq_43054078/article/details/83275042
        配置静态IP
            mac版本配置参考:https://blog.csdn.net/p01114245/article/details/94382979
        计划三节点静态ip分别为
            节点1:172.16.172.197(目前操作的节点)
            节点2:172.16.172.196
            节点3:172.16.172.195
        配置主机名(需要重新登录,才会生效)
            hostnamectl set-hostname zk01
        配置hosts文件:
            vim /etc/hosts:加入以下内容
                172.16.172.197 zk01
                172.16.172.196 zk02
                172.16.172.195 zk03
        配置ssh免密登录
            生成秘钥:ssh-keygen
            拷贝秘钥到本机:ssh-copy-id root@zk01
        注意
            虚拟机安装时,很多可用命令未下载。例如:wget、ifconfig(net-tools)、vim等。此时可先配置静态ip,配完后用scp命令,将下载好的镜像源手动导入服务器。再利用yum安装必要的服务。
下载安装 JDK1.8
    yum install -y java-1.8.0-openjdk.x86_64
    yum install -y java-1.8.0-openjdk-devel.x86_64
    Tips:查看jdk安装目录命令:ls -lrt /etc/alternatives/java
Zookeeper安装、解压、配置
    下载:wget https://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.5.8/apache-zookeeper-3.5.8.bin.tar.gz
    解压安装:
        tar -zxvf apache-zookeeper-3.5.8.bin.tar.gz -CP /usr/local
        mv /usr/local/apache-zookeeper-3.5.8 /usr/local/zookeeper
    配置命令:
        cd /usr/local/zookeeper/conf
        cp zoo_sample.cfg zoo.cfg
        vim zoo.cfg:加入或修改以下四行
            dataDir=/data/zookeeper/tmp
            server.1=zk01:2888:3888
            server.2=zk02:2888:3888
            server.3=zk03:2888:3888
        vim /data/zookeeper/tmp/myid:加入以下内容
            1
    测试:
        启动:../bin/zkServer.sh start
        jps 
            查看是否有QuorumPeerMain进程出现。
    注意:
        请记住这个url(https://www.apache.org/),如果你记不住这个地址,请不要再继续学了,赶紧回家种地吧。
        3.5.5及以后的版本,必须下载.bin.tar.gz才能使用。下载的.tar.gz只是源码。
克隆三台虚拟机
    zk01 关机。完全克隆
    修改节点2、3的网卡配置
    分别修改两节点 /etc/sysconfig/network-scripts/ifcfg-ens33 里的IPADDR 为我们刚刚计划的ip(略)
        重启网卡:systemctl restart network
    修改节点2、3的Zookeeper配置
    只需要修改 /data/zookeeper/tmp/myid文件下的对应编号为本机器编号
        分别启动节点2、3的zookeeper(略)
    修改节点2、3的主机名为zk02、zk03
        hostnamectl set-hostname 主机名
        exit:退出用户重新登录
    关闭三台机器的防火墙(有条件的,可以配置防火墙策略)
        systemctl stop firewalld
测试
    /usr/local/zookeeper/bin/zkServer.sh status 
        会看到三节点哪个是follower和leader
    在节点1上操作
        /usr/local/zookeeper/bin/zkCli.sh
        create /zoo_test
    在节点2或者节点3上操作
        /usr/local/zookeeper/bin/zkCli.sh
        ls /
            会看的节点2、3都有 zoo_test
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。