【大数据】Zookeeper分布式协调服务入门

一、zookeeper服务

分布式协调服务,协调服务之间的关系
在大数据中使用场景搭建服务的高可用时会使用zk

1.1、zk服务的特性(掌握)

  • 数据一致性
    • 保证多台服务器上的zk存储的数据是一致的
  • 数据的顺序性
    • 会保证数据按照写入的顺序同步数据
  • 数据的可靠性
    • 数据会在多个服务器存储
  • 数据的原子性操作
    • 会保证数据全部成功,全部失败,每一个存储请求都能保证完整执行

1.2、zookepper安装

  • 上传zookepper压缩包(zookeeper-3.4.6.tar.gz)解压

注意:上传文件位置为 /export/server目录

cd /export/server
tar xvf /export/server/zookeeper-3.4.6.tar.gz
mv zookeeper-3.4.6 zookeeper
  • 添加环境变量
echo 'export ZOOKEEPER_HOME=/export/server/zookeeper' >> /etc/profile
echo 'export PATH=$PATH:$ZOOKEEPER_HOME/bin' >> /etc/profile
source /etc/profile
  • 创建数据目录
mkdir /export/data/zkdata
echo 1 > /export/data/zkdata/myid

# 注意:!!!!!!!!!
# 注意:!!!!!!!!!
# 注意:!!!!!!!!!
# 搭建集群时,还需要在创建完node2虚拟机上执行
echo 2 > /export/data/zkdata/myid
# 搭建集群时,还需要在创建完node3虚拟机上执行
echo 3 > /export/data/zkdata/myid
  • 修改配置文件
mv  /export/server/zookeeper/conf/zoo_sample.cfg /export/server/zookeeper/conf/zoo.cfg
sed -i "s#^dataDir.*#dataDir=/export/data/zkdata#" /export/server/zookeeper/conf/zoo.cfg
echo 'server.1=node1:2888:3888' >> /export/server/zookeeper/conf/zoo.cfg
echo 'server.2=node2:2888:3888' >> /export/server/zookeeper/conf/zoo.cfg
echo 'server.3=node3:2888:3888' >> /export/server/zookeeper/conf/zoo.cfg

拷贝zk服务

scp -r /export/server/zookeeper/  node2:/export/server/zookeeper/
scp -r /export/server/zookeeper/  node3:/export/server/zookeeper/
  • zookeeper服务操作
# 启动
zkServer.sh start
# 停止
zkServer.sh stop
# 查看状态
zkServer.sh status

## 注意启动时需要三台机器都执行启动服务
  • 查看运行的java服务
jps
  • 集群搭建说明

在node1的机器上配置完成后,需要将node1中的zookeeper目录复制到node2和node3的对应目录下,同时需要将基础环境配置步骤在node2和node3上重新执行一遍

  • 启动脚本&停止脚本
vim zk_start.sh
echo 'zk启动.....'
ssh node1 'source /etc/profile;zkServer.sh start'
ssh node2 'source /etc/profile;zkServer.sh start'
ssh node3 'source /etc/profile;zkServer.sh start'
echo 'zk启动完成.....'
vim zk_stop.sh
echo 'zk关闭.....'
ssh node1 'source /etc/profile;zkServer.sh stop'
ssh node2 'source /etc/profile;zkServer.sh stop'
ssh node3 'source /etc/profile;zkServer.sh stop'
echo 'zk关闭完成.....'

1.3、zk操作

  • 客户端连接
zkCli.sh -Server 服务器名
  • zk的数据管理

zk以节点(znode)的方式管理(增删改查)数据,节点会形成层级结构,有父节点和子节点.每个节点有对应的名称,数据最终是存储在节点上,每个节点最多存储1M的数据. zk默认有一个顶层根节点,所有节点都要在根节点下创建

  • 创建节点
create /节点名称  数据
  • 查看节点
ls  /节点
  • 获取节点数据
get /节点
  • 修改节点数据
set  /节点   数据
  • 删除节点
rmr /节点
  • 节点类型

永久节点 客户端退出后数据节点会依然存在 默认创建的节点就是永久节点
顺序永久节点 给节点增加一个编号 create -s /节点
临时节点 客户端退出后数据节点会自动删除 create -e /节点 创建的是临时节点
顺序临时节点 create -s -e /节点
查看节点的类型 get /节点

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.4、zookeeper服务角色

zk搭建集群后会运行多个zk服务,此时需要给zk服务分配角色,zk内部的选举算法会选举产生leader(领导者)角色,剩下zk就成为follower(追随者)角色
zk中的选举算法中有个权重,编号越高,越容易成为领导者
查看zk服务的角色
zkServer.sh status

在这里插入图片描述
在这里插入图片描述

  • leader 领导者角色
    • 负责处理事务(增删改)请求,也提供数据查询
    • 所有增删改请求需要先交给leader处理
    • leader保证数据一致性,当leader保存修改删除数据成功后,会通知follower完成数据同步
  • follower 追随者角色
    • 负责处理查询请求
    • 当leader服务不可用是,从活跃状态的follow角色选举新的leader
  • observer
    • 只负责处理查询请求
    • 不参与任何选举,该角色是同步配置文件配置产生 zoo.cfg
    • 实际开发不建议使用

1.5、Zookeeper监听机制

一个zk服务可以监听获取另一个服务的变化
在这里插入图片描述

1.5、Zookeeper典型应用

  • 数据的发布与订阅
    • 监听机制

ZooKeeper采用的是推拉相结合的方式:客户端向服务器注册自己需要关注的节点,一旦该节点的数据发生改变,那么服务端就会向相应的客户端发送Watcher事件通知,客户端接收到消息通知后,需要主动到服务端获取最新的数据。

  • 服务选举
    • 创建节点确认主服务
    • 相同节点名不能重复创建,谁先创建出节点谁作为主服务
  • 分布式锁
    • 本质就是一个节点

ZooKeeper通过数据节点表示一个锁,例如/jinking/lock节点就可以定义一个锁,所有客户端都会调用create()接口,试图在/jinking下创建lock子节点,但是ZooKeeper的强一致性会保证所有客户端最终只有一个客户创建成功。也就可以认为获得了锁,其它线程Watcher监听子节点变化(等待释放锁,竞争获取资源)。
此外也可以通过znode的序列化特性,给创建znode的客户端自动编号,从而实现所谓的顺序锁的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值