1.zookeeper简介
定义:分布式服务框架,是Apache Hadoop的子项目,主要用来解决到分布式应用中常遇到的一些数据管理问题,如果:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。
简单来说就是文件系统+监听通知机制。
文件系统:zookeeper是维护一个类似文件系统的数据结构,每个子目录都被称为znode(目录节点),和文件系统一样,可随意增加、删除znode,在一个znode下新建、删除znode,唯一不同在于znode是可以存储数据的。有四种类型的znode:
PERSISTENT-持久化目录节点,客户端与zookeeper断开连接后,节点依然存在
PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点,客户端与zookeeper断开连接后,节点依然存在,只是 Zookeeper 给该节点名称进行顺序编号
EPHEMERAL-临时目录节点,客户端与zookeeper断开连接后,删除节点
EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点,客户端与zookeeper断开连接后,删除节点,只是 Zookeeper给该节点名称进行顺序编号
监听通知机制:客户端注册监听它关心的目录节点,当目录发生变化时(数据改变、被删除、子目录节点增加删除)时,zookeeper会通知客户端
可做:实现诸如分布式应用配置管理、统一命名服务、状态同步服务、集群管理等功能。以分布式应用配置管理为例来说明zookeeper可做的事情。
例如:应用部署在多台服务器上,如果改变应用配置文件,需要逐一修改,很繁琐,但是如果配置文件在zookeeper上的某个目录节点中,然后所有相关应用对这个目录节点进行解析,一旦配置信息发生变化,多个服务器就会收到zookeeper的通知,然后从zookeeper获取最新的的应用配置到系统中
2.zookeeper单机模式安装
step1:配置java环境,执行java -version检验环境
step2:下载并解压zookeeper
cd /usr/local
wget http://mirror.bit.edu.cn/apache/zookeeper/stable/zookeeper-3.4.12.tar.gz
tar -zxvf zookeeper-3.4.12.tar.gz
cd zookeeper-3.4.12
step3:重命名配置文件 # cp conf/zoo_sample.cfg conf/zoo.cfg
step4:启动zookeeper # bin/zkServer.sh start
step5:检测是否启动成功,用zookeeper客户端连接服务器 # bin/zkCli.sh
3.zookeeper使用
使用zookeeper客户端操作
ls #ls命令查看zk中所有内容
create /zkPro myData #创建名称为zkPro的znode节点,并包含字符串为myData的内容
get /zkPro #获取名称为zkPro的znode节点包含的字符串内容
set /zkPro myData_update #通过set命令对zk关联的字符串进行设置
delete /zkPro #删除znode
使用java api操作
引入org.apache.zookeeper依赖包
create /username qingfeng #zk中增加目录节点,并将配置信息保存在其中
启动两个zookeeper客户端程序可读取到zk中username目录节点的数据,并且zk中username目录节点中的数据更新后,后台程序也及时收到了监听目录变更后的值
4.zookeeper集群模式安装
本地搭建伪集群,一台服务器启动三个zk实例组成集群,真正的集群无非是实例IP地址不同,搭建方法没有区别。
step1:配置java环境,执行java -version检验环境
step2:下载并解压zookeeper
step3:重命名配置文件 # cp conf/zoo_sample.cfg conf/zoo-1.cfg
step4:修改配置文件zoo-1.cfg,原配置文件里有的,修改成下面的值,没有的则加上
vim conf/zoo-1.cfg
dataDir=/tmp/zookeeper-1
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
step5:从zoo-1.cfg复制两个配置文件zoo-2.cfg和zoo-3.cfg,只需修改dataDir和clientPort即可
cp conf/zoo-1.cfg conf/zoo-2.cfg
cp conf/zoo-1.cfg conf/zoo-3.cfg
vim conf/zoo-2.cfg
dataDir=/tmp/zookeeper-2
clientPort=2182
vim conf/zoo-2.cfg
dataDir=/tmp/zookeeper-3
clientPort=2183
step6:标识serverId,创建三个文件夹/tmp/zookeeper-1,/tmp/zookeeper-2,/tmp/zookeeper-2,在每个目录中创建文件myid 文件,写入当前实例的server id,即1.2.3
cd /tmp/zookeeper-1
vim myid
1
cd /tmp/zookeeper-2
vim myid
2
cd /tmp/zookeeper-3
vim myid
3
step7:启动三个zk实例
bin/zkServer.sh start conf/zoo-1.cfg
bin/zkServer.sh start conf/zoo-2.cfg
bin/zkServer.sh start conf/zoo-3.cfg
step8:检测集群状态,也可以直接用命令"zkCli.sh -server IP:PORT"连接zookeeper服务端检测 或 bin/zkServer.sh status conf/zoo-1.cfg