ZooKeeper是一种分布式协调服务。
一、下载&安装&配置&启动:
1、下载:
https://www.apache.org/dyn/closer.cgi/zookeeper/ # 点击进入到镜像中(Linux)
http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.14/ # 下载zookeeper-3.4.14
2、安装:
需要依赖Java环境
tar -zxf zookeeper-3.4.14.tar.gz
mv zookeeper-3.4.14 zookeeper-3.4.14-first # 搭建集群形式(还有:zookeeper-3.4.14-second和zookeeper-3.4.14-thrid)
3、配置:
cd zookeeper-3.4.14-first
mkdir data
cd data
vi myid:# 这里数据与zoo.cfg中的配置的server.x=这的x保持一致
0
cd conf
vi zoo.cfg # 下面主要是zoo.cfg的配置内容
tickTime = 2000
dataDir = /home/work/huangshouxi/elk/install/zookeeper-3.4.14-first/data
clientPort = 12181
initLimit = 5
syncLimit = 2
server.0=127.0.0.1:11001:11101
server.1=127.0.0.1:11002:11102
server.2=127.0.0.1:11003:11103
后面zookeeper-3.4.14-second和zookeeper-3.4.14-thrid也是同样的修改。
上面的端口说明:
clientPort = 12181 zookeeper提供给客户端的port
server.0=127.0.0.1:11001:11101 “前面的11001端口是zookeeper集群中通讯使用的(Leader需要监听)”、“后面的11101端口是选举Leader使用的port”
4、启动&停止:
cd zookeeper-3.4.14-first/bin
./zkServer.sh start # 启动
./zkServer.sh status # 检查状态
./zkCli.sh -server 127:0.0.1:12181 # 打开,后面的操作需要在学
./zkServer.sh stop # 停止
二、运行
1、创建(create)
create [-s] [-e] path data acl
其中,-s或-e分别指定节点特性:顺序或临时节点。默认情况下,即不添加-s、-e参数的,创建的是持久节点。path为节点,data为节点的数据内容,acl表示权限控制。
create /zk-book 123
Created /zk-book
2、读取(ls和get)
1)ls path [watch]
ls命令,可以列出zookeeper指定节点下所有的子节点。
ls /
[zk-book, zookeeper]
上面返回的“zookeeper”节点是默认的
2)get path [watch]
get命令,可以获取zookeeper指定节点的数据内容和属性信息。
get /zk-book
123
cZxid = 0x50000000b
ctime = Tue May 21 17:19:01 CST 2019
mZxid = 0x50000000b
mtime = Tue May 21 17:19:01 CST 2019
pZxid = 0x50000000b
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
上面的“123”是节点数据内容,cZxid是全局唯一的事物ID
3、更新(set)
set path data [version]
data是要更新的内容,注意:set命令后面还有个version,在Zookeeper中,节点的数据是有版本的概念,这个参数用于指定本次更新操作是基于Znode的拿一个数据版本进行的。
set /zk-book 456
cZxid = 0x50000000b
ctime = Tue May 21 17:19:01 CST 2019
mZxid = 0x50000000c
mtime = Tue May 21 17:32:01 CST 2019
pZxid = 0x50000000b
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
上面命令执行完,data的内容发生变化,dataVersion的值从0变为1,这是因为刚才的更新操作导致节点的数据版本也发生了变化。
4、删除(delete)
delete path [version]
delete /zk-book
注意:不能删除某个有子节点的节点,否则报错:Node not empty: /zk-book
三、zookeeper的额外知识
- 分布式架构
1、什么是集中式?
集中式系统是指一台或者多台主计算机组成中心节点,数据集中存储于这个中心节点,并且整个系统的所有单元都集中部署在这个中心节点上,系统的所有功能均由其集中处理。
在集中式系统中,每个终端或者客户端机器仅仅负责数据的录入和输出,而数据的存储和控制处理完全交由主机完成。
集中式系统最大的特点是部署结构简单。但是集中式系统基于底层性能卓越的大型主机,不需要考虑进行多节点的部署,也就不用考虑多节点之间的分布式协作问题。
2、什么是分布式?
分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。
分布性、对等性、并发性、缺乏全局时钟、故障总是会发生
3、分布式环境会出现的问题?
通信异常:网络本身不可靠、延时
网络分区:网络问题导致某些节点不能正常工作
三态:成功、失败、超时(集中式没有超时)
节点故障:某些节点服务器宕机
4、ACID
原子性:Atomicity
要么全部成功执行、要么全部不执行
一致性:Consistency
事物在执行过程中不能破坏数据库数据的完整性和一致性,从一个一致性转变到另一个一致性状态
隔离性:Isolation
并发的事物相互隔离的,一个事物的执行不能被其他事物干扰。
4种隔离级别:未授权读取、授权读取、可重复读取、串行化
持久性:Durability
一个事务一旦提交,它对数据库中对应的数据的状态变更就是永久性的。
5、CAP定理
一个分布式系统不可能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这3个基本需求,最多只能同时满足其中的两项。
6、BASE理论
BASE是基本可用(Basically Avilable)、软状态(Soft state)、最终一致性(Eventually consistent)组成。BASE是对CAP中的一致性个可用性权衡的结果,其核心思想是即使无法做到强一致性,但是每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性。
- 一致性协议
1、2PC与3PC
2PC(二阶段提交):提交事务请求、执行事务请求
3PC(三阶段提交):CanCommit、PreCommit、DoCommit
2、Paxos?
Paxos的工程实践
- Chubby
- Hypertable
- Zookeeper
- Zookeeper的设计目标
- 简单的数据模型:可以通过一个共享的、树型结构的名字空间进行相互协调(内部就像一个文件系统)
- 可以构建集群:一个Zookeeper集群通常由一组机器组成,一般3~5台机器就可以组成一个可用的Zookeeper集群
- 顺序访问:对每一个来自客户端的请求,Zookeeper都会分配一个全局唯一的递增编号,这个编号反应所有事务操作的先后顺序
- 高性能:Zookeeper将全量的数据存储在内存中。
- ZAB?
ZAB(Zookeeper Atomic Broadcast)原子消息广播协议,一钟支持崩溃的原子广播协议。(所有事务请求必须由一个全局唯一的服务器来协调处理,这样的服务器被称为Leader服务器,而余下的其他服务器则成为Follower服务器。Leader服务器负责将一个客户端事务请求转换成一个事物proposal(提议),并将该proposal分发给集群真能干所有的Follower服务器。之后Leader服务器需要等待所有Follower服务器的反馈,一旦超过半数的Follower服务器进行了正确的反馈后,那么Leader就会再次向所有的Follower服务器分发Commit消息,要求其将前一个proposal进行提交。)两个过程:消息广播、崩溃恢复
- 使用Zookeeper
1、部署&使用:https://mp.csdn.net/postedit/90270638
- Zookeeper的典型应用场景
- 数据发布/订阅
- 负载均衡
- 命名服务
- 分布式协调/通知
- 集群管理
- Master选举
- 分布式锁
- 分布式队列
- Zookeeper计数内幕
- 数据模型
树:在Zookeeper中,每一个数据节点多被称为一个ZNode,所有的ZNode按层次化结构进行组织,形成一颗树。Znode的节点路径标志方式和Unix文件系统路径非常相似,都是由一系列使用斜杠(/)进行分割的路径表示,开发人员可以向这个节点中写入数据,也可以在节点下创建子节点。
事务ID:狭义上的事物通常指的是数据事务,一般包含一系列对数据库有序的读写操作,这些数据库事务具有的所谓的ACID特性。在Zookeeper中,事务是指能够改变Zookeeper服务器状态的操作,我们也称为事务操作或更新操作,一般包含数据节点创建与删除、数据节点内容更新和客户端会话创建与失效等操作。ZXID表示的是一个全局唯一的事务ID。
- 节点特性
节点类型:持久节点、持久顺序节点、临时节点、临时顺序节点
- 版本
保证分布式数据原子性操作
- Watcher
数据变更的通知(客户端注册Watcher、服务端处理Watcher、客户端回调Watcher)
- ACL
保障数据的安全