*ZAB***协议 **
**崩溃恢复 **
所谓崩溃恢复,指的是当Zookeeper集群中leader产生宕机或者丢失的时候,整个集群不会停止服务而是会选举出一个新的leader继续对外提供服务
崩溃恢复,可以很好的避免集群中出现单点故障(因为一个节点故障而导致整个集群崩溃),实现集群的高可用
在Zookeeper集群中,当leader产生丢失的时候,Zookeeper集群会重新选举出一个新的leader, 同时会给新leader产生一个编号(Epochid)。新leader产生编号之后,会将自己的Epochid发送给每一个follower。follower在接收到Epochid之后,会存放在本地文件 acceptedEpoch 中
事务id:在Zookeeper集群中,事务id由64位二进制数字(16位十六进制)组成,前32位表示的是
Epochid,后32位表示实际的事务id。例如: 0x200000003 表示第二任leader执行的第3个写操作
- 每更换一个leader,都会产生一个新的log文件
**其他 **
**observer **
observer(观察者)既不参与选举也参与原子广播,但是会监听选举和投票结果,根据结果执行对应的操作
在集群规模庞大或者网络不稳定的时候,选举或者原子广播的效率都会比较低,所以在实际过程
中,会尽量减少参与选举或者原子广播的节点数量,因此在实际过程中,会将一个集群的
90%~97%的节点设置为observer。例如,如果一个集群中有100台节点,那么此时observer的数
量大约是89或者91台
- 在Zookeeper中,计算过半是计算的有决策权(选举/原子广播)的节点数量,observer没有决策
权,所以不影响过半。例如:一个集群由21个节点组成,1个leader+6个follower+14个
observer,即使observer全部宕机,Zookeeper集群也正常提供服务;即使observer全部存活,
只要有4个follower宕机,那么Zookeeper集群也会停止服务
- 设置observer
配置信息**(zoo.cfg) **
先停掉当前节点上的Zookeeper
zkServer.sh stop
修改zoo.cfg文件
vim /opt/software/zookeeper-3.9.1/conf/zoo.cfg
修改属性
pureType=observer
server.1=10.16.2.191:2888:3888:observer
启动这个节点的Zookeeper
zkServer.sh start
查看状态
zkServer.sh status
**参数 ****默认值 ****解释 **
clientPort 2181 客户端的连接端口号
dataDir /tmp/zookeeper 数据目录,实际上是快照文件 (snapshot.xxx)的存 储目录
dataLogDir 日志目录实际上是log.xxx的存储路径。如果不指定,那么和dataDir的值一 样
tickTime 2000 时间单元,默认单位是毫秒。在 Zookeeper中,时间 都是以这个时间单元来计算
initLimit 10 follower在加入Zookeeper集群之后,需要从leader处获 取欠缺的事务并补齐,initLimit就是补齐时间:
10*tickTime。 即默认要求在20s内补齐事务,如果欠缺事务比较多,那么需要适当的调大这个值
syncLimit 5 原子广播中的规定时间,即follower需要在5*tickTime 给leader进行相应
minSessionTimeout 2tickTime 最短会话超时时间以及最长会话超时 时间 maxSessionTimeout 20tickTime 如果指定的会话超时时间小于了min或者大于 了max,那么就按照 min或者max执行
server.x=hostname:port1:port2 配置集群中的节点:
1. x是选举编号,即myid
2. hostname就是主机名或者IP
3. port1是原子广播的端口号
4. port2是选举的端口号
jute.maxbuffer 1M 控制每一个节点能够携带的数据量
globalOutstandingLimit 1000 最大请求堆积数。当请求过多导致 leader暂时处理不了 的时候,那么此时leader会先将这些请求到队列中临时 存储,这个过程就是请求堆积
preAllocSize 64M 预先开辟的磁盘空间,用于写入日志文件
leaderServers yes 是否允许leader节点对外接收请求
maxClientCnxns 60 客户端最大连接数,就是每一个节点同时最多允许被多 少个客户端连接
**特性 **
过半性:过半选举(一个节点胜过一半及以上的节点才能成为leader),过半服务(集群中要存活一半及以上的节点才能提供服务),过半执行(请求需要一半及以上的follower同意才能执行)2. 数据一致性:从客户端角度而言,无论连接到哪一个节点上都能获取到相同的数据;从服务器角度而言,Zookeeper中每一个节点上存储的数据都一样
原子性:一个请求,要么所有节点都执行,要么所有节点都不执行
可靠性:Zookeeper集群不会因为一个节点宕机而导致整个集群停止服务
顺序性:所有节点执行请求的顺序是完全一致的 - 队列
实时性:在网络条件较好的情况下,可以实时监控Zookeeper的变化
**集群操作 **
可以在一个节点上来查看其他节点的属性信息 - 集群操作
通过 nc 工具来实现的。 nc 工具用于发送TCP请求,此时可以将需要执行的命令以TCP请求的方式发送到对应的节点上,等待对应节点响应结果即可
安装nc(netcat)
卸载nmap
进入软件安装目录,上传nc安装包
安装
步骤
将Zookeeper先停掉
编辑文件 在文件中添加
分发给其他的节点
启动Zookeeper
rpm -qa | grep -i nmap | xargs rpm -ev --nodeps
cd /opt/presoftware/
rz
rpm -ivh nc-1.84-22.el6.x86_64.rpm
zkServer.sh stop
vim /opt/software/zookeeper-3.9.1/conf/zoo.cfg
4lw.commands.whitelist=*
scp /opt/software/zookeeper-3.9.1/conf/zoo.cfg
root@10.16.2.194:/opt/software/zookeeper-3.9.1/conf/
scp /opt/software/zookeeper-3.9.1/conf/zoo.cfg
root@10.16.2.193:/opt/software/zookeeper-3.9.1/conf/
zkServer.sh start
**命令 ****解释 **
echo conf | nc 10.16.2.194 2181 查看10.16.2.194的配置信息
echo cons | nc 10.16.2.193 2181 查看10.16.2.193连接的客户端信息
echo crst | nc 10.16.2.193 2181 重置10.16.2.193的客户端连接
echo dump | nc 10.16.2.193 2181 获取当前集群的所有的会话信息,包含会话id,这些 会话创建的临时节点数量等
echo envi | nc 10.16.2.193 2181 查看指定节点的环境信息
echo ruok | nc 10.16.2.193 2181 查看指定节点上的Zookeeper是否还存活。如果存 活,则返 回imok
echo stat | nc 10.16.2.193 2181 查看指定节点的状态
echo srvr | nc 10.16.2.193 2181 查看指定节点的状态,不同于stat的地方在于,srvr不 打印客户端信息
版权归原作者 程序员小郭同学 所有, 如有侵权,请联系我们删除。