基本概念/结构
里面资料来自兰智大数据培训资料
Zookeeper- 一个 高效的分布式协调服务
可以提供配置信息管理、命名、分布式同步、集群管理、数据库切换服务
不适合用来存储大量信息和数据,但是可以用来存储一些配置、发布和订阅少量信息。
Zookeeper集群中节点个数一半是奇数个(>=3),如果集群中Master挂掉,剩下节点在半数以上,就可以推举新的节点(leader)
其使用数据结构是tree,根节点是:“/”。Zookeeper集群中的节点,根据身份特性分leader、follower、observer。
其中leader负责客户端writer类型请求;follower负责客户端reader类型请求没参与leader选举,observer是特殊的follower,可以接收客户端reader请求,但是不会参与选举,可以用来扩容系统支撑能力提高读取速度。
Zookeeper是一个基于观察者模式设计的分布式服务管理框架,负责存储和管理相关数据,接收观察者的注册。
Zookeeper使用的是ZAB原子消息广播协议,节点之间的一致性算法为Paxos,这是Zookeeper的灵魂。可以保证分布式环境数据的一致性。关于Paxos准备再开一篇博客再说。
分布式场景下高可用是Zookeeper的特性,可采用第三方客户端实现,即Curator框架。
安装
下载
下载 zookeeper-3.4.6.jar
将其解压并导入到slave1/2
$ tar -zxvf zookeeper-3.4.6.jar
$ mv zookeeper-3.4.6.jar zookeeper # 改名
$ scp -r zookeeper slave1:/root # 传输到slave1/2
$ scp -r zookeeper slave2:/root
配置环境节点
$ vim /etc/profile
$ source /etc/profile
$ scp -r /etc/profile slave1:/etc
$ scp -r /etc/profile slave2:/etc
# 这是我的配置文件,具体修改根据自己的环境配置
export ZOOKEEPER_HOME=/root/zookeeper
export PATH=.:$JAVA_HOME/bin:$HADOOP_HOME/bin:$JPS_HOME:$HIVE_HOME/bin:$HBASE_HOME/bin:$ZOOKEEPER/bin:$PATH
修改zookeeper中配置文件
$ cd /root/zookeeper/conf
$ cp zoo_sample.cfg zoo.cfg
- 修改三个zookeeper节点中的zoo.cfg文件,修改dataDir,添加server.0\server.1\server.2
在zookeeper目录中创建data目录
$ cd /root/zookeeper
$ mkdir data
在data目录中创建myid分别输入0、1、2
$ vim myid
启动zookeeper节点
$ cd /root/zookeeper/bin
$ zkServer.sh start
$ zkServer.sh status
然后就可以看见下面这张图
Mode:leader这个涉及到zookeeper内部结构中节点对leader的节点,马上对zookeeper原理进行阐述时进行详解。
一些常用的指令
$ zkCli.sh
[zk: localhost:2181(CONNECTED) 0] ls /
# 创建test目录,并赋值
[zk: localhost:2181(CONNECTED) 1] create /test abc
Created /test
# 获取指定节点值
[zk: localhost:2181(CONNECTED) 2] get /test
abc
# 设置已存在节点值
[zk: localhost:2181(CONNECTED) 3] set /test cd
# 删除递归节点
[zk: localhost:2181(CONNECTED) 4] rmr /test
# 删除不存在子节点的节点
[zk: localhost:2181(CONNECTED) 5] delete /test/test01