Zookeeper集群搭建
目录1.什么是zookeeper2.zookeeper内存模型3.zk节点分类4.zk安装和使用5.zk整和Springboot6.zk的集群搭建7.zk集群原理1.什么是zookeeperzookeeper(动物园管理者)简称zk,一个分布式,开放源码的分布式应用程序协调服务,是谷歌的Chubby一个源码的实现,是Hadoop和Hbase的重要组件,zk使用java编写,支持java和c两种编程
目录
1.什么是zookeeper
zookeeper(动物园管理者)简称zk,一个分布式,开放源码的分布式应用程序协调服务,是谷歌的Chubby一个源码的实现,是Hadoop和Hbase的重要组件,zk使用java编写,支持java和c两种编程语言
1.kz可以作为dubbo和Springcloud的服务注册中心,协调微服务之间的调用
2.使用zk实现分布式锁,redis也可以实现分布式锁
2.zookeeper内存数据模型
zk中模型结构是以树状的模型结构
每个子节点都被称为znode节点,这个znode是被它所在的路径唯一标识
znode可以有子节点,并且每个znode可以存储数据
znode是有版本的,每个znode中存储的数据可以有多个版本,也就是一个访问路径中可以存储多个数据
znode可以被监控,包括这个目录节点中存储的数据修改,子节点目录变化等,一旦变化可以通知设置监控的客户端
3.zk节点分类
3.1持久点p
是指节点在创建后,就一直存在,直到有明确的删除操作来主动删除这个节点---不会因为创建改节点的客户端会话失效而消失
3.2持久顺序节点ps
这个节点的特性和上面的节点类型是一致的,额外的特性是,在zk中,每个父节点会为他的第一级节点维护一个时序,会记录每个节点创建的先后顺序。基于这个特性,创建子节点的时候,可以设置这个属性,那么在创建节点的过程中,zk会自动给指定节点加上一个数字的后缀,作为新的节点名,这个数字后缀地 范围是整形的最大盒子。
3.3临时节点E
和持久节点不同的是,临时节点的生命周期和客户端会话,也就是说,如果客户端会话失效,这个临时节点也将失效,这里是会话失效而非连接断开
3.4临时顺序节点ES
具有临时节点额外特性的是,每个父节点会为它的第一级子节点维护一份时序
4.zk安装(基于docker)和使用
docker pull zookeeper
docker run --name zk -p 2181:2181 -d zookeeper
//设置开机自动启动
docker container update --restart=always dbe2978e2785
//进入容器内部
docker exec -it dbe2978e2785 /bin/bash
/apache-zookeeper-3.7.0-bin# ./bin/zkCli.sh
简单对zookeeper配置文件讲解
tickTime
:集群节点的心跳时间
clientPort
:客户端连接的端口。
dataDir
:默认数据存储位置
initLimit:初始化化时集群节点的同步时间
syncLimit:集群在运行过程中同步数据超时时间
maxClientCnxns
:线程池数据量,默认60个
5.zk客户端的指令操作
create /node1 xiaoyang
create /node2 xiaochen 创建一个节点默认持久节点
create -s /node3 ps 创建一个持久顺序节点
create -e /node4
get node1获取节点的信息
delete node 只能删除没有子节点的节点
6.节点监听机制watch
客户端可以监听node节点的变化,znode节点的变化,节点的监听是一次性的,当设置了watcher的数据和目录发生改变的时候,则服务器将这个改变发送给设置了watcher的客户端以便通知他们。
1.节点目录的监听 ls /node1 true
2.节点数据的监听 get -w /node1
这个监听机制也是日后用来做微服务注册中心的原因
7.zk的集群搭建(基于docker)
解决单节点高并发的压力问题,解决单节点故障问题
//拉取镜像
docker pull zookeeper:3.4.14
编写docker-compose.yml文件
2888端口:原子广播
3888端口:集群之间做心跳检查的
version: '2'
services:
zoo1:
image: zookeeper:3.4.14
restart: always
container_name: zoo1
ports:
- "2181:2181"
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
zoo2:
image: zookeeper:3.4.14
restart: always
container_name: zoo2
ports:
- "2182:2181"
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
zoo3:
image: zookeeper:3.4.14
restart: always
container_name: zoo3
ports:
- "2183:2181"
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
启动容器
docker-compose up -d
//进去容器内部
docker exec -it zoo1 /bin/bash
//查看集群运行情况
zkServer.sh status
可以看到节点1和2倍选举为 follow,节点3被选举为leader
更多推荐
所有评论(0)