欢迎光临散文网 会员登陆 & 注册

Zookeeper高级教程 | 袁庭新老师带你快速搭建Zookeeper集群项目实战

2023-11-01 11:51 作者:袁庭新  | 我要投稿

Zookeeper是一个开源的分布式应用程序协调服务,它可以提供高可用性、可靠性和数据一致性。在分布式系统中,Zookeeper常被用作协调服务来管理集群节点之间的状态,配置信息,以及各种元数据信息。

为了搭建一个高可用的程序,我们需要对Zookeeper进行集群操作。这样当单个Zookeeper节点出现故障或宕机时,集群中的其他节点可以接替其职责并继续提供服务。这对于一些需要24/7不间断运行的服务非常重要,例如金融交易所、在线游戏等。下面就请大家跟着袁老师的节奏,来完成一个Zookeeper集群环境的搭建吧。

01 Zookeeper集群环境搭建

1.1 产品特点分布式安装部署

Zookeeper集群思路:先配置一台Zookeeper服务器,再克隆出两台,最终形成Zookeeper集群。分布式环境搭建之前,需要先安装Zookeeper。Zookeeper的安装请参考袁老师往期所发送的文章。

1.2 产品特点配置服务器编号

在/opt/zookeeper/zkData目录下新建myid文件。

在文件中添加与server对应的编号:1;其余两台服务器将来分别配置为2和3。

1.3 产品特点配置zoo.cfg文件

打开conf目录下的zoo.cfg文件,增加如下配置。

配置参数解读server.A=B:C:D。

1.4 产品特点配置其余两台服务器

在虚拟机数据目录vms下(vms存放虚拟机的目录),创建zk02文件夹。

进入zk02系统后,修改Linux中的IP的配置。使用root用户打开/etc/sysconfig/network-scripts/ifcfg-eno160文件(文件名不一定是这个),添加内容如下:

配置文件生效,使用命令使得配置文件生效:

修改zko2系统的/opt/zookeeper/zkData/myid中的数值为2。

第三台服务器zk03,重复上面的步骤。将zk03系统的IP设置为192.168.230.133,并修改myid文件中的数值为3。    

1.5 产品特点集群操作

关闭每台Zookeeper服务器的防火墙。

关于防火墙的操作常见命令见下:

systemctl stop firewalld.service:停止firewall,只是临时关闭了防火墙,当重启操作系统后,防火墙服务还是会再次启动

systemctl disable firewalld:禁止firewall开机启动(禁用防火墙服务)。

查看防火墙状态。

启动第1台Zookeeper服务器。

查看Zookeeper状态。

注意:因为没有超过半数以上的服务器被启动,所以第一台服务器启动后查看服务状态,发现集群失败  (如果防火墙没有关闭,也会导致集群失败)。

使用同样的方式启动第2台和第3台Zookeeper服务器。

查看第1台的状态:Mode: follower

查看第2台的状态:Mode: leader

查看第3台的状态:Mode: follower

02 ZK客户端命令行操作

2.1 产品特点客户端命令

启动客户端。

显示所有操作命令。

查看当前ZNode中所包含的内容。

查看当前节点详细数据。

当前节点参数的介绍见下:

2.2 点节点操作

在根目录下,创建中国和美国两个节点。

在根目录下,创建俄罗斯节点,并保存“普京”数据到节点上。

获得节点的值。

多级创建节点。在日本节点下,创建东京节点并保存数据“热”。jp必须提前创建好,否则将报错“节点不存在”。

创建短暂节点。短暂节点创建成功后, 使用quit命令退出客户端,然后再重新连接到客户端,发现短暂节点自动消失。

创建带序号的节点。

  • 在中国cn下,创建3个city顺序编号的节点。

  • 如果原来没有序号节点,序号从0开始递增。

  • 如果原节点下已有2个节点,则再排序时从2开始,以此类推。

修改节点数据值。

2.3 节点监听

监听节点的值变化或子节点变化(路径变化)。

1.在server3主机上注册监听/us节点的数据变化。

2.在Server1主机上修改/us的数据。

3.Server3会立刻响应。

4.如果在Server1的/us下面创建子节点NewYork。

5.Server3会立刻响应。

2.4 删除节点

1.删除节点。

2.递归删除节点(非空节点,节点下有子节点)。

说明:不仅删除/cn,而且/cn下的所有子节点也随之删除。

03 Zookeeper集群实战

3.1 项目环境搭建

1.使用IDEA创建一个项目名称为【test_zookeeper】的Maven工程。

2.在项目的pom.xml文件中添加依赖。

3.在resources下创建log4j.properties。

3.2 创建Zookeeper客户端

在项目的src/test/java目录下创建com.cy.test包,并在该包下创建ZooKeeperTests测试类。

3.3 创建节点

3.3.1 ACL对象介绍

一个ACL对象就是一个Id和permission对。

1.表示哪个/哪些范围的Id(Who)在通过了怎样的鉴权(How)之后,就允许进行那些操作(What)。即Who How What。

2.permission(What)就是一个int表示的位码,每一位代表一个对应操作的允许状态。

3.类似Linux的文件权限,不同的是共有5种操作:CREATE、READ、WRITE、DELETE、ADMIN(对应更改ACL的权限)。

对于ACL的参数详细介绍见下表:

3.3.2 创建节点实现

在ZooKeeperTests测试类中添加创建节点的createNode()方法。

运行createNode()方法将看到如下的日志输入。

3.3.3 Session超时异常

如果createNode()方法在运行的时候出现异常,抛出ClientCnxn$SessionTimeoutException类型错误。

针对Session超时异常问题,解决方案见下:

  • 增加连接时间

  • 检查集群IP是否编写正确

  • 关闭防火墙:systemctl stop firewalld

3.4 查询节点的值

在ZooKeeperTests测试类中添加查询节点的值find()方法。

3.5 ZK节点增删改查操作

1.更新节点操作。在ZooKeeperTests测试类中添加更新节点的值update()方法。

2.删除节点。在ZooKeeperTests测试类中添加删除节点的delete()方法。

3.获取子节点。在ZooKeeperTests测试类中添加获取子节点的getChildNodes()方法。

4.监听子节点的变化。在ZooKeeperTests测试类中添加监听子节点变化的listenChildNodes()方法。

运行listenChildNodes()方法后,程序在运行的过程中,去zk01节点的Zookeeper的根目录下,创建"/yuanxin"子节点。

一旦监听到子节点的变化,在IDEA控制台将打印process()方法的内容。

5.判断Znode是否存在。在ZooKeeperTests测试类中添加判断子节点是否存在的exist()方法。

04 回顾总结

今天袁老师主要是带大家搭建了Zookeeper集群开发环境,以及集群环境下命令行的相关操作。然后我们又学习了Zookeeper的常用API,主要学习了通过API来创建节点、查询节点、修改节点、删除节点、获取子节点、监听子节点等相关的内容。

今天的内容就给大家介绍到这里了,现在你学会了吗?关注「袁庭新」,干货天天都不断!



Zookeeper高级教程 | 袁庭新老师带你快速搭建Zookeeper集群项目实战的评论 (共 条)

分享到微博请遵守国家法律