关于Zookeeper

hbase 访问zookeeper的问题 坑 1、 Configuration config = HBaseConfiguration.create(); 书上说是会自动加载hbase-site.xml里面配置的zookeeper 配置 但是实际上是访问的是localhost本地的zookeeper2181端口 2、因此如果本地不是zookeeper server 的话就无法访问hbase 了 3、解决办法通过参数传给程序 例子: 阅读详情

关于Zookeeper

Zookeeper是分布式协调工具

应用场景 

    命名服务(注册中心) Dubbo注册中心

    分布式配置中心(SpringCloud config)动态管理配置文件信息

    消息中间件 事件通知(类似发布订阅)

    分布式事务(全局协调者)

    实现分布式锁  

    实现选举策略(类似哨兵机制) 

    实现本地动态负载均衡  (Dubbo服务负载均衡原理)

    消息中间件的集群管理

 

很少注册中心是 不是集群版本的  consul eureka Zookeeper  redis      集群版高可用

 

什么是Zookeeper

Zookeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper本身可以以单机模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。

1、Zookeeper是为别的分布式程序服务的

2、Zookeeper本身就是一个分布式程序(只要有半数以上节点存活,zk就能正常服务)

3、Zookeeper所提供的服务涵盖:主从协调、服务器节点动态上下线、统一配置管理、分布式共享锁、统> 一名称服务等

4、虽然说可以提供各种服务,但是zookeeper在底层其实只提供了两个功能:

管理(存储,读取)用户程序提交的数据(类似namenode中存放的metadata); 
并为用户程序提供数据节点监听服务;

 

 

Zookeeper集群机制

Zookeeper集群的角色: Leader 和 follower 
只要集群中有半数以上节点存活,集群就能提供服务

 

Zookeeper特性

1、Zookeeper:一个leader,多个follower组成的集群

2、全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的

3、分布式读写,更新请求转发,由leader实施

4、更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行

5、数据更新原子性,一次数据更新要么成功,要么失败

6、实时性,在一定时间范围内,client能读到最新数据

 

 

Zookeeper数据结构

1、层次化的目录结构,命名符合常规文件系统规范(类似文件系统) 

 

2、每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识 
 

3、节点Znode可以包含数据和子节点(但是EPHEMERAL类型的节点不能有子节点)

节点类型 
a、Znode有两种类型:

短暂(ephemeral)(create -e /app1/test1 “test1” 客户端断开连接zk删除ephemeral类型节点) 
持久(persistent) (create -s /app1/test2 “test2” 客户端断开连接zk不删除persistent类型节点)

b、Znode有四种形式的目录节点(默认是persistent )

PERSISTENT 
PERSISTENT_SEQUENTIAL(持久序列/test0000000019 ) 
EPHEMERAL 
EPHEMERAL_SEQUENTIAL

c、创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护 

d、在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序

 

Zookeeper应用场景

数据发布与订阅(配置中心)

发布与订阅模型,即所谓的配置中心,顾名思义就是发布者将数据发布到ZK节点上,供订阅者动态获取数据,实现配置信息的集中式管理和动态更新。例如全局的配置信息,服务式服务框架的服务地址列表等就非常适合使用。
 

负载均衡

这里说的负载均衡是指软负载均衡。在分布式环境中,为了保证高可用性,通常同一个应用或同一个服务的提供方都会部署多份,达到对等服务。而消费者就须要在这些对等的服务器中选择一个来执行相关的业务逻辑,其中比较典型的是消息中间件中的生产者,消费者负载均衡。

消息中间件中发布者和订阅者的负载均衡,linkedin开源的KafkaMQ和阿里开源的 metaq都是通过zookeeper来做到生产者、消费者的负载均衡。这里以metaq为例如讲下:

生产者负载均衡:metaq发送消息的时候,生产者在发送消息的时候必须选择一台broker上的一个分区来发送消息,因此metaq在运行过程中,会把所有broker和对应的分区信息全部注册到ZK指定节点上,默认的策略是一个依次轮询的过程,生产者在通过ZK获取分区列表之后,会按照brokerId和partition的顺序排列组织成一个有序的分区列表,发送的时候按照从头到尾循环往复的方式选择一个分区来发送消息。

消费负载均衡: 在消费过程中,一个消费者会消费一个或多个分区中的消息,但是一个分区只会由一个消费者来消费。MetaQ的消费策略是:

1. 每个分区针对同一个group只挂载一个消费者。

2. 如果同一个group的消费者数目大于分区数目,则多出来的消费者将不参与消费。

