初识Zookeeper
Zookeeper提供了一个高性能、高可用,且具备严格的顺序访问控制能力的分布式协调服务。
简单的数据结构,树形结构,类型Linus文件系统。
顺序访问,对于每一个读请求,zk会分配一个全局唯一的递增编号。
高性能,数据存储于内存(笔者认为就是一个内存型树形数据结构数据库)。
常见场景
- 数据发布订阅
- 负载均衡
- 命名服务
- Master选举
- 集群管理
- 配置管理
- 分布式队列
- 分布式锁
进入正题集群搭建
环境搭建
准备3台虚拟机,安装好docker-compose,拉取zookeeper镜像
docker pull zookeeper
docker-compose.yml文件
version: '3.7'
services:
zk:
image: zookeeper
container_name: zk
hostname: zk
restart: always
privileged: true
volumes:
- /app/zook/data:/data
- /app/zook/conf:/conf
- /app/zook/logs:/datalog
ports:
- "2181:2181"
- "3888:3888"
- "2888:2888"
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=0.0.0.0:2888:3888 server.2=192.168.1.107:2888:3888 server.3=192.168.1.108:2888:3888
privileged: true 配置给docker容器给超级权限,这样docker容器就可以访问宿主机目录
docker-compose up -d zk
构建容器
zoo.conf配置说明
dataDir=/data
#存储快照文件snapshot的目录(相当于redis的rdb)
dataLogDir=/datalog
#数据log目录(相当于redis的aof)
tickTime=2000
#ZK中的一个时间单元。ZK中所有时间都是以这个时间单元为基础,进行整数倍配置的。例如,session的最小超时时间是2*tickTime
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
#需要保留的文件数目,默认是保留3个
autopurge.purgeInterval=0
#ZK提供了自动清理事务日志和快照文件的功能,这个参数指定了清理频率,单位是小时,需要配置一个1或更大的整数,默认是0,表示不开启自动清理功能
maxClientCnxns=60
#单个客户端与单台服务器之间的连接数的限制,是ip级别的,默认是60,如果设置为0,那么表明不作任何限制
standaloneEnabled=false
#单机默认关闭
admin.enableServer=true
#开启服务端
clientPort=2181
#暴露服务端对外端口
server.1=0.0.0.0:2888:3888
#集群本机
server.2=192.168.1.107:2888:3888
#集群2
server.3=192.168.1.108:2888:3888
#集群3
2181 客户端访问端口
2888 服务端数据同步端口
3888 服务端leader选举端口
zookeeper服务端状态
查看106虚拟机状态follower
查看107虚拟机状态 leader
zookeeper客户端基本操作
运行客户端:bin/zkCli.sh