zookeeper:
为读多写少的场景所设计 并不是存储大规模业务数据
而是用于存储少量的状态和 配置信息,每个节点存储数据不能超过1MB
数据存储基于节点 znode(包含数据子节点 子节点引用 访问权限)
Zookeeper service 一主多从结构:
更新数据时 首先更新到主节点 (主节点是服务器)
leader:事务请求的调度处理者 负责投票的发起和决议 处理写请求 保证集群事务处理的顺序性
follower:转发事务请求给leader 参与投票 参与leader选举投票
observer:不参与投票 同步leader状态 目的是扩展系统 提高读取速度
client:执行读写请求的发起方
ZAB协议: 为了保证主从节点数据一致 采用ZAB协议
ZAB的三种节点状态:
looking:选举状态
following:从节点所处状态
leading:主机所处状态
崩溃恢复:zookeeper当前的主节点挂掉 集群就会进行 崩溃恢复
ZAB的崩溃恢复分为三个阶段:
1.leader election:选举阶段
2.discovery:发现阶段
3.synchornization:同步阶段
Zab 协议既不是强一致性 也不是弱一致性 而是处于两者之间的单调一致性 他依靠事务id和版本号 保证数据的更新和读取是有序的 。
zookeeper应用场景:
1.分布式锁:利用zookeeper的临时顺序节点 可以轻松实现分布式锁
2.服务器注册和发现:利用znode和watcher 可以实现分布式服务的注册和发现 阿里的分布式RPC框架和Dubbo
3.共享配置和状态信息:redis的分布式解决codis 就利用zookeeper 来存放 数据路由表和codis-proxy 节点的元信息 通过zookeeper同步到各个存活的的codis-proxy 此外,Kafka Hbase Hadoop 也都依靠zookeeper同步节点信息 是实现高可用。
zookeeper工作模式:
单机 集群 伪集群(就是在一台物理机上运行多个Zookeeper 实例)
集群模式:
实验环境:(搭建elk平台的Kafka集群 本节先部署zookeeper)
IP sever myid
192.168.42.101 kafka+zookeeper 1
192.168.42.102 kafka+zookeeper 2
192.168.42.103 kafka+zookeeper 3
zk服务器集群规模不得小于3个节点
要求各个服务器之间的系统时间保持一致。
zookeeper集群安装:
1.在三个节点解压程序 创建 数据库目录 安装jdk:
#创建zookeeper存放目录及数据库目录:
mkdir -p /opt/zookeeper/data
#解压程序:
tar -xf zookeeper-3.4.14.tar.gz -C /opt/zookeeper/
#安装JDK(如果已经安装过,可以跳过)
rpm -ivh jdk-8u45-linux-x64.rpm
echo -e 'export JAVA_HOME=/usr/java/jdk1.8.0_45\nexport CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSP