Zookeeper集群搭建

发布时间:2022-06-25 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Zookeeper集群搭建脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

一、ZookeePEr原理与脚本启动

Zookeeper集群搭建

1、zkServer命令

./zkServer.sh start

./zkServer.sh status

检查是否启动zk:jps 查看是否有QorumPeerMain

Zookeeper集群搭建

 

2、zkCli.sh命令

help:查看所有命令

create /ITcast 8000$

get /itcast

set /itcast xxx

ls /

Zookeeper集群搭建

 

3、zoo.CFg配置文件详解

 tickTime=2000 //每个tickTime 时间 leader和follower之间发送一个心跳

 dataDir=D:/devtools/zookeeper-3.2.2/build //存放数据目录

 clientPort=2181 //应用客户端连接zk端口请求

 initLimit=5 //leader接受新的follower初始化连接最大忍受的心跳个数, 例如5*2s=10s

 syncLimit=2 //leader 与 follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2*2000=4 秒

 server.1=192.168.211.1:2888:3888 //2888端口:服务器与集群中的Leader 服务器交换信息的端口

 server.2=192.168.211.2:2888:3888 //3888端口:万一集群中的Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。

 

二、集群配置

1添加一个zoo.cfg配置文件
$ZOOKEEPER/conf
mv zoo_sample.cfg zoo.cfg

2修改配置文件(zoo.cfg)
 dataDir=/itcast/zookeeper-3.4.5/data
  
server.1=192.168.186.128:2888:3888
server.2=192.168.186.129:2888:3888
server.3=192.168.186.130:2888:3888


3在(dataDir=/itcast/zookeeper-3.4.5/data)创建一个myid文件,里面内容是server.N中的N(server.2里面内容为2)
  echo "1" > myid     指定对应上述server的id号

4将配置好的zk拷贝到其他节点 
  scp -r /itcast/zookeeper-3.4.5/ root@192.168.186.129:/itcast/
  scp -r /itcast/zookeeper-3.4.5/ root@192.168.186.130:/itcast/

5注意:在其他节点上一定要修改myid的内容
  在itcast06应该讲myid的内容改为6 (echo "2" > myid)
  在itcast07应该讲myid的内容改为7 (echo "3" > myid)

a、演示三台机器,1台机器启动后zk的状态,2台启动后的状态,3台启动的状态

 

1台启动,需等待其他2台

Zookeeper集群搭建

2台启动

Zookeeper集群搭建

 

Zookeeper集群搭建

超过数即可

 

b、演示leader机器宕机,其余follow节点自动选举成为leader节点,leader节点重启后,自动变成follow节点

Zookeeper集群搭建

 

注意:如果不起来,先启用./zkCli.sh,再使用./zkServer.sh status

实验演示:当修改follower节点,数据也会自动同步

 

三、Znode数据结构介绍

 

Zookeeper集群搭建

 

1. 唯一标识:每个子目录项如nameservice 都被称作为 znode,这个 znode 是被它所在的路径唯一标识,如 Server1 这个 znode 的标识为 /NameService/Server1

2. 支持子节点:znode 可以有子节点目录,并且每个 znode 可以存储数据,注意 EPHEMERAL 类型的目录节点不能有子节点目录

3. znode 具有版本号:每个 znode 中存储的数据可以有多个版本,也就是一个访问路径中可以存储多份数据

4. znode 支持临时节点特性:一旦创建这个 znode 的客户端与服务器失去联系,这个 znode 也将自动删除,Zookeeper 的客户端和服务器通信采用长连接方式,每个客户端和服务器通过心跳来保持连接,这个连接状态称为 session,如果 znode 是临时节点,这个 session 失效,znode 也就删除了

5. znode 的目录名自动递增编号:如 App1 已经存在,再创建的话,将会自动命名为 App2

6. znode 可被监控:包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个是 Zookeeper 的核心特性,Zookeeper 的很多功能都是基于这个特性实现的。

 

四、Zookper集群管理应用

 

Zookeeper集群搭建

 

/GoupMembers:EPHEMERAL临时节点

/client1: EPHEMERAL_SEQUENTIA节点

/client2: EPHEMERAL_SEQUENTIA节点

 

1、所有client,监听getChildren(String path, boolean watch)

这里监听 /GroupMembers目录,当任一客户端挂了后,这个目录节点也自动删除,其他server都知道某台sever挂了。

 

2、ZK如何实现Leader选举的

给每台Server编号,我们可以选择当前是最小编号的Server为Master,假如这个最小编号的Server死去,由于是EPHEMERAL节点,死去的Server对应的节点也被删除,所以当前的节点列表中又出现一个最小编号的节点,我们就选择这个节点为当前Master。这样就实现了动态选择Master,避免了传统意义上单Master容易出现单点故障的问题

 

五、Zookeeper分布式锁应用

共享锁在同一个进程中很容易实现,但是在跨进程或者在不同 Server 之间就不好实现了。Zookeeper 却很容易实现这个功能,实现方式也是需要获得锁的 Server 创建一个 EPHEMERAL_SEQUENTIAL 目录节点,然后调用 getChildren方法获取当前的目录节点列表中最小的目录节点是不是就是自己创建的目录节点,如果正是自己创建的,那么它就获得了这个锁,如果不是那么它就调用 exists(String path, boolean watch) 方法并监控 Zookeeper 上目录节点列表的变化,一直到自己创建的节点是列表中最小编号的目录节点,从而获得锁,释放锁很简单,只要删除前面它自己所创建的目录节点就行了。

 

Zookeeper集群搭建

 

Zookeeper集群搭建

Zookeeper集群搭建

脚本宝典总结

以上是脚本宝典为你收集整理的Zookeeper集群搭建全部内容,希望文章能够帮你解决Zookeeper集群搭建所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。