博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分布式应用协调服务ZooKeeper
阅读量:4161 次
发布时间:2019-05-26

本文共 2908 字,大约阅读时间需要 9 分钟。

一.ZooKeeper简介

Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目

Zookeeper=文件系统+通知机制

  • Zookeeper从设计模式上来看是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数
  • 据,然后接受观察者的注册
  • 一旦数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应,从而实现集群中类似Master/Slave管理模式

二. ZooKeeper数据结构

znode

  • ZooKeeper数据模型的结构与Linux文件系统很像,整体上可以看作是一棵树,树的每个节点称做一个znode。每一个znode默认能够存储
  • 1MB的数据,每个znode都可以通过其路径唯一标识

节点类型

  • PERSISTENT:持久化节点,默认类型
  • PERSISTENT_SEQUENTIAL:持久化顺序编号节点
  • EPHEMERAL:临时节点
  • EPHEMERAL_SEQUENTIAL:临时顺序编号节点
  • ``

三. ZooKeeper客户端命令

首先输入zkCli.sh进入命令行模式

命令基本语法 命令功能描述
help 显示所有操作命令
ls path 使用ls命令查看当前znode中所包含的内容
ls2 查看当前节点数据并能看到更新次数等数据
create 创建节点,默认是持久化节点 create -s:创建带序列的节点 create -e:创建临时节点
get path 获取节点的值
set 设置节点的具体值
stat 查看节点状态
delete 删除节点,不可删除带有子节点的节点
rmr 递归删除节点
quit 退出zk客户端

使用Java API访问zookeeper

  • 1.创建maven工程添加依赖
org.apache.zookeeper
zookeeper
3.4.6
  • 2.代码实现
package hadoop;import org.apache.zookeeper.*;import org.apache.zookeeper.data.Stat;import org.junit.Before;import org.junit.Test;import java.io.IOException;import java.util.List;/** * @author sunyong * @date 2020/07/06 * @description */public class ZKClientDemo {
private static final String CONNECTSTRING = "hadoop110,hadoop111,hadoop112:2181";//zk的集群连接信息 private static final int SESSIONTIMEOUT = 2000;//集群超时时间 private static ZooKeeper zkClient;//zk对象 //初始化zk对象 @Before public void init() throws IOException {
zkClient=new ZooKeeper(CONNECTSTRING,SESSIONTIMEOUT, new Watcher() {
@Override public void process(WatchedEvent watchedEvent) {
} }); } //创建节点 @Test public void CareateNode() throws KeeperException, InterruptedException {
String path = zkClient.create("/kgc/hadoop110","hadoop110".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); System.out.println(path); } //获取所有子节点 @Test public void getChildrenNode() throws KeeperException, InterruptedException {
List
children= zkClient.getChildren("/kgc",true); for (String child : children) {
System.out.println(child); } } //判断节点是否存在 @Test public void existsNode() throws KeeperException, InterruptedException {
Stat exists = zkClient.exists("/kgc/1",false); System.out.println(exists==null?"不存在":"存在"); }}

四. ZooKeeper角色

Leader(领导者)

  • 负责进行投票的发起和决议,更新系统状态

Follower(跟随者)

  • 用于接收客户端请求并向客户端返回结果,在选主过程中参与投票

Observer(观察者)

  • 可以接收客户端连接,将写请求转发给Leader节点。但Observer不参加投票过程,只同步Leader状态。Observer的目的是为了扩展系统,提高读取速度。

五.ZooKeeper选举机制

半数机制

  • 集群中半数以上机器存活,集群可用(双数的节点会浪费资源且可能诞生不出来leader(也叫脑裂),所以总机器数是奇数)
  • ZooKeeper工作时,有一个节点为Leader,其他为Follower,Leader是通过内部选举机制临时产生的
  • Leader选举是保证分布式数据一致性的关键所在

leader选举触发时机

  • 服务器初始化启动,开始选举,超过半数以上就决定了leader,后面启动都是follwer
  • 服务器运行期间无法和Leader保持连接,即leader网络通信不好等情况,按照数据的新旧,越新的就是leader

ZooKeeper集群中超过半数机器存活,就可提供服务

ZooKeeper是树形结构,每个节点都能存储数据
ZooKeeper中节点有Leader和Follower之分

转载地址:http://dcjxi.baihongyu.com/

你可能感兴趣的文章
Action-Decision Networks for Visual Tracking with Deep Reinforcement Learning
查看>>
Multiple Object Tracking with High Performance Detection and Appearance Feature
查看>>
深度学习入门(上)-第一章 必备基础知识点
查看>>
ubuntu unzip解压时提示错误 解决方法
查看>>
sprintf函数的说明
查看>>
BOOST_TYPEOF和BOOST_AUTO 作用
查看>>
随机森林概述
查看>>
2011十大战略技术
查看>>
大学应该学的软件知识
查看>>
腾讯与360战争背后的云计算阴影
查看>>
腾讯看了会沉默,360看了会流泪
查看>>
李开复:移动互联网机会最大 微博会现最大赢家
查看>>
2006年的IT十大战略技术
查看>>
操作系统介绍
查看>>
Desktop Linux: The Dream Is Dead
查看>>
我的9年IT路
查看>>
任正非:让用户像用电一样享受云计算
查看>>
学习技术的几个境界
查看>>
计算机世界:免费的代价
查看>>
方兴东:中国网站十年
查看>>