Zoopeeker初识

分布式协调服务

模型

具有两种运行状态,可用(leader存在)及不可用(leader不存在),不可用状态需要及时恢复到可用状态的时间需要越快越好,官方压测时间可以维持在200毫秒以内.

性能

zookeeper在”读取主导”工作负载中特别快,运行在数千台计算机上并且读取写入比大约为10:1的时候性能最佳.

官方给出的读写占比及计算机数量性能图

结构

目录树结构,node可以存储数据,单个节点存储的最大数据为1mb,节点可以分为几种,持久节点,临时节点(依赖session),序列节点(概念)

保证

提供了一系列保证

  • 顺序一致性 客户端的更新将按发送顺序应用
  • 原子性 更新成功或失败,没有中间结果(最终一致性而并非强一致性,过半通过就可以)
  • 单系统镜像 无论服务器连接到哪个服务器,客户端都将看到相同的服务视图
  • 可靠性 一旦应用了更新,它将从那时起持续到客户端覆盖更新
  • 及时性 系统的客户视图保证在特定时间范围内是最新的(最终一致性,有可能会在很短的时间内不能访问即时的数据)

安装及实践

server.1=aqua:2888:3888

#常用指令
help
ls /
create
get
rmr
stat

创建节点时,一定要给数据,哪怕是不要数据,也一定要给一个””,否则会创建失败

zookeeper存储是二进制安全的.只关心二进制化的字符串,不关心字符串的具体格式,里面有啥字符,只会严格的按照二进制的数据存取,不会以某种特殊格式解析字符串,即使用字节数组存储.

zookeeper的顺序执行体现在id上,leader维护了一个id的递增.

id格式详解:

zookeeper 的每个节点都有三个 zxid 值:cZxid、mZxid 和 pZxid,分别代表的时间戳对应为:

c(create,新增):对应为该节点的创建时间

m(mofify,修改):对应该节点的最近一次的修改时间

p(子节点):该节点或该节点的子节点最近一次创建/删除的时间,有本节点/子节点有关,与孙子节点无关

0x:代表16进制,每一个位代表四个二进制位,共有32位,也就是低32位,16进制数必须以 0x开头

x后面的2代表纪元,也就是说每次更换leader就会递增这个纪元

常见zookeeper指令

每一个客户端有一个session连接的时候,都会创建一个sessionid.

临时节点会伴随着session的消失而消失.

当一个client连接一个server的时候,这个session会被所有的server知道,这就是所谓的统一视图.

create -s (创建队列,防止多个客户端创建产生冲突)
netstat -natp| egrep '(2888|3888)'

查资料得知

2181:对cline端提供服务

2888:集群内机器通讯使用(Leader监听此端口)

3888:选举leader使用

端口状态

LISTEN:(Listening for a connection.)侦听来自远方的TCP端口的连接请求

SYN-SENT:(Active; sent SYN. Waiting for a matching connection request after having sent a connection request.)再发送连接请求后等待匹配的连接请求

SYN-RECEIVED:(Sent and received SYN. Waiting for a confirming connection request acknowledgment after having both received and sent connection requests.)再收到和发送一个连接请求后等待对方对连接请求的确认

ESTABLISHED:(Connection established.)代表一个打开的连接

FIN-WAIT-1:(Closed; sent FIN.)等待远程TCP连接中断请求,或先前的连接中断请求的确认

FIN-WAIT-2:(Closed; FIN is acknowledged; awaiting FIN.)从远程TCP等待连接中断请求

CLOSE-WAIT:(Received FIN; waiting to receive CLOSE.)等待从本地用户发来的连接中断请求

CLOSING:(Closed; exchanged FIN; waiting for FIN.)等待远程TCP对连接中断的确认

LAST-ACK:(Received FIN and CLOSE; waiting for FIN ACK.)等待原来的发向远程TCP的连接中断请求的确认

TIME-WAIT:(In 2 MSL (twice the maximum segment length) quiet wait after close. )等待足够的时间以确保远程TCP接收到连接中断请求的确认

CLOSED:(Connection is closed.)没有任何连接状态