Zookeeper
一、介绍
01) 分布式协调服务的开源框架,主要解决分布式集群中应用系统间的一致性问题.
02) 小文件的存储系统(数据存放在内存中,数据量有大小限制), 以树形结构进行组织数据
03) 可以维护和监控数据状态的变化,通过监控数据状态的变化,达到分布式系统中集群管理的效果.
04) 分布式程序: 可以多台服务器部署(可靠 稳定)
05) zookeeper是一个主从架构集群(一个大哥带着多个小弟干活)
二、特性
01) 全局数据一致性
无论客户端连到哪一个 ZooKeeper 服务器上,其看到的服务端数据模型都是一致的.
02) 原子性
一次数据更新要么成功(过半更新成功),要么失败,不存在中间状态
03) 可靠性
一旦一次更改请求被应用,更改的结果就会被持久化,直到被下一次更改覆盖
04) 顺序性
客户端发起的事务请求,最终将会严格地按照顺序被应用到 ZooKeeper 中去
三、角色介绍
01) 主角色:leader
事务性请求的唯一处理和调度者,保证集群事务处理的顺序性,同时全局统一协调管理各个follower
02) 从角色
响应非事务处理请求(查询请求),转发事务请求给leader,参与leader的选举投票
03) observer 观察者角色
没有投票选举权的follower,可以响应非事务处理请求,转发事务请求给leader
通常用于zk集群扩大读性能
四、安装部署
01) 上传zookeeper的安装包到一台服务器上
cd /export/software
rz 选择zookeeper的安装包进行上传
02) 解压zookeeper到指定的目录
tar -zxf zookeeper-3.4.5-cdh5.14.0.tar.gz -C /export/servers/
cd /export/servers/
03) 修改zookeeper的配置文件
cd /export/servers/zookeeper-3.4.5-cdh5.14.0/conf
mv zoo_sample.cfg zoo.cfg
vi zoo.cfg
修改内容如下:
dataDir=/export/data/zk
配置文件底部添加如下内容:
server.1=hadoop01:2887:3887
server.2=hadoop02:2887:3887
server.3=hadoop03:2887:3887
备注:
2181: zookeeper客户端连接端口
2887: 服务器间通信的端口
3887: 选举的端口
04) 将配置好的zookeeper分发给其他两台主机上
cd /export/servers/
scp -r zookeeper-3.4.5-cdh5.14.0/ root@hadoop02:$PWD //将zookeeper复制到node02的同级目录下
scp -r zookeeper-3.4.5-cdh5.14.0/ root@hadoop03:$PWD //将zookeeper复制到node03的同级目录下
备注:
scp远程拷贝
-r 拷贝文件夹
$PWD: 和当前目录一致
05) 分别在三台主机上创建数据存放目录和myid文件
hadoop01:执行的命令
mkdir -p /export/data/zk
echo "1" > /export/data/zk/myid //将1字符串写入myid这个文件中,文件位置和文件名不可以修改
cat /export/data/zk/myid //此命令用于查看此文件有没有正确写入 1
hadoop02:执行的命令
mkdir -p /export/data/zk
echo "2" > /export/data/zk/myid
cat /export/data/zk/myid //此命令用于查看此文件有没有正确写入 2
hadoop03:执行的命令
mkdir -p /export/data/zk
echo "3" > /export/data/zk/myid
cat /export/data/zk/myid //此命令用于查看此文件有没有正确写入 3
06) 配置zookeeper的环境变量
vim /etc/profile
export ZK_HOME=/export/servers/zookeeper-3.4.5-cdh5.14.0
export PATH=$PATH:$ZK_HOME/bin
source /etc/profile 让环境变量生效
07) 启动和关闭zookeeper集群
三台服务器逐个启动: zkServer.sh start
停止zookeeper的命令: zkServer.sh stop
08) 查看zookeeper集群的状态
zkServer.sh status
09) 编写一键启动脚本
#!/bin/sh
echo "启动zookeeper中...."
for host in hadoop01 hadoop02 hadoop03
do
ssh -q $host "source /etc/profile; /export/servers/zookeeper-3.4.5-cdh5.14.0/bin/zkServer.sh start"
done