Zookeeper学习概览

来源:互联网 发布:mac系统镜像下载 编辑:程序博客网 时间:2024/06/05 19:21

CAP定理:

Consistency(一致性), 数据一致更新,所有数据变动都是同步的
Availability(可用性), 好的响应性能
Partition tolerance(分区容错性) 可靠性


定理:任何分布式系统只可同时满足二点,没法三者兼顾。

做到了分布式里面数据的最终一致性、保证自己高可用!!!

 

角色:

Server(Leader、Follower、Observer)

Client

 

核心算法Paxos协议,半数以上票数才算通过

讲了个Paxos岛里面议员、总统、屁民他们提案通过的流程(数据的增删改)

总统挂了,选举总统的流程(Leader Election)

具体请看:http://blog.csdn.net/qq_21835703/article/details/51923277

 

节点数据操作流程(回忆起PPT里面的图,六个过程)

 

 

Zookeeper为什么要搭建奇数台(容错)

Leader选举算法采用了Paxos协议; Paxos核心思想:当多数Server写成功,则任务数据写成功 如果有3个Server,则两个写成功即可; 如果有4或5个Server,则三个写成功即可。Server数目一般为奇数(3、5、7)如果有3个Server,则最多允许1个Server挂掉;如果有4个Server,则同样最多允许1个Server挂掉由此,我们看出3台服务器和4台服务器的的容灾能力是一样的,所以 为了节省服务器资源,一般我们采用奇数个数,作为服务器部署个数。

 

搭建集群的配置

(直接解压tar安装包修改配置文件即可)

创建myid文件,server1机器的myid内容为:1,server2 机器的内容为:2,server3机器的内容为:3

»在conf目录下创建一个配置文件zoo.cfg,

tickTime=2000

dataDir=/Users/zdandljb/zookeeper/data (目录需要手动创建,myid文件放该目录下)

dataLogDir=/Users/zdandljb/zookeeper/dataLog(此条可以不写)

clientPort=2181 

initLimit=5

syncLimit=2

server.1=server1:2888:3888

server.2=server2:2888:3888

server.3=server3:2888:3888

 tickTime:发送心跳的间隔时间,单位:毫秒 

• dataDir:zookeeper保存数据的目录。 

• clientPort:客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客 户端的访问请求。

 • initLimit: 这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连 接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 5 个心跳的 时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表 明这个客户端连接失败。总的时间长度就是 5*2000=10 秒 

• syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最 长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2*2000=4 秒

 • server.A=B:C:D:其 中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一 集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这 个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是 一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号 。 


ZooKeeper服务命令:

 

     在准备好相应的配置之后,可以直接通过zkServer.sh 这个脚本进行服务的相关操作

 

   1. 启动ZK服务:       sh bin/zkServer.shstart

   2. 查看ZK服务状态:   sh bin/zkServer.sh status

   3. 停止ZK服务:       sh bin/zkServer.shstop

   4. 重启ZK服务:       sh bin/zkServer.shrestart

 

 

./zkCli.sh -server redis002:2181

 

zk客户端命令

 

ZooKeeper命令行工具类似于Linux的shell环境,不过功能肯定不及shell啦,但是使用它我们可以简单的对ZooKeeper进行访问,数据创建,数据修改等操作.  使用 zkCli.sh-server 127.0.0.1:2181 连接到 ZooKeeper 服务,连接成功后,系统会输出 ZooKeeper 的相关环境以及配置信息。

 

命令行工具的一些简单操作如下:

 

   1. 显示根目录下、文件: ls / 使用 ls 命令来查看当前 ZooKeeper 中所包含的内容

   2. 创建文件,并设置初始内容: create /zk "test" 创建一个新的 znode节点“ zk ”以及与它关联的字符串

   3. 获取文件内容: get /zk 确认 znode 是否包含我们所创建的字符串

   4. 修改文件内容: set /zk "zkbak" 对 zk 所关联的字符串进行设置

   5. 删除文件: delete /zk 将刚才创建的 znode 删除

   6. 退出客户端: quit

   7. 帮助命令: help

 

 

 

ZooKeeper常用四字命令:

 

     ZooKeeper 支持某些特定的四字命令字母与其的交互。它们大多是查询命令,用来获取 ZooKeeper 服务的当前状态及相关信息。用户在客户端可以通过 telnet 或 nc 向 ZooKeeper 提交相应的命令

 

   1. 可以通过命令:echo stat|nc 127.0.0.1 2181 来查看哪个节点被选择作为follower或者leader

   2. 使用echo ruok|nc 127.0.0.1 2181 测试是否启动了该Server,若回复imok表示已经启动。

   3. echo dump| nc 127.0.0.1 2181 ,列出未经处理的会话和临时节点。

   4. echo kill | nc 127.0.0.1 2181 ,关掉server

   5. echo conf | nc 127.0.0.1 2181 ,输出相关服务配置的详细信息。

   6. echo cons | nc 127.0.0.1 2181 ,列出所有连接到服务器的客户端的完全的连接/ 会话的详细信息。

   7. echo envi |nc 127.0.0.1 2181 ,输出关于服务环境的详细信息(区别于conf 命令)。

   8. echo reqs | nc 127.0.0.1 2181 ,列出未经处理的请求。

   9. echo wchs | nc 127.0.0.1 2181 ,列出服务器 watch 的详细信息。

   10. echo wchc | nc 127.0.0.1 2181 ,通过 session 列出服务器 watch 的详细信息,它的输出是一个与 watch 相关的会话的列表。

   11. echo wchp | nc 127.0.0.1 2181 ,通过路径列出服务器 watch 的详细信息。它输出一个与session 相关的路径。

 

 

 

znode节点的状态信息

 

使用get命令获取指定节点的数据时, 同时也将返回该节点的状态信息, 称为Stat. 其包含如下字段:

 

   czxid. 节点创建时的zxid.

   mzxid. 节点最新一次更新发生时的zxid.

   ctime. 节点创建时的时间戳.

   mtime. 节点最新一次更新发生时的时间戳.

   dataVersion. 节点数据的更新次数.

   cversion. 其子节点的更新次数.

   aclVersion. 节点ACL(授权信息)的更新次数.

   ephemeralOwner. 如果该节点为ephemeral节点, ephemeralOwner值表示与该节点绑定的session id. 如果该节点不是ephemeral节点, ephemeralOwner值为0. 至于什么是ephemeral节点, 请看后面的讲述.

   dataLength. 节点数据的字节数.

   numChildren. 子节点个数.

 


ZAB原子广播:

具体可以看博客:http://blog.csdn.net/mayp1/article/details/51871761

 

Znode有四种形式的目录节点:

persistent

ephemeral(client server断链接的时候会自动删除)

persistent_sequential

ephemeral_sequential

 

JAVA API提供一些方法可以注册watcher:

注意这个Watcher它只报告一次event!!!

exists,getChildren,getData

 

集群管理-->高可用的实现-->Demo

资源权限的管理-->分布式锁的实现-->分布式锁的内部项目


0 0