zookeeper

1.zookeeper概述

zookeeper字面意思就是动物园管理者,在hadoop大数据生态圈,使用到的功能组件大多是以动物作为图标,因此顾名思义。zookeeper就是在众多组件当中起到一个核心的调度管理功能。使用到的场合如下:

  1. 高可用集群的主备切换
  2. 统一资源配置管理
  3. 分布式锁

2.zookeeper集群搭建

1.下载解压zookeeper-3.4.14.tar到/opt目录下

2.修改配置文件

  • 将解压目录下的/opt/zookeeper-3.4.14/conf/下的zoo_sample.cfg文件另外保存一份在相同的文件夹下并且改名为zoo.cfg并修改其中的配置文件
# 设置zk保存数据的路径
dataDir=/opt/zookeeper-3.4.14/data
# 设置集群的连接信息
#server.A=B:C:D
#A 每个zk服务 设置一个唯一的id号,整数
#B id对应的主机名或者ip方便识别
#C 集群内数据同步通信端口
#D 集群内选举使用的通信端口
server.100=L00:2888:3888
server.101=L01:2888:3888
server.102=L02:2888:3888
  • 分发安装包到其他两台机器
scp -r /opt/zookeeper-3.4.14 L01:/opt/
scp -r /opt/zookeeper-3.4.14 L02:/opt/
  • 修改个性化配置
    在每台zzookeeper服务器的/opt/zookeeper-3.4.14/data目录中添加一个myid文件
    创建名为myid的文件,文件中填入当前机器对应的id,必须为整数

  • 配置环境变量

    echo 'export ZOOKEEPER_HOME=/opt/zookeeper-3.4.14' >> /etc/profile
    echo 'export PATH=$ZOOKEEPER_HOME/bin:$PATH' >> /etc/profile
    source /etc/profile
    
  • 启动zookeeper服务

    zkServer.sh start
    

3.操作指令

#启动命令行客户端操作
zkCli.sh [-server host:port]
#查看znode结构zookeeper中没有相对路径
ls 绝对路径
#创建znode
# -s创建有序号的znode
# -e创建临时znode
create [-s] [-e] 路径 数据
# 查看数据
get 路径
# 修改数据
set 路径 数据
# 退出
quit

4.核心原理

1.解决高可用集群的主备切换

在高可用架构中,通常会存在多个NameNode,他们之间处于相互热备状态,但实际意义上只有一台NameNode管理众多的DataNode,当管理DataNode的NameNode出现问题或发生宕机时,为了集群正常工作,会自动切换到另一台处于热备状态中的NameNode来继续管理集群,在服务启动时多个NameNode中谁正真意义上来管理DataNode,此时就需要zookeeper来进行进一步管理。

在这里插入图片描述

在集群启动时,多个NameNode会去zookeeper中注册自己的状态,其中一台处于Active来管理所有的DataNode,其余的NameNode处于Standy热备状态,当处于Active的NameNode挂掉时,zookeeper会检测到,并且发送指令彻底杀死此NameNode,切换另一台处于热备状态中的NameNode来管理集群并调整状态为Active,当发生故障的NameNode修复完成以后从新启动加入到集群中,并向zookeeper注册一个Standy处于热备状态。

2.解决统一资源配置管理

在集群中通常会配置许多的配置文件,进行修改以后,要分发给集群中的所有机器,这样操作起来就显得尤为麻烦。

在这里插入图片描述

zookeeper提供了一种观察者模式,将配置文件写在zookeeper中,集群中的机器都同一读取zookeeper中的配置文件,并且注册一个守护线程来监听该配置文件,当配置文件进行修改时,触发守护线程,回调配置文件中的内容返回给机器。这样就方便了统一资源的修改与配置。

3.zookeeper的数据模型

file

4.分布式锁

在这里插入图片描述

分布式锁其实是利用了zookeeper数据模型的里面的有序号原理,当多个线程同时操作同一个文件时,会在zookeeper当中注册一个有序号znode,根据这个序号大小优先选择序号较小的线程进行工作,此时其他线程处在一个等待状态,当此线程工作完成释放资源,并且删除掉当前znode,从新注册一个线程添加到zookeeper当中。

5.zookeeper的选举机制

  • 首次启动 半数以上选id最大
    集群启动的节点数量超过半数后,id号最大的节点当选为leader,其他节点作为follower
  • 主从切换 leader宕机后,随机选举一个节点作为新leader

6.javaAPI操作zookeeper

引入相关依赖

        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.14</version>
        </dependency>

编写实现类

public class Zookeeper {
    public static void main(String[] args) throws Exception {
        String conn = "192.168.1.100:2181,192.168.1.101:2181,192.168.1.102:2181" ;
        ZooKeeper zk = new ZooKeeper(conn, 3000, null);
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值