zookeeper集群

安装Zookeeper

倖福魔咒の 提交于 2019-12-10 16:51:09
安装zookeeper的注意事项: 安装前需要安装好jdk 检测集群时间是否同步 检测防火墙是否关闭 检测主机 ip映射有没有配置 下载安装包、解压 下载地址: CDH版本:http://archive.cloudera.com/cdh5/cdh/5/zookeeper-3.4.5-cdh5.14.0.tar.gz apache版本:https://archive.apache.org/dist/zookeeper/ 1、解压: cd /export/software tar -zxvf zookeeper-3.4.5-cdh5.14.0.tar.gz -C /export/servers/ 2、修改环境变量(注意:3台zookeeper都需要修改) vim /etc/profile export ZOOKEEPER_HOME=/export/servers/zookeeper-3.4.5-cdh5.14.0 export PATH=$PATH:$ZOOKEEPER_HOME/bin source /etc/profile 3、修改zookeeper配置文件 cd /export/servers/zookeeper-3.4.5-cdh5.14.0/conf cp zoo_sample.cfg zoo.cfg vim zoo.cfg 修改内容: dataDir=/export

Zookeeper系列之高级篇

一笑奈何 提交于 2019-12-10 09:57:21
Zookeeper系列之高级篇 1. NIO、ZAB协议、2PC提交相关概念 2. Leader选举 3. 手写分布式锁,配置中心 ==================================== 一. NIO、ZAB协议、2PC提交相关概念 1 NIO NIO中的几个概念 Channel 可以将NIO中的Channel同传统IO中的Stream来类比,但是要注意,传统IO中,Stream是单向的,比如InputStream只能进行读取操作,OutStream只能写操作。而Channel是双向的,即可用来进行读操作,又可用来进行写操作 Buffer 在NIO中所有数据的读和写都离不开Buffer,读取的数据只能放在Buffer中,写入的数据也是先写入到Buffer中 Seletor 将Channel和Seletor配合使用,必须将channel注册到Seletor上,通过SelectableChannel.register()方法来实现 2 2PC (Two Phase Commitment Protocol)当一个事务操作需要跨越多个分布式节点的时候,为了保持事务处理的ACID 特性,就需要引入一个“协调者”(TM)来统一调度所有分布式节点的执行逻辑,这些被调度的分布式节点被称为AP。TM负责调度AP的行为,并最终决定这些AP是否要把事务真正进行提交

Zookeeper系列之基础篇

孤人 提交于 2019-12-10 07:33:44
Zookeeper系列之基础篇 1. Zookeeper概述 2. Zookeeper必知必会 3. 集群介绍 ==================================== 一. Zookeeper概述 是一个开源的分布式应用的服务,提供了更高级别的服务,包括:同步、配置维护、分组和命名。 主要目标:通过与标准文件系统一致的组织结果的命名空间,允许分布式进程之间可以进行同步。 功能:提供了优质的高性能、高可用性、和严格有序的访问 二. Zookeeper必知必会 节点类型 持久节点:所谓持久节点,是指持久节点,是指在节点创建后,就一直存在,直到有删除操作来主动清除这个节点。 临时节点:和持久节点不同的是,临时节点的生命周期和客户端会话绑定。也就是说,如果客户端会话失效,那么这个节点就会自动被清除掉。注意,这里提到的会话失效,而非连接断开。另外,在临时节点下面不能创建子节点。 持久顺序节点:这类节点的基本特性和持久节点是一致的。额外的特性是,在ZK中,每个父节点会为他的第一级子节点维护一份时序,会记录每个子节点创建的先后顺序。基于这个特性,在创建子节点的时候,可以设置这个属性,那么在创建节点过程中,ZK会自动为给定节点名加上一个数字后缀,作为新的节点名。这个数字后缀的范围是整型的最大值。 临时顺序节点:类似临时节点和顺序节点

Zookeeper集群管理与选举

