张坤的个人博客

  • 首页
  • 分类
  • 标签
  • 日志

  • 搜索
Lombok Dubbo Jenkins RabbitMQ Zookeeper IDEA Logstash Kibana ELK NIO Netty Spring Cloud Golang DataX Elasticsearch React Native Mysql H2 Socket Spring Boot Kafka Mybatis Sqlmap Vue Postgresql Docker Vert.x Flutter Flink Redis

Zookeeper快速入门

发表于 2020-06-27 | 分类于 Zookeeper | 0 | 阅读次数 97

本系列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

# Lombok # Dubbo # Jenkins # RabbitMQ # Zookeeper # IDEA # Logstash # Kibana # ELK # NIO # Netty # Spring Cloud # Golang # DataX # Elasticsearch # React Native # Mysql # H2 # Socket # Spring Boot # Kafka # Mybatis # Sqlmap # Vue # Postgresql # Docker # Vert.x # Flutter # Flink # Redis
IDEA连接远程Docker环境运行Dockerfile
Zookeeper基本操作
  • 文章目录
  • 站点概览
会Coding的猴子

会Coding的猴子

58 日志
20 分类
30 标签
RSS
Github
Creative Commons
© 2021 会Coding的猴子
由 Halo 强力驱动
|
主题 - NexT.Gemini v5.1.4

湘ICP备18011740号