3. 如果同一个group的消费者数目小于分区数目,则有部分消费者需要额外承担消费任务。

在某个消费者故障或者重启等情况下,其他消费者会感知到这一变化(通过 zookeeper watch消费者列表),然后重新进行负载均衡,保证所有的分区都有消费者进行消费。

命名服务(Naming Service)

 

命名服务也是分布式系统中比较常见的一类场景。在分布式系统中,通过使用命名服务,客户端应用能够根据指定名字来获取资源或服务的地址,提供者等信息。被命名的实体通常可以是集群中的机器,提供的服务地址,远程对象等等——这些我们都可以统称他们为名字(Name)。其中较为常见的就是一些分布式服务框架中的服务地址列表。通过调用ZK提供的创建节点的API,能够很容易创建一个全局唯一的path,这个path就可以作为一个名称。

阿里巴巴集团开源的分布式服务框架Dubbo中使用ZooKeeper来作为其命名服务,维护全局的服务地址列表, 点击这里查看Dubbo开源项目。在Dubbo实现中:

服务提供者在启动的时候,向ZK上的指定节点/dubbo/${serviceName}/providers目录下写入自己的URL地址,这个操作就完成了服务的发布。

服务消费者启动的时候,订阅/dubbo/${serviceName}/providers目录下的提供者URL地址, 并向/dubbo/${serviceName} /consumers目录下写入自己的URL地址。

注意,所有向ZK上注册的地址都是临时节点,这样就能够保证服务提供者和消费者能够自动感应资源的变化。 另外,Dubbo还有针对服务粒度的监控,方法是订阅/dubbo/${serviceName}目录下所有提供者和消费者的信息。

 

分布式通知/协调

ZooKeeper中特有watcher注册与异步通知机制,能够很好的实现分布式环境下不同系统之间的通知与协调,实现对数据变更的实时处理。使用方法通常是不同系统都对ZK上同一个znode进行注册,监听znode的变化(包括znode本身内容及子节点的),其中一个系统update了znode,那么另一个系统能够收到通知,并作出相应处理

1. 另一种心跳检测机制:检测系统和被检测系统之间并不直接关联起来,而是通过zk上某个节点关联,大大减少系统耦合。

2. 另一种系统调度模式:某系统有控制台和推送系统两部分组成,控制台的职责是控制推送系统进行相应的推送工作。管理人员在控制台作的一些操作,实际上是修改了ZK上某些节点的状态,而ZK就把这些变化通知给他们注册Watcher的客户端,即推送系统,于是,作出相应的推送任务。

3. 另一种工作汇报模式:一些类似于任务分发系统,子任务启动后,到zk来注册一个临时节点,并且定时将自己的进度进行汇报(将进度写回这个临时节点),这样任务管理者就能够实时知道任务进度。

总之,使用zookeeper来进行分布式通知和协调能够大大降低系统之间的耦合

集群管理与Master选举

1. 集群机器监控:这通常用于那种对集群中机器状态,机器在线率有较高要求的场景,能够快速对集群中机器变化作出响应。这样的场景中,往往有一个监控系统,实时检测集群机器是否存活。过去的做法通常是:监控系统通过某种手段(比如ping)定时检测每个机器,或者每个机器自己定时向监控系统汇报“我还活着”。 这种做法可行,但是存在两个比较明显的问题:

1. 集群中机器有变动的时候,牵连修改的东西比较多。

2. 有一定的延时。

利用ZooKeeper有两个特性,就可以实现另一种集群机器存活性监控系统:

1. 客户端在节点 x 上注册一个Watcher,那么如果 x?的子节点变化了,会通知该客户端。

2. 创建EPHEMERAL类型的节点,一旦客户端和服务器的会话结束或过期,那么该节点就会消失。

例如,监控系统在 /clusterServers 节点上注册一个Watcher,以后每动态加机器,那么就往 /clusterServers 下创建一个 EPHEMERAL类型的节点:/clusterServers/{hostname}. 这样,监控系统就能够实时知道机器的增减情况,至于后续处理就是监控系统的业务了。

2. Master选举则是zookeeper中最为经典的应用场景了。

在分布式环境中,相同的业务应用分布在不同的机器上,有些业务逻辑(例如一些耗时的计算,网络I/O处理),往往只需要让整个集群中的某一台机器进行执行,其余机器可以共享这个结果,这样可以大大减少重复劳动,提高性能,于是这个master选举便是这种场景下的碰到的主要问题。

