当前位置:首页 > 中间件、应用 > zookeeper > 正文内容

zookeeper原理与部署

下辈子别做运维2023-10-08 21:11:16zookeeper

zookeeper概念

zookeeper是用来在分布式系统中,保证各节点的一致性,实现集群的高可用,采用ZAB协议,

zookeeper的主要功能有:管理分布式集群;维护和监控集群内存储数据的状态变化;实现基于数据的集群管理


zookeeper特点:

顺序一致性:客户端发起的事务请求,按照发起的顺序被应用到 zookeeper 中

原子性:所有事务请求的处理结果在集群中所有服务器上的应用情况一致

单一视图:客户端连接的集群内的任一服务器,看到的数据模型都是一致的

高性能:数据存储在内存中,性能高

高可用:基于副本机制实现高可用,支持故障恢复


zookeeper角色


leader:领导者,集群的中心,负责维护集群状态,统一调度及处理客户端请求的写操作,同时也会处理客户端请求的读操作。由集群选举产生,发生故障时会根据选举机制选出新的leader

follower:跟随者,负责客户端请求的读操作,并将写操作请求转发至leader,参与leader选举过程的投票

observer:观察者,观察zookeeper集群的状态,并进行同步,负责处理客户请求的读操作,但不参与投票选举leader,设置observer节点可以提升集群的读性能

1658213869771_Zookeeper集群架构图.jpg


zookeeper选举机制

第一次启动时:

原则:根据myid的大小决定投给哪个节点,一个节点得票数超过集群内服务器数量的一半就可以成为leader节点,因此一个zookeeper集群至少需要3台服务器

集群内有5台zookeeper服务器

服务器A启动,投票给自己

服务器B启动,投票给自己,这时服务器A发现服务器B的myid比自己高,于是便投票给服务器B

服务器C启动,投票给自己,这时服务器A和B发现服务器C的myid比自己高,因此便投票给C

这时,服务器C得票是3,大于集群节点数量的一半,因此服务器C选举为leader节点

服务器D,E启动后,会直接连接服务器C,不参与选举


非第一次启动:

选举过程与第一次启动大抵相同,也是数量超过一半,根据zxid,server id,epoch大小进行投票选举新的leader,与leader节点挂掉重新选举流程同

原则是,先比较epoch,会投票给epoch值大的

epoch相同,会投票给zxid值大的

zxid值相同,会投票给server id大的


65eb1b1eacb4aaa8f0e58f2a2bb7582a.png


zookeeper故障转移

如果follower节点挂掉,不会影响当前集群的状态,节点恢复后会重新加入到集群中

当leader节点挂掉时,集群内的其他处于follower状态的节点会将状态改成looking,重新进行选举

选举流程参照非第一次启动选举的流程


zookeeper部署

主机列表

ip
角色
主机名
192.168.88.159zooker-1 leaderweb-server
192.168.88.160zooker-2 followermysql-server1
192.168.88.128zooker-3 followermysql-server2

zookeeper版本:zookeeper-3.5.10

jdk版本:1.8.0

下载地址:https://dlcdn.apache.org/zookeeper/zookeeper-3.5.10/apache-zookeeper-3.5.10-bin.tar.gz

三台机器上进行操作:

建立目录及用户

]# mkdir /zookeeper
]# mkdir /zookeeper/data   ##zooker数据存放目录



192.168.88.159

解压压缩包

zookeeper:

]# tar xvf apache-zookeeper-3.5.10-bin.tar.gz -C /zookeeper
]# cd /zookeeper/
]# mv apache-zookeeper-3.5.10-bin/ zookeeper

jdk:

]# tar xvf jdk-8u321-linux-x64.tar.gz -C /zookeeper/zookeeper
]# cd /zookeeper/zookeeper/
]# mv jdk1.8.0_321/ jdk


编辑zookeeper配置文件

zoo.cfg

]# cd /zookeeper/zookeeper/conf/
]# cp zoo_sample.cfg zoo.cfg
]# vim zoo.cfg
##编辑以下配置
dataDir=/zookeeper/data   ##zooker的数据目录,需要提前建立
clientPort=22181    ##客户端连接zooker的端口
##配置集群通信端口
server.1=192.168.88.159:22888:23888
server.2=192.168.88.160:22888:23888
server.3=192.168.88.128:22888:23888


myid

##创建myid号,192.168.88.159的myid设置为3
]# echo 3 > /zookeeper/data/myid


配置java环境变量:zkEnv.sh文件中

]# cd /zookeeper/zookeeper/bin
]# vim zkEnv.sh
JAVA_HOME=/zookeeper/zookeeper/jdk


将zookeeper目录拷贝到192.168.88.160及192.168.88.128上

]# scp -r -P16022 /zookeeper/ 192.168.88.160:/
]# scp -r -P16022 /zookeeper/ 192.168.88.128:/


分别在192.168.88.160及192.168.88.128上配置myid

192.168.88.160设置为1,192.168.88.128设置为2

]# echo 1 > /zookeeper/data/myid    ##192.168.88.160
]# echo 2 > /zookeeper/data/myid    ##192.168.88.128


查看三台服务器的zookeeper状态:

192.168.88.159:leader

image2023-4-21_10-29-31.png


192.168.88.160:follower

image2023-4-21_10-30-5.png

192.168.88.128:follower

image2023-4-20_16-2-25.png


测试集群同步性

在192.168.88.159建立test文件并写入"test1"

image2023-4-21_22-19-35.png


在其他两个节点上查看

192.168.88.160:

image2023-4-21_22-20-44.png


192.168.88.128:

image2023-4-21_22-21-20.png


数据同步成功


zookeeper脚本

需要使用专用用户zookeeper运行

路径:/zookeeper/zookeeper/script

image2023-5-6_16-57-50.png


启动脚本:zooker_start.sh

#!/bin/bash
 
if [ "`whoami`" != "zookeeper" ];then
  echo "error: not zookeeper user start"
  exit 10
fi
 
/zookeeper/zookeeper/bin/zkServer.sh start 2>&1 | grep 'STARTED' &>/dev/null
if [ $? -eq 0 ];then
  echo "success: zookeeper start"
else
  echo "error: zookeeper start failed"
fi

zooker_start.sh


停止脚本:zooker_stop.sh

#!/bin/bash
 
if [ "`whoami`" != "zookeeper" ];then
  echo "error: not zookeeper user stop"
  exit 10
fi
 
/zookeeper/zookeeper/bin/zkServer.sh stop 2>&1 | grep 'STOPPED' &>/dev/null
if [ $? -eq 0 ];then
  echo "success: zookeeper stop"
else
  echo "error: zookeeper stop failed"
fi

zooker_stop.sh


状态查看脚本:zooker_status.sh

#!/bin/bash
 
/zookeeper/zookeeper/bin/zkServer.sh status

zooker_status.sh

扫描二维码推送至手机访问。

版权声明:本文由个人博客发布,如需转载请注明出处。

本文链接:https://opszzfwordpress.club/post/195.html

分享给朋友:
返回列表

没有更早的文章了...

没有最新的文章了...

“zookeeper原理与部署” 的相关文章

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。