倖福魔咒の 提交于 2019-12-10 02:45:10
Zookeeper集群管理与选举 1.集群机器监控 这通常用于那种对集群中机器状态,机器在线率有较高要求的场景,能够快速对集群中机器变化作出响应。这样的场景中,往往有一个监控系统,实时检测集群机器是否存活。过去的做法通常是:监控系统通过某种手段(比如ping)定时检测每个机器,或者每个机器自己定时向监控系统汇报“我还活着”。 这种做法可行,但是存在两个比较明显的问题:  集群中机器有变动的时候,牵连修改的东西比较多。  有一定的延时。 利用ZooKeeper有两个特性,就可以实时另一种集群机器存活性监控系统:  客户端在节点 x 上注册一个Watcher,那么如果 x?的子节点变化了,会通知该客户端。  创建EPHEMERAL类型的节点,一旦客户端和服务器的会话结束或过期,那么该节点就会消失。 例如,监控系统在 /clusterServers 节点上注册一个Watcher,以后每动态加机器,那么就往 /clusterServers 下创建一个 EPHEMERAL类型的节点:/clusterServers/{hostname}. 这样,监控系统就能够实时知道机器的增减情况,至于后续处理就是监控系统的业务了。 2.Master选举 在分布式环境中,相同的业务应用分布在不同的机器上,有些业务逻辑(例如一些耗时的计算,网络I/O处理),往往只需要让整个集群中的某一台机器进行执行

zookeeper-开始

ⅰ亾dé卋堺 提交于 2019-12-10 02:39:54
ZooKeeper:为分布式应用提供的分布式协调服务 ZooKeeper提供一系列原语用于分布式应用构建更高层次的服务,如同步、配置维护、分组以及命名空间。 设计目标: ZooKeeper足够简单且可复制。 组成ZooKeeper服务当中的服务器知道彼此之间的存在。服务器在持久存储中维护状态内存映像以及事务日志和快照。只要大多数的服务是可用的,ZooKeeper服务也是可用的。 客户端连接一台ZooKeeper服务器,维护一个TCP连接,通过它连接请求、获取响应及通知事件,并发送心跳包。如果服务器端的TCP连接断开,客户端将连接到另一个服务器。 ZooKeeper是有序的 。ZooKeeper时间戳每次更新都会带一个编号用于反映ZooKeeper事务的顺序。后续操作可依据这个顺序用于实现更高层次的抽象,如同步原语。 ZooKeeper是快速的 。在用于读为主的应用场景特别快速。ZooKeeper应用运行于上千台机器,在读远多于写的场景上表现最佳,通常读写比例为10:1。 数据模型及分层命名空间 依托于ZooKeeper的命名空间有点类似标准的文件系统。名称是由“/”分隔组成的字符串。在ZooKeeper的命名空间中每个节点是用路径标识出来的。 节点以及临时节点 不像标准的文件系统,在ZooKeeper命令空间中每个节点都可以有数据关联到(类似子节点)。这就好像一个文件系统

zookeeper安装部署

一世执手 提交于 2019-12-09 23:41:59
前提 1.安装前需要安装好jdk 2.检测集群时间是否同步 3.检测防火墙是否关闭 4.检测主机 ip映射有没有配置 下载安装包 CDH版本:http://archive.cloudera.com/cdh5/cdh/5/zookeeper-3.4.5-cdh5.14.0.tar.gz apache版本:https://archive.apache.org/dist/zookeeper/ 上传解压安装包 上传 解压 修改环境变量(所有使用zookeeper的节点都需要配置) 进入配置文件: vim / etc / profile . d / zookeeper . sh 配置: export ZOOKEEPER_HOME = zookeeper的安装路径 export PATH = $PATH : $ZOOKEEPER_HOME / bin 使环境生效 source / etc / profile 修改zookeeper配置文件 创建存储数据的文件夹并添加id mkdir - p / export / servers / zookeeper - 3.4 .5 - cdh5 . 14.0 / zkdata cd / export / servers / zookeeper - 3.4 .5 - cdh5 . 14.0 / zkdata echo 1 > myid

Apache ZooKeeper

♀尐吖头ヾ 提交于 2019-12-09 22:42:57
1丶Zookeeper基本知识 1.1、ZooKeeper集群搭建 Zookeeper集群搭建指的是ZooKeeper分布式模式安装。通常由2n+1台 servers组成。这是因为为了保证Leader选举(基于Paxos算法的实现)能过得 到多数的支持,所以ZooKeeper集群的数量一般为奇数。 Zookeeper运行需要java环境,所以需要提前安装jdk。对于安装 leader+follower模式的集群,大致过程如下: 配置主机名称到IP地址映射配置 修改ZooKeeper配置文件 远程复制分发安装文件 设置myid 启动ZooKeeper集群 如果要想使用Observer模式,可在对应节点的配置文件添加如下配置: peerType=observer 其次,必须在配置文件指定哪些节点被指定为Observer,如: server.1:node-1:2181:3181:observer 1.2、ZooKeeper概述 Zookeeper是一个分布式协调服务的开源框架。主要用来解决分布式集群中应用系统的一致性问题。 ZooKeeper本质上是一个分布式的小文件存储系统。提供基于类似于 文件系统的目录树方式的数据存储,并且可以对树中的节点进行有效管理。从而用来维护和监控你存储的数据的状态变化。通过监控这些数据状态的变化,从而可以达到基于数据的集群管理。 1.3

