K8Szookeeper

顶级分布式开源项目,配上这款可视化工具,真香!

2021-06-16  本文已影响0人  程序员知识圈

ZooKeeper作为顶级分布式开源项目,应用非常广泛,Dubbo和Kafka这些知名的开源项目都在使用。之前只是听说过它,并没有仔细研究过。今天带大家来学习下ZooKeeper,主要从ZooKeeper的安装、可视化工具、应用三方面来介绍,希望对大家有所帮助!

简介

ZooKeeper是一款分布式协调框架,它可以为分布式系统提供一致性服务。ZooKeeper最初由Yahoo开发,后来捐献给了Apache基金会,现已成功Apache的顶级项目,目前在Github上有9.5k+Star。

分布式协调

要理解ZooKeeper我们首先需要了解下什么是分布式协调?这里拿Spring Cloud中注册中心的例子来说吧。

微服务(分布式)系统中有很多服务,相同的服务又有多个实例,我们在应用中可以通过服务名来负载均衡地调用服务,而这些服务有可能会挂掉,也有可能会有新的实例加入。此时我们就需要一个东西来做协调,保存好服务名称和可用实例调用IP的对应关系,此时注册中心就是一个分布式协调者的角色,而ZooKeeper就可以用来充当这个协调者。

安装

ZooKeeper的安装无论是Windows还是Linux都是很方便的,我们先来学习下它的安装。

Windows安装

image.png
# 设置心跳时间,单位毫秒
tickTime=2000
# 存储内存数据库快照的文件夹
dataDir=I:/developer/env/apache-zookeeper-3.7.0-bin/data
# 监听客户端连接的端口
clientPort=2181
zkServer.cmd

·Linux安装

docker pull zookeeper:3.7.0
mkdir /mydata/zookeeper/conf/ -p
cd /mydata/zookeeper/conf/
touch zoo.cfg
# 设置心跳时间,单位毫秒
tickTime=2000
# 存储内存数据库快照的文件夹
dataDir=/tmp/zookeeper
# 监听客户端连接的端口
clientPort=2181
docker run -p 2181:2181 --name zookeeper \
-v /mydata/zookeeper/conf/zoo.cfg:/conf/zoo.cfg \
-d zookeeper:3.7.0

命令行操作

接下来我们用命令行来操作下ZooKeeper,熟悉下ZooKeeper的使用。

首先使用zkCli命令行工具连接到ZooKeeper;

zkCli.cmd -server 127.0.0.1:2181
[zk: 127.0.0.1:2181(CONNECTED) 0] help
ZooKeeper -server host:port -client-configuration properties-file cmd args
        addWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVE
        addauth scheme auth
        close
        config [-c] [-w] [-s]
        connect host:port
        create [-s] [-e] [-c] [-t ttl] path [data] [acl]
        delete [-v version] path
        deleteall path [-b batch size]
        delquota [-n|-b|-N|-B] path
        get [-s] [-w] path
        getAcl [-s] path
        getAllChildrenNumber path
        getEphemerals path
        history
        listquota path
        ls [-s] [-w] [-R] path
        printwatches on|off
        quit
        reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]
        redo cmdno
        removewatches path [-c|-d|-a] [-l]
        set [-s] [-v version] path data
        setAcl [-s] [-v version] [-R] path acl
        setquota -n|-b|-N|-B val path
        stat [-w] path
        sync path
        version
        whoami
[zk: 127.0.0.1:2181(CONNECTED) 1] ls /
[zookeeper]
[zk: 127.0.0.1:2181(CONNECTED) 2] create /zk_test my_data
Created /zk_test
[zk: 127.0.0.1:2181(CONNECTED) 3] ls /
[zk_test, zookeeper]
[zk: 127.0.0.1:2181(CONNECTED) 4] get /zk_test
my_data
[zk: 127.0.0.1:2181(CONNECTED) 5] set /zk_test test_data
[zk: 127.0.0.1:2181(CONNECTED) 6] get /zk_test
test_data
[zk: 127.0.0.1:2181(CONNECTED) 7] delete /zk_test
[zk: 127.0.0.1:2181(CONNECTED) 8] ls /
[zookeeper]

可视化管理

PrettyZoo是一款基于 Apache Curator 和 JavaFX 实现的 Zookeeper 图形化管理客户端。颜值很高,推荐使用。

节点类型

ZooKeeper中的节点(znode)是有生命周期的,这取决于节点的类型。类型有主要有下面四种:

# 创建持久顺序节点
create -s /test/seq segText
# 创建临时节点
create -e /test/tmp tmpText
# 创建临时顺序节点
create -s -e /test/seqTmp setTmpText

创建成功后显示如下:

image.png
如果你用PrettyZoo来创建的话,只要勾选一个选项即可。 image.png

作为注册中心使用

CAP是分布式架构中的重要理论,其包括一致性(Consistency)、可用性(Availability)和分区容忍性(Partition tolerance)。我们经常使用的Eureka支持AP,而ZooKeeper支持CP。接下来我们学习下ZooKeeper在Spring Cloud中作为注册中心的应用。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
spring:
  cloud:
    zookeeper:
      # zookeeper连接地址
      connect-string: localhost:2181
      discovery:
        # 作为服务注册
        register: true
        # 注册时使用IP地址而不是hostname
        prefer-ip-address: true

总结

今天我们学习了下ZooKeeper的安装、可视化工具PrettyZoo的使用以及ZooKeeper在Spring Cloud中作为注册中心的应用。其实ZooKeeper在分布式系统中还有很多应用,比如说做分布式锁、实现选主功能、取代UUID来生成唯一ID,大家感兴趣的话可以深入研究下!

参考资料

官方文档:https://zookeeper.apache.org/doc/current/zookeeperStarted.html

项目源码地址

https://github.com/macrozheng/springcloud-learning

上一篇 下一篇

猜你喜欢

热点阅读