利用ZooKeeper的强一致性,能够保证在分布式高并发情况下节点创建的全局唯一性,即:同时有多个客户端请求创建 /currentMaster 节点,最终一定只有一个客户端请求能够创建成功。利用这个特性,就能很轻易的在分布式环境中进行集群选取了。

另外,这种场景演化一下,就是动态Master选举。这就要用到EPHEMERAL_SEQUENTIAL类型节点的特性了。

上文中提到,所有客户端创建请求,最终只有一个能够创建成功。在这里稍微变化下,就是允许所有请求都能够创建成功,但是得有个创建顺序,于是所有的请求最终在ZK上创建结果的一种可能情况是这样: /currentMaster/{sessionId}-1 ,/currentMaster/{sessionId}-2,/currentMaster/{sessionId}-3 ….. 每次选取序列号最小的那个机器作为Master,如果这个机器挂了,由于他创建的节点会马上小时,那么之后最小的那个机器就是Master了。

1. 在搜索系统中,如果集群中每个机器都生成一份全量索引,不仅耗时,而且不能保证彼此之间索引数据一致。因此让集群中的Master来进行全量索引的生成,然后同步到集群中其它机器。另外,Master选举的容灾措施是,可以随时进行手动指定master,就是说应用在zk在无法获取master信息时,可以通过比如http方式,向一个地方获取master。

2. 在Hbase中,也是使用ZooKeeper来实现动态HMaster的选举。在Hbase实现中,会在ZK上存储一些ROOT表的地址和HMaster的地址,HRegionServer也会把自己以临时节点(Ephemeral)的方式注册到Zookeeper中,使得HMaster可以随时感知到各个HRegionServer的存活状态,同时,一旦HMaster出现问题,会重新选举出一个HMaster来运行,从而避免了HMaster的单点问题

 

分布式锁

分布式锁,这个主要得益于 ZooKeeper 为我们保证了数据的强一致性。锁服务可以分为两类,一个是 保持独占,另一个是 控制时序。

1. 所谓保持独占,就是所有试图来获取这个锁的客户端,最终只有一个可以成功获得这把锁。通常的做法是把 zk 上的一个 znode 看作是一把锁,通过 create znode 的方式来实现。所有客户端都去创建 /distribute_lock 节点,最终成功创建的那个客户端也即拥有了这把锁。

2. 控制时序,就是所有视图来获取这个锁的客户端,最终都是会被安排执行,只是有个全局时序了。做法和上面基本类似,只是这里 /distributelock 已经预先存在,客户端在它下面创建临时有序节点(这个可以通过节点的属性控制:CreateMode.EPHEMERALSEQUENTIAL 来指定)。Zk 的父节点(/distribute_lock)维持一份 sequence, 保证子节点创建的时序性,从而也形成了每个客户端的全局时序。

 

分布式事务

 

 

总结:

  

  1、node 节点 节点路径 节点value

  2、节点名称不可以重复

 3、节点类型 临时或者持久  断开连接就被删除了 (分别就是锁原理)

 4、事件通知 每个节点都有事件通知,对该节点发生删除、修改、添加都会有时间通知。 类似消息中间件功能

 

 