ZooKeeper选举机制

时光毁灭记忆、已成空白 提交于 2019-12-09 22:37:59
全新集群选举 假设目前有5台服务器, 每台服务器均没有数据 ,它们的编号分别是1,2,3,4,5, 按编号依次启动 ,它们的选择举过程如下: 服务器1启动,给自己投票,然后发投票信息,由于其它机器还没有启动所以它收不到反馈信息,服务器1的状态一直属于Looking。 服务器2启动,给自己投票,同时与之前启动的服务器1交换结果,由于服务器2的编号大所以服务器2胜出,但此时投票数没有大于半数,所以两个服务器的状态依然是LOOKING。 服务器3启动,给自己投票,同时与之前启动的服务器1,2交换信息,由于服务器3的编号最大所以服务器3胜出,此时投票数正好大于半数,所以服务器3成为领导者,服务器1,2成为小弟。 服务器4启动,给自己投票,同时与之前启动的服务器1,2,3交换信息,尽管服务器4的编号大,但之前服务器3已经胜出,所以服务器4只能成为小弟。 服务器5启动,后面的逻辑同服务器4成为小弟。 非全新集群选举 对于运行正常的zookeeper集群,中途有机器down掉,需要重新选举时,选举过程就需要加入 数据ID 、 服务器ID 和 逻辑时钟 。 数据ID:数据新的version就大,数据每次更新都会更新version。 服务器ID:就是我们配置的myid中的值,每个机器一个。 逻辑时钟:这个值从0开始递增,每次选举对应一个值。 如果在同一次选举中,这个值是一致的。 这样选举的标准就变成

ZooKeeper常用API

删除回忆录丶 提交于 2019-12-09 22:35:38
org.apache.zookeeper.Zookeeper Zookeeper 是在Java中客户端主类,负责建立与zookeeper集群的会话,并提供方法进行操作。 org.apache.zookeeper.Watcher Watcher接口表示一个标准的事件处理器,其定义了事件通知相关的逻辑,包含KeeperState和EventType两个枚举类,分别代表了通知状态和事件类型,同时定义了事件的回调方法:process(WatchedEvent event)。 process方法是Watcher接口中的一个回调方法,当ZooKeeper向客户端发送一个Watcher事件通知时,客户端就会对相应的process方法进行回调,从而实现对事件的处理。 基本使用 引入pom文件 <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.9</version> </dependency> 创建一个子节点 package com.czxy.zookeeper.demo01; import org.apache.zookeeper.*; import java.io.IOException; /** * @author 550894211@qq

Zookeeper的选举机制原理及常用命令

两盒软妹~` 提交于 2019-12-09 20:28:24
三个核心选举原则: (1)Zookeeper集群中只有超过半数以上的服务器启动,集群才能正常工作; (2)在集群正常工作之前,myid小的服务器给myid大的服务器投票,直到集群正常工作,选出Leader; (3)选出Leader之后,之前的服务器状态由Looking改变为Following,以后的服务器都是Follower。 下面以一个简单的例子来说明整个选举的过程: 假设有五台服务器组成的Zookeeper集群,它们的id从1-5,同时它们都是最新启动的,也就是没有历史数据,在存放数据量这一点上,都是一样的。 假设这些服务器从id1-5,依序启动: 因为一共5台服务器,只有超过半数以上,即最少启动3台服务器,集群才能正常工作。 (1)服务器1启动,发起一次选举。 服务器1投自己一票。此时服务器1票数一票,不够半数以上(3票),选举无法完成; 服务器1状态保持为LOOKING; (2)服务器2启动,再发起一次选举。 服务器1和2分别投自己一票,此时服务器1发现服务器2的id比自己大,更改选票投给服务器2; 此时服务器1票数0票,服务器2票数2票,不够半数以上(3票),选举无法完成; 服务器1,2状态保持LOOKING; (3)服务器3启动,发起一次选举。 与上面过程一样,服务器1和2先投自己一票,然后因为服务器3id最大,两者更改选票投给为服务器3; 此次投票结果:服务器1为0票