`
starbhhc
  • 浏览: 635764 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

zookeeper原理与安装,集群服务器

 
阅读更多

 

zookeeper原理与安装

 

zookeeper是一个高可用性,高性能的协调服务

解决哪些问题
在分布式应用中,经常会出现部分失败的情况,即当节点间传递消息的时候由于网络或者接收者进程死掉等原因,发送者无法知道接收者是否收到消息。

由于部分失败是分布式系统固有的特征因此zookeeper并不能避免部分失败,但是它可以帮你在部分失败的时候进行正确处理

为了解决这个问题zookeeper具有以下特征:
1:zookeeper提供丰富的构件(building block)来实现很多协调数据结构和协议
2:访问原子性,客户端要么读到所有数据,要么读取失败,不会出现只读取部分的情况
3:zookeeper运行在一组机器上,具有高可用性,帮助系统避免单点故障,同时删掉故障服务器
4:顺序一致性:任意客户端的更新请求会被按照发送顺序提交
5:单一系统映像:当一台服务器故障,导致它的客户端需要连接其它服务器的时候,所有更新晚于故障服务器的服务器都不会接收请求,一直到更新赶上故障服务器
6:及时性:任何客户端能看到的滞后都是有限的,不会超过几十秒,且提供sync操作强制客户端所连的服务器与领导者同步
7:会话:每个客户端连接时会尝试连接到配置列表中的一台服务器,一旦失败会自动连接另一台服务器依次类推,知道成功连接一台服务器,从而创建一个会话,客户端可以位每个会话设置超时时间,一旦会话过期,则所有短暂znode会丢失,因为zookeeper会自动发送心跳包,所以很少发生
8:约会机制(rendezvous),在交互的过程中,被协调的各方不许要事先彼此了解,甚至不必同时存在
9:ACL:zookeeper提供了digest(通过用户名密码),host(通过主机名),ip(通过ip地址)3种身份验证模式,依赖与zookeeper的身份验证机制每个ACL都是一个身份对应一组权限,如果我们要给demo.com的客户端域一个读权限在java语言中可以这样创建:
new ACL(Perms.READ, new Id("host", "demo.com"));
Ids.OPEN_ACL_UNSAFE是将所有ADMIN之外的权限授予每个人
另zookeeper还可以集成第三方的身份验证系统

10:提供关于通用协调模式的开源共享资源库
11:高性能的(官方数据)对以写为主的工作负载来说使用5台不错的机器基准吞吐量达到10000+

原理
zookeeper使用zab协议,类似Paxos算法但在操作方面却是不同的,该协议包括2个不断重复的阶段
领导者选举:集群所有机器一起选出一台领导者,其它机器成为跟随者,一旦半数以上的跟随者将状态同步,表示这个阶段完成(官方数据这个阶段秩序200毫秒)
原子广播:所有机器将写操作转发给领导者,领导者再将更新广播给跟随者,只有半数以上的跟随者同步修改之后领导者才会提交更新,客户端才能收到更新成功的信息


它的核心是一个精简的文件系统,形成一个树状的数据结构,统一使用节点(znode)的概念,节点可以有子节点,也可以用来保存数据,并且有一个关联的ACL,因为zookeeper被设计来实现协调服务,通常使用小数据文件所以znode能存储的数据限制在1M以内
zookeeper采用斜杠分割的Unicode字符串来做引用类似文件系统路径,但必须是标准的,不支持./这种特殊字符,使用/zookeeper子树来保存管理信息
客户端与服务器通信采用tcp长连接,客户端和服务器通过心跳来保持seesion的连接。当session失效时临时节点会被删除。
通过监控节点以及节点的变化来实现功能,例如集群管理,配置的集中管理,分布式锁等
zookeeper通过复制实现高可用性,只要集群中半数以上的机器可用,就能提供服务,所以一个集群通常要奇数台机器

zookeeper的生命周期有以下3个状态:CONNECTION,CONNECTED,CLOSED
新产生的zookeeper实例是CONNECTION状态,通过建立连接进入CONNECTED状态,当zookeeper实例断开和重连的时候,zookeeper实例在CONNECTED和COONECTION之间转换,调用close方法或者会话超时会进入到CLOSE状态且不能恢复

 

znode特性
znode有2种,短暂node和持久node,在创建时确定,并且不能修改,短暂node在客户端session结束的时候会被移除
且不可以创建任何类型的子节点
如果在创建znode的时候设置了顺序标识,那么此znode会通过父节点维护的一个单调递增的计数器来添加一个顺序号,这个顺序号可以被用来进行全局排序
watch机制可以让客户端得到znode的变化,观察只能触发一次,为了能多次收到通知,客户端需要重新注册所需的观察


安装配置:(单机模拟集群)
下载最新版本zookeeper 
创建3个文件夹server1 server2 server3
解压缩到3个文件夹
配置zoo.cfg(配置路径不要出现中文)
是一个java属性文件
可以放在conf下面
或者/etc/zookeeper子目录中
如果配置了ZOOCFGDIR环境变量,也可以保存在该环境变量所指定的目录中

#以毫秒为单位的基本时间单元
tickTime=2000
#所有跟随者与领导者进行连接并同步的时间
#如果此时见内半数以上的跟随者未能完成同步,领导者会放弃领导,进行另一次
#领导者选举
initLimit=5
#一个跟随者与领导者同步的时间,该时间内跟随者未能完成同步会自己重启,所有关联这个跟随者的客户端将链接另一个跟随者
syncLimit=2
#存储持久数据的本地文件系统位置
dataDir=xxxx/zookeeper/server1/data
dataLogDir=xxx/zookeeper/server1/dataLog
#监听客户端连接的端口
clientPort=2181
#第一个端口是跟随者链接领导者,第二个用于领导者选举阶段的其他服务器链接
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890

在dataDir下面创建myid文件,里面写入数字,余server.后面的数字一致

 

 

 

----------------------------------------------------------------------------------------------

zookeeper-集群服务器

 

zookeeper是一个集群服务器的管理软件。可以方便管理集群中的各种资源。

直入主题,介绍一下搭建一个zookeeper集群的步骤:

1. 下载zookeeper. 可以在http://zookeeper.apache.org/releases.html 官网下载最新的zookeeper版本

2. 將下载的zookeeper压缩包在本地进行解压。 路径假设 ZOO_HOME

3. ZOO_HOME/conf目录下建立配置文件zoo.cfg,也可以将zoo_sample.cfg内容复制到zoo.cfg中

4.这里面插一句,如果在单机模式下运行。 只需要简单几行配置就可以了

 

  1. tickTime=2000  
  2. dataDir=/var/lib/zookeeper  
  3. clientPort=2181  
tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181

 

 

tickTime: 单位毫秒,用来做心跳的时间。 一个session的最小过期时间必须是tickTime 的两倍以上。

dataDir:保存zookeeper运行时的一些数据信息

clientProt:zookeeper启动后监听的端口用来提供客户端进行链接

 

如果是集群环境就要增加一些配置。

 

  1. tickTime=2000  
  2. dataDir=/var/lib/zookeeper  
  3. clientPort=2181  
  4. initLimit=5  
  5. syncLimit=2  
  6. server.1=zoo1:2888:3888  
  7. server.2=zoo2:2888:3888  
  8. server.3=zoo3:2888:3888  
tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888

 

 

介绍配置项之前首先要介绍一下,zookeeper集群中的两个概念领导者(leader)和跟随者(follower)

zookeeper的集群需要一台服务器作为领导者,负责接受客户端所有的写请求。而其他的服务器作为跟随者与领导者保持数据的同步。如果集领导者发生与其他服务器通讯发生异常,则集群中服务器重新通过投票机制再选择一台服务器作为领导者。

接下来介绍新增加的配置项

initLimit:是指集群中服务器连接到leader的最长时间限制。 比如例子中配置 initLimit=5  tickTime=2000 那么最长时间为5*2000 是10秒

syncLimit : 是集群中跟随者与leader之间接收数据的时间。计时方式与initLimit类似。

server.x=zoo1:2888:3888

x代表是服务器的id server.1 server.2 server.3 是集群中服务器的列表

zoo1 zoo2 zoo3 是服务器的ip或者域名 后面的两个端口,第一个端口用来链接leader服务器。第二个端口用来选举leader服务器

 

5.在集群服务器的dataDir中增加一个myid的配置文件。里面记录着服务器id,就是server.x中的x。告诉本机启动时是服务器列表中的哪个服务器。

   在集群中每个服务器的配置文件可以保持一致。不过myid有所不同

6.启动zookeeper 

   在集群中每台服务器上执行:

   ZOO_HOME/bin/zkServer.sh start 启动zookeeper

分享到:
评论

相关推荐

    基于zookeeper集群监测服务器宕机情况,并发邮件通知

    由于项目需要,编写基于zookeeper集群监测服务器宕机情况,并发邮件通知代码;实现很简单,编写了客户端和服务端,基于maven实现,代码方面修改zookeeper ip地址,需要部署的服务器名和邮件信息即可实现。直接打包...

    ZooKeeper-分布式过程协同技术详解

    本书分三部分,共10章。第一部分(第1~2章)阐述...第三部分(第9~10章)主要介绍ZooKeeper内部原理及如何运行ZooKeeper.第9章介绍ZooKeeper的作者们在设计时所采用的方案。第10章介绍如何对ZooKeeper进行配置。

    Zookeeper中几个重要的内部原理

    所以 Zookeeper 适合安装奇数台服务器。 2、Zookeeper 虽然在配置文件中并没有指定 Master 和 Slave。但是,Zookeeper 工作时,是由一个节点为 Leader,其他则为 Follower,Leader 是通过内部的选举机制临时产生的。...

    第6章 Zookeeper 2 6.1. Zookeeper入门 2 6.1.1. 概述 2 6.1.2. 特点 3 6.1.3

    6.2. Zookeeper安装 7 6.2.1. 本地模式安装部署 7 6.2.2. 配置参数解读 9 6.3. Zookeeper实战(开发重点) 10 6.3.1. 分布式安装部署 10 6.3.2. 客户端命令行操作 11 6.3.3. API应用 18 6.3.4. 箭头服务器节点动态...

    分布式专题-分布式协调服务02-Zookeeper的核心原理

    2PC 提交zookeeper集群集群角色Leader 角色Follower 角色Observer 角色集群组成深入分析 ZAB 协议zab 协议介绍消息广播的实现原理崩溃恢复(数据恢复)关于 ZXID从源码层面分析 leader选举的实现过程服务器启动时的 ...

    分布式专题-分布式协调服务01-初步认识Zookeeper

    zookeeper 安装部署环境部署zookeeper安装&测试zookeeper节点特性zookeeper集群搭建注册中心原理zookeeper客户端命令详解Observer事务请求会话状态zookeeper应用场景后记 前言 分布式协调服务,我们主要讲四个方面 ...

    尚硅谷大数据之Zookeeper视频(笔记+代码+资料)

    Zookeeper主要应用于大数据开发中的,统一命名服务、...本套课程讲解了,Zookeeper的集群安装、选举机制、监听器原理、写数据流程、Shell命令行操作、客户端API操作、服务器节点动态上下线综合案例以及企业真实面试题。

    zookeeper相关问题

    Zookeeper是一个分布式协调服务的开源概架,主要用来解决分布式集群中应用系统的一致性问题;ooKeeper本质上是一个分布式的小文件存储系统,提供基于类似于文件系统的目录树方式的数据存储,并且可以对树中的节点...

    Hadoop开发者第四期

    ZooKeeper 服务器工作原理和流程; ZooKeeper 实现共享锁; Hadoop 最佳实践; 通过Hadoop 的API 管理Job; Hadoop 集群的配置调优; Hadoop 平台的Java 规范及经验; MapReduce 开发经验总结; Hadoop 中的tar 命令...

    Java思维导图xmind文件+导出图片

    基于Zookeeper实现分布式服务器动态上下线感知 深入分析Zookeeper Zab协议及选举机制源码解读 Dubbo 使用Dubbo对单一应用服务化改造 Dubbo管理中心及及监控平台安装部署 Dubbo分布式服务模块划分(领域驱动) ...

    大数据视频_Zookeeper视频教程

    Zookeeper主要应用于大数据开发中的,统一命名服务、...本套课程讲解了,Zookeeper的集群安装、选举机制、监听器原理、写数据流程、Shell命令行操作、客户端API操作、服务器节点动态上下线综合案例以及企业真实面试题。

    新版全面系统完整的Zookeeper视频教程

    Zookeeper主要应用于大数据开发中的,统一命名...本套课程讲解了Zookeeper的集群安装、 选举机制、监听器原理、 写数据流程、Shell命令行操作、 客户端API操作、 服务器节点动态上下线综合案例,以及企业真实面试题。

    Redis分布式集群实战(4)——redis集群之Codis讲解和搭建

    zookeeper6、扩容7、自动均衡8、Codis 的代价9、Codis 的优点10、MGET 指令的操作过程二、codis集群的搭建实验环境实验 一、认识Codis 1、什么是codis Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接...

    一文带你吃透 Kafka 这些原理

    如果只是为了开发 Kafka 应用程序,或者只是在生产环境使用 Kafka,那么了解 Kafka 的内部工作原理不是必须的。不过,了解 Kafka 的内部工作原理有助于理解 Kafka 的行为,也利用快速诊断问题。下面我们来探讨一下这...

    大数据学习计划.pdf

    服务管理、包管理、NTP 协议时间 服务器、关系型数据库理论和 MySQL 数据库等相关知识的学习, 掌握⼤部分安装部署 Hadoop 集群操作系统层⾯的技能,为后续搭建 Hdoop 集群、对 ⽐ RDBMS 与 NoSQL 数据库打基 础。...

    4399大数据笔试题.pdf

    答案: Leader ⾓⾊ Leader 服务器是整个zookeeper 集群的核⼼,主要的⼯作任务有两项: 事物请求的唯⼀调度和处理者,保证集群事物处理的顺序性。 集群内部各服务器的调度者。 Follower ⾓⾊ Follower ⾓⾊的主要...

    浅谈分布式锁的几种使用方式(redis、zookeeper、数据库)

    可以保证在分布式部署的应用集群中,同一个方法在同一时间只能被一台机器上的一个线程执行。 这把锁要是一把可重入锁(避免死锁) 这把锁最好是一把阻塞锁(根据业务需求考虑要不要这条) 这把锁最好是一把公平...

Global site tag (gtag.js) - Google Analytics