zookeeper 使用 & 简介 & curator 的使用

发布于:2024-12-18 ⋅ 阅读:(8) ⋅ 点赞:(0)

自定义 RPC 注册中心选型

新时代的 RPC 技术已经不单单的是满足于简单的远程服务调用,也不满足仅仅是对协议,序列化,网络通讯,STUB的这系列的技术的封装和优化。现在的新的技术也会对注册中心,负载均衡的封装,引入了 SOA 的相关架构,例如 GRPC。引入 nameming 的 provider 的相关技术,也可以做扩展使用 cursor | etcd | nacos 等技术。这里我们的自定义的 RPC 也需要对这个注册中心的引入做选型,这里我们选择 zookeeper。

zookeeper 的简介

  1. 中文直译就是动物管理员,这是因为早期的时候 zookeeper 的诞生主要是为了服务像 hadoop(大象),pig(猪),hive(蜜蜂)这些技术就是大数据相关的技术栈,所以因此得名动物管理员(zookeeper)
  2. apache 基金会的顶级开源项目访问的域名(zookeeper.apache.org),是模仿 google 的一个开源项目(chubby)
  3. 他是开源的分布式协调服务框架,(分布式)集群 协调服务(管理) = 用于集群管理的技术
  4. 提供了数据强一致的保证,基于 paxos 算法的 zab 协议

zk 安装(Linux)

  1. 下载 wget https://archive.apache.org/dist/zookeeper/zookeeper-3.9.2/apache-zookeeper-3.9.2-bin.tar.gz
  2. 解压缩 tar -gzxvf apache-zookeeper-3.9.2-bin.tar.gz
  3. 重命名 mv apache-zookeeper-3.9.2-bin apache-zookeeper-3.9.2z
  4. 配置文件修改,zookeeper 的默认的配置文件是 zoo_sample.cfg 我们要把这个修改为 zoo.cfg cp zoo_cample.cfg zoo.cfg

修改配置文件

只需要修改数据存储的目录就像,因为默认的存储的目录是

dataDir=/xing/soft/zookeeper/apache-zookeeper392/data

启动 & 客户端测试

启动服务 zkServer.sh start 然后可以使用命令查看 jps -l 看是否包含进程 org.apache.zookeeper.server.quorum.QuorumPeerMain 然后可以使用命令来使用客户端链接到 zk 服务 zkClt.sh 这样就可以登录到我们的 zk 服务中可以使用 ls / 这个时候可以说正常部署 zookeeper 单机,然后使用 quit 退出当前的会话

zookeeper 集群

集群的安装其实只需要关心两个地方的配置

  1. myid 的设置
  2. zoo.cfg 设置(设置 server 的通讯地址默认的端口是2888,38888

设置以后就会默认的选举他们的 master 节点和 fllower 节点

zookeeper 节点

持久节点

默认的创建就是持久的节点,create /cloud/zookeeper,持久节点就是默认的节点,并没有什么特殊的地方

临时节点

临时节点需要增加参数 -e 即可 create -e /cloud/temp/zookeeper,临时节点在客户端和服务端断开连接的时候就会自动被删除

有序持久节点

默认的节点就是持久的,增加参数 -s 即可,例如 create -s /cloud/sort/zookeeper 这个就是一个有序的 znode,有序的 znode 有一个特点,他会有一个字增的数字序号,例如我刚刚创建的 clooud/sort/zookeeper 他会有一个序号,-> clooud/sort/zookeeper001,如果我们再次执行刚刚的命令就会再创建一个节点,这个节点的名称会增加一个 -> clooud/sort/zookeeper002

有序临时节点

create -es /cloud/temp_sort/zookeeper

删除节点

delete

这个命令只可以删除一个节点(数据节点),如果是一个目录并且拥有多级是不可以删除的,这个时候需要使用下面的命令

deleteAll

这个命令可以删除非数据节点和包含层级目录的目录节点 deleteall path。

curator 的使用

curator 是解决 zookeeper 的使用复杂,不方便设计不合理的问题他

  • 监听繁琐而且不合理的设置
  • 创建和删除多级目录的问题
  • 多级目录的监听
  • 封装了 zookeeper 的应用场景
    • master 选举机制
    • 分布式锁
    • 分布式计数器
  • 完善了客户端操作的可用性(客户端的重试机制

引入依赖

<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>5.7.0</version>
</dependency>

编码

cuartor 最为核心的一个类就是 CuartorFramework 根据这个命名我们也可以看出来这个是一个框架,这个类可以对 zookeeper 做所有的 crud 的操作。都是围绕这个展开的。接下来我们来看一下他的 api 的简单实用。

cuartor 中给我们封装了比较统一的 api 的使用,并且对 watch 丰富了他的功能。我们首先看一下基本的 crud

package com.rpc.zookeeper.curator;

import com.rpc.zookeeper.ZkOps;
import lombok.extern.slf4j.Slf4j;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.api.CreateBuilder;
import org.apache.curator.framework.recipes.cache.*;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.apache.zookeeper.CreateMode;