Zookeeper快速入门

本系列Zookeeper基于 3.6.1 版本

Zookeeper常用于分布式架构的注册中心、配置中心、分布式事务、分布式ID
它的存储结构和Linux文件系统相似,不过它是存储在内存中的,读写性能高

集群中角色分类

Zookeeper集群环境是主从架构的,有以下三个角色:

  • Leader:主节点,可以处理读写请求。同一时间只能有一个Leader在工作。写操作只能由Leader来完成,再由Leader同步到Follower和Observer中。如果Follower/Observer接收到了写请求,那么需要转发给Leader处理。所以Zookeeper中的写操作是同步的,适合读多写少的应用。
  • Follower:从节点,Zookeeper集群中可以有多个Follower节点。只能处理读请求,在Leader服务挂掉时会参与Leader的选举。
  • Observer:和Follower基本一样,区别是Observer不会参与Leader选举。只是用来提高读吞吐量和并发。

端口介绍

  • 2181:提供给客户端连接的
  • 3888:选举Leader时使用
  • 2888:集群内通信使用,Leader监听此端口

创建Zookeeper集群

Zookeeper配置

~目录下创建zkcluster,里面分别放着三个zk节点的配置,data是个目录,zoo.cfg时配置文件。
image.png

修改zk1、zk2、zk3的zoo.cfg配置

dataDir=/data

clientPort=2181

server.1=zk1:2888:3888
server.2=zk2:2888:3888
server.3=zk3:2888:3888

tickTime=2000
initLimit=10
syncLimit=5

在data目录下创建myid,Zookeeper在集群中的标识

echo 1 > zk1/data/myid
echo 2 > zk2/data/myid
echo 3 > zk3/data/myid

创建Docker容器

创建一个网络,能让容器之间互相访问

docker network create zknet

创建zk1、zk2、zk3的容器,它们在网络中的别名分别是zk1、zk2、zk3(就像ip一样)

docker run -itd --name zk1 -v ~/zkcluster/zk1/zoo.cfg:/conf/zoo.cfg -v ~/zkcluster/zk1/data:/data --network zknet --network-alias zk1 zookeeper
docker run -itd --name zk2 -v ~/zkcluster/zk2/zoo.cfg:/conf/zoo.cfg -v ~/zkcluster/zk2/data:/data --network zknet --network-alias zk2 zookeeper
docker run -itd --name zk3 -v ~/zkcluster/zk3/zoo.cfg:/conf/zoo.cfg -v ~/zkcluster/zk3/data:/data --network zknet --network-alias zk3 zookeeper

容器启动成功
image.png

测试

开启三个窗口,分别进入到zk1、zk2、zk3的容器中,使用zkServer.sh status查看当前zookeeper在集群中的角色

zk1和zk2是follower
image.png
zk3是leader
image.png

在zk1上创建一个节点,在zk2和zk3上都能获取到
zk1:
image.png

zk2、zk3:
image.png

关掉zk3容器,leader转移到zk2上
image.png

zk2:
image.png

Zookeeper的节点数量最好为奇数,因为Leader选举必须要保证当前存活的节点大于总结点的一半。比如3个Zookeeper节点,挂了一个,还有两个存活 2/3 > 1.5/3,满足Leader选举(主从切换)。如果部署了4个Zookeeper节点,也只允许挂掉一个,挂掉两个就无法进行Leader选举。
虽然多一个Zookeeper可以提高读吞吐量,但是无益与保证Zookeeper集群的高可用性,所以要么增加到奇数量的节点,否则还不如不加。


参考:https://dbaplus.cn/news-141-1875-1.html
https://www.cnblogs.com/shizhijie/p/8934345.html
https://www.cnblogs.com/shenh/p/9714547.html
https://www.cnblogs.com/iforever/p/9095095.html

# Zookeeper 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×