ZooKeeper概述
1.Zookeeper是什么?
ZooKeeper是源代码开放的分布式协调服务,由雅虎创建,是Google CHubby的实现。
ZooKeeper是一个高性能的分布式数据一致性解决方案,它将那些复杂的、容易出错的分布式一致性服务封装起来,构成一个高效可靠得原语集,并提供一系列简单易用的接口给用户使用
知识要点:
(1)源代码开源
(2)是分布式协调服务,它解决分布式数据一致性问题
A :顺序一致性 B:原子性 C:单一视图
D:可靠性 E:实时性
(3)高性能
(4)我们可以通过挑用ZooKeep提供的接口来解决一些分布式应用中中的实际问题。
2.ZooKeeper的典型应用场景?
1.数据发布/订阅
2.负载均衡
3.命名服务
4.分布式协调和通知
3.ZooKeeper的优势
(1)源代码开源
(2)已经被证实是高性能,易用稳定的工业级产品
(3)有着广泛的应用:Hadoop,HBase,Storm,Solr
ZooKeeper的基本概念
1.集群角色
Leader,Follower,Observer
Leader服务器是整个ZooKeeper集群工作机制中的核心
Follower服务器是ZooKeeper集群状态的跟随者
Observer服务器充当一个观察者角色
相关设计模式
Leader,Follower设计模式
Observer 观察者设计模式
2.会话
会话是指客户端和ZooKeeper服务器的连接,Zookeeper中的会话叫Session,客户端与服务器建议一个TCP的长连接来维持一个Session,客户端在启动的时候所限会与服务器建立一个TCP连接,通过这个连接,客户端能通过心跳检测与服务器保持有效得 会话,也能向ZooKeeper服务器发送请求并获得相应。
3.数据节点
ZooKeeper中的节点有两类
(1)集群中的一台机器为一个节点
(2)数据模型中的数据单元Znode,分为持久节点和临时节点
ZooKeeper的数据模型是一棵树,树的节点就是Znode,Znode中可以保存信息,数据模型如下图:
4.版本
如图:
版本类型 | 说明 |
version | 当前数据节点数据内容的版本号 |
cversion | 当前数据节点数据内容的版本号 |
aversion | 当前数据节点ACL(权限控制)变更版本号 |
悲观锁和乐观锁
悲观锁又叫悲观并发锁,是数据库中一种非常严格的锁策略,具有强烈的排他性,能够避免不同事务对同一数据并发更新造成的数据不一致性,在上一个事务没有完成之前,下一个事务不能访问相同的资源,适合数据更新竞争非常激烈的场景
相比悲观锁,乐观锁使用的场景会更多,悲观锁认为事务访问相同数据的时候一定会出现相互的干扰,所以简单粗暴的使用排他访问的方式,而乐观锁认为不同事务访问相同资源是很少出现相互干扰的情况,因此在事务处理期间不需要进行并发控制,当然乐观锁也是锁,它还是会有并发的控制!对于数据库我们通常的做法是在每个表中增加一个version版本字段,事务修改数据之前先读出数据,当然版号也顺势读取出来,然后把这个读取出来的版本号加入到更新语句的条件中,比如,读取出来的版本号是1,我们修改数据的语句可以这样写,update 某某表 set 字段一=某某值 where id=1 and version=1,那如果更新失败了说明以后其他事务已经修改过数据了,那系统需要抛出异常给客户端,让客户端自行处理,客户端可以选择重试
5.watcher(观察者)
事件监听器
ZooKeeper允许用户在指定节点上注册一些Watcher,当数据节点发生变化时候,ZooKeeper服务器会把这个变化通知发送给感兴趣的客户端。
6.ACL权限控制
ACL是Access Control Lists的简写,ZooKeeper采用ACL策略进行权限控制,有以下权限:
CREATE:创建子节点的权限
REAN:获取节点数据和子节点列表的权限
WRITE:更新节点数据的权限
DELETE:删除子节点的权限
ADMIN:设置节点ACL的权限
ZooKeeper环境搭建
1.环境准备
vmware虚拟机
centos7
SecureCRT(连接虚拟机)
附件下载:
Centos7 请自己官网下载
SecureCRT(32和64)+注册机:http://pan.baidu.com/s/1mhCQwTa
ZookeePer:http://pan.baidu.com/s/1mhCQwTa
VMware:http://pan.baidu.com/s/1dE6ZcSL
步骤:
(1)使用vmvare创建三个centos7的虚拟机
IP地址:每个虚拟机服务器配置与你当前主机在同一个网段的IP
网络设置足以:如果虚拟机与SecureCRT所在的机器不是同一台,需要把3台虚拟机centos7的虚拟机的网络设置为桥接模式
(2)使用SecureCRT连接虚拟机
(3)安装配置ZooKeeper
2.三种集群
(1)集群环境
(2)单机环境
(3)伪集群环境
如何安装VMware和Centos7以及如何配置“桥接模式”下的网络请自行百度
配置使用的命令如下:
------------------------------------------------------------------------------------------------------
cd /opt
wget http://apache.fayea.com/zookeeper/stable/zookeeper-3.4.10.tar.gz
ls
tar xzvf zookeeper.tar.gz
mv zookeeper.3.4.10 zookeeper
cd zookeeper/conf/
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
i键进入插入模式
修改dataDir
dataDir=/var/zookeeper
clientport 是用来对外提供服务的端口
配置服务器的格式
server.id=host:port:port
id:即为服务器的Id,是一个整数
host:即为服务器的IP
第一个port:是Leader服务器与Follower服务器的通信端口
第二个port:是用于服务器之间选举投票选着Leader服务器的通信端口
按ESC进入命令模式 输入 :wq 保存并退出
进入var 创建zookeeper文件夹 mkdir 文件夹名称
在该文件中创建文件myid 并写入服务器Id
启动zookeeper服务器
./zkserver.sh start
关闭zookeeper服务器
./zkserver.sh stop
yum install telnet 安装telnet
服务器之间相互拷问文件
scp zoo.cfg [email protected]:/opt/zookeeper/conf
zoo.cfg的主要配置信息
------------------------------------------------------------------------------------------------------
注意事项:
1.虚拟机网络连接使用桥接模式
2.一定要关掉本机和虚拟机的防火墙