MATLAB AppDesigner 中TextArea保留原有信息并换行显示提示信息 App Designer 中的文本区域TextArea组件,一般可以用来作为matlab app设计中的信息显示。 app.TextArea.Value = 'Hello Matlab'; Value可以是字符向量、字符向量元胞数组、字符串数组或一维分类数组。这样直接给TextArea赋值,每次赋值都会消除先前的信息,然后显示新的信息。如果想要在app实现保留原有信息、多行信息的输出,在MathWorks官方帮助中心给出了一种方法: cellArrayText{1} = sprintf('%s\n 阅读详情

相关推荐

建议收藏:华为海思IC设计笔试题,含解析(附下载)

接触过的部门有麒麟芯片、CPU/GPU,总体面试感觉非常好,规范且认真,第一轮手撕代码状态机+复盘机考题+瞄准几个知识点深挖,时间1hour+;一二轮面试是连着的,所以很累。但是岗位就那么多,在面试的时候,很多同学因为准备不充分,与岗位失之交臂,无缘进入该公司。时序电路有记忆功能,不会产生锁存器,锁存器一般在组合逻辑中case写不全,else写不全,或者敏感列表写不全。

nuoweishizi的博客 3288

zookeeper是什么?

zookeeper是什么? zookeeper的数据结构详解 zookeeper的安装与配置 zookeeper的选举机制是什么意思? zookeeper的节点类型 zookeeper的读写机制 zookeeper分布式安装部署 zookeeper的常用命令 如何利用zookeeper的API操控zookeeper......

PIKapikaaaa的博客 3627

AT89C52单片机+LCD屏:手把手教你做一个能算小数和负数的计算器(附完整代码)

本文详细介绍了如何使用AT89C52单片机和LCD1602显示屏构建一个支持小数和负数运算的高精度计算器。从硬件选型、系统架构设计到核心算法实现,提供了完整的代码示例和优化技巧,特别适合51单片机初学者和课程设计参考。

weixin_30374009的博客 370

详解分布式协调服务 ZooKeeper,面试被锤经历

一、ZooKeeper 简介 1.1 ZooKeeper 是什么 ZooKeeper 是 Apache 的顶级项目。ZooKeeper 为分布式应用提供了高效且可靠的分布式协调服务,提供了诸如统一命名服务、配置管理和分布式锁等分布式的基础服务。在解决分布式数据一致性方面,ZooKeeper 并没有直接采用 Paxos 算法,而是采用了名为 ZAB 的一致性协议。 ZooKeeper 主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储。但是 ZooKeeper

weixin_44583135的博客 1553

Delphi 13 Beta初体验:手把手教你安装RAD Studio Ganymede,并实测新条件运算符

本文详细介绍了Delphi 13 Beta(代号Ganymede)的安装步骤和新特性,重点解析了新增的条件运算符语法。通过实测对比,展示了64位IDE的性能提升和新语法在代码简洁性上的优势,为开发者提供了从安装到实战的完整指南。

weixin_30399821的博客 205

在unity urp项目中 通过图片创建材质(透明光晕)

unity中通过图片创造材质(urp管道)

m0_49721415的博客 1541

ZooKeeper是什么

一. ZooKeeper是什么 ZooKeeper由雅虎研究院开发,是Google Chubby的开源实现,后来托管到Apache,于2010年11月正式成为Apache的顶级项目。 ZooKeeper是一个经典的分布式数据一致性解决方案,致力于为分布式应用提供一个高性能、高可用,且具有严格顺序访问控制能力的分布式协调服务。 分布式应用程序可以基于ZooKeeper实现数据发...

李平安 3万+

KEGG两类报错--①No gene can be mapped--②URL ‘https://rest.kegg.jp/link/hsa/pathway‘…

版本问题,重新安装一下clusterProfiler包。网络问题,可以等待之后再试一下(试过不是)(以上可以排除基因不存在的错误因素)

weixin_57699783的博客 2万+

一文搞懂Zookeeper是干啥的

1.Zookeeper概述(Zookeeper是什么、应用场景) 1.Zookeeper是什么 Zookeeper 是一个开源的分布式协调服务系统 ,主要用来解决分布式集群中应用系统的一致性问题和数据管理问题 Zookeeper是1个分布式文件系统+监听通知机制 Zookeeper文件系统中存储的其实是Znode, Znode 是 Zookeeper 中的节点,可以通过操作文件系统的方式操作 Zookeeper中的Znode 2.应用场景 常见应用场景:数据发布/订阅、命名服务、分布式协调/通知、分布式

qq_28140917的博客 3776

创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—ISP图像处理开发案例

创龙科技研发的 TL3588-EVM 评估板具备强大视频处理能力,可满足多场景视频开发需求。为助力开发者快速上手,本文整理 7 个实用视频开发案例,涵盖从采集到显示的全流程,详细说明各案例的硬件连接、参数配置与代码解析,帮助开发者高效实现评估板视频相关功能开发与调试。

创龙,嵌入式一体化解决方案商 209

某物data魔改与变种算法还原(含加解密Py纯算)

某物data加解密、设备指纹魔改、变异、自定义加密分析与纯算还原

吴秋霖的博客 1281

【Zookeeper】Windows下安装Zookeeper(全面)

【Zookeeper】Windows下安装Zookeeper(全面)

weixin_57259781的博客 1万+

单片机应用案例:ESP32 搭配 BH1750 光强传感器和 Web 服务器

在该应用案例中,我们将使用 ESP32 开发板作为主控制器,BH1750 光强传感器用于采集环境光强度数据,并通过 Web 服务器展示采集到的数据。步骤一:购买材料步骤二:连接硬件步骤三:编写代码我们将使用 Arduino IDE 编写代码,以下是主要代码:// WiFi 设置const char* ssid = “你的 WiFi 名称”;const char* password = “密码”;// Web 服务器实例// BH1750 实例// 获取当前光强度数据。

RlDart的博客 813

Zookeeper

Zookeeper笔记

panzhengxiang的博客 2339

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

ZooKeeper 安装完整版——ZooKeeper3.4.6

@羲凡——只为了更好的活着 ZooKeeper 安装完整版——ZooKeeper3.4.6 1.下载地址如下: https://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/ 2.安装 第1步:在deptest3 机器的 /usr/local/package 目录下解压 zookeeper-3.4.6.tar.gz tar -zxf zook...

@羲凡—只为更好的活着 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Zookeeper 和 SASL

关键字:Zookeeper 和 SASL 介绍 这是一个描述ZooKeeper和SASL(Simple Authentication and Security Layer)整合建议的设计文档。 JIRA 和 源代码 JIRA问题ZOOKEEPER-938,来自JIRA的可用补丁。 请注意:这个JIRA文章只描述了客户端-服务器的相互认证。服务器-服务器的相互认证存在单独的JIRA:Z...

赵士杰的博客 5189

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【Zookeeper】Zookeeper入门解析

一、ZooKeeper概述 1.Zookeeper简介 (1)Zookeeper是一个分布式协调服务的开源框架。主要用来解决分布式集群中应用系统的一致性问题 (2)ZooKeeper本质上是一个分布式的小文件存储系统。提供基于类似于文件系统的目录树方式的数据存储,并且可以对树中的节点进行有效管理。从而用来维护和监控你存储的数据的状态变化。通过监控这些数据状态的变化,从而可以达到基于数据的集群...

Together 7194

Zookeeper【安装篇】01:Zookeeper【单机】【手动】安装部署

Zookeeper【单机】【手动】安装部署

weixin_40612128的博客 5457

设置Zookeeper开机自启

首先在 /etc/init.d/ 目录下创建启动文件 zookeeper: 写入内容: #!/bin/bash # chkconfig: 2345 20 90 # description: zookeeper source /etc/profile case $1 in start) su - hadoop -c "${ZOOKEEPER_HOME}/bin/zkServer.sh start" if [ "$?" = "0" ] then echo "zookeeper is r

少弋弋的专栏 1257

Python Zookeeper 注册和发现服务

#!/usr/bin/env python # -*- coding: utf-8 -* import time import random import logging from kazoo.client import KazooClient from kazoo.exceptions import NodeExistsError from kazoo.client import Kazoo...

Through Da Storm 3252

ZooKeeper集群安装

目录JDK安装Zookeeper集群安装 ZooKeeper(动物园管理者)简称 ZK,是一个分布式的,开放源码的分布式应用程序协调服务组件,它的应用场景如下: 1、服务注册 2、分布式锁 3、配置管理 4、集群Master 选举 安装zookeeper集群,本文环境信息说明如下:系统CentOS7IP192.168.136.128hostnamexjw128jdk版本jdk1.8.0_181zookeep

xujinwei_gingko的专栏 1365

Zookeeper搭建集群

Zookeeper集群环境搭建 1.每台服务器节点上安装jdk1.8环境 使用java -version命令测试 java -version 2.每台服务器节点上安装Zookeeper 1.下载并且安装zookeeper安装包 wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeep...

qq_39380737的博客 2655

zookeeper 安装

安装 Hbase的Master需要zookeeper的支持,所以在集群上安装zookeeper。 将zookeeper下载解压到指定的文件夹,修改以下配置后分发到其它的节点。 修改zoo.cfg 这里主要添加了data和logs的路径以及三个服务器ip和端口 tickTime=2000 dataDir=/usr/local/zookeeper/zookeeper-3.4.5/data dataLo...

得克特 803

zookeeper安装教程

zookeeper安装教程

m0_64825044的博客 1449

Apache Zookeeper :安装zookeeper步骤

前提 安装zookeeper的注意事项: 安装前需要安装好jdk 检测集群时间是否同步 检测防火墙是否关闭 检测主机 ip映射有没有配置 下载 下载安装包、解压 下载地址: CDH版本:http://archive.cloudera.com/cdh5/cdh/5/zookeeper-3.4.5-cdh5.14.0.tar.gz apache版本:https://archive.apache.o...

4887

Docker安装Zookeeper

Docker安装Zookeeper1. 创建主机挂载配置文件2. 生成启动文件 start.sh3. 运行start.sh 启动zookeeper4. 连接zookeeper 1. 创建主机挂载配置文件 [root@wanfei ~]# mkdir -p ~/i/apps/zookeeper/{logs,data} [root@wanfei ~]# cd ~/i/apps/zookeeper/ [...

wnfff的博客 1418
上一篇: Redis穿透问题解决方案
下一篇: Zookeeper集群搭建安装
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值