ZooKeeper 简单了解

zookeeper

官网:http://zookeeper.apache.org/
ZooKeeper: 是一个开源的分布式协调服务,由雅虎创建,是 Google Chubby 的开源实现。
分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协
调/通知、集群管理、Master 选举、配置维护,名字服务、分布式同步、分布式锁和分布式队列
等功能。翻译为动物管理员,简单来说 zookeeper= 文件系统 + 监听通知机制

文件系统

Zookeeper维护一个类似文件系统的数据结构:在这里插入图片描述
每个子目录项如 NameService 都被称作为 znode(目录节点),和文件系统一样,我们能够自由的增加、删除znode,在一个znode下增加、删除子znode,唯一的不同在于znode是可以存储数据的。

有四种类型的znode:

  1. PERSISTENT-持久化目录节点,客户端与zookeeper断开连接后,该节点依旧存在

  2. PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点,客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号

  3. EPHEMERAL-临时目录节点,客户端与zookeeper断开连接后,该节点被删除

  4. EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点,客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号

监听通知机制

客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,zookeeper会通知客户端。
就这么简单,下面我们看看Zookeeper能做点什么呢?

Zookeeper能做什么

zookeeper功能非常强大,可以实现诸如分布式应用配置管理、统一命名服务、状态同步服务、集群管理、小数据的同步等功能,我们这里拿比较简单的分布式应用配置管理为例来说明。

假设我们的程序是分布式部署在多台机器上,如果我们要改变程序的配置文件,需要逐台机器去修改,非常麻烦,现在把这些配置全部放到zookeeper上去,保存在 zookeeper 的某个目录节点中,然后所有相关应用程序对这个目录节点进行监听,一旦配置信息发生变化,每个应用程序就会收到 zookeeper 的通知,然后从 zookeeper 获取新的配置信息应用到系统中。在这里插入图片描述
如上,你大致应该了解zookeeper是个什么东西,大概能做些什么了,我们马上来学习下zookeeper的安装及使用,并开发一个小程序来实现zookeeper这个分布式配置管理的功能。

自己的一些理解:

Leader可以接受client请求,也接收其他Server转发的请求,负责更新系统状态。 Follower也可以接收client请求,如果是写请求将转发给Leader来更新系统状态,读请求则由Follower的内存数据库直接响应。
在这里插入图片描述

ZooKeeper安装

下载安装包然后解压

关于下载随便百度就可以找到压缩包文件,下载后解压到指定目录 tar -zxvf zookeeperXXX.tar.gz -C /modules

默认文件重命名

将zookeeper根目录中conf文件夹下的zoo_sample.cfg重命名为zoo.cfg,修改后zookeeper便可以识别到该文件 mv zoo_sample.cfg zoo.cfg

修改zoo.cfg配置文件

在该文件中根据需要添加如下配置:

#发送心跳的间隔时间,单位:毫秒
tickTime=2000
#zookeeper保存数据的目录
dataDir=/weekend/zookeeper-3.4.5/tmp
#日志目录
dataLogDir=/weekend/zookeeper-3.4.5/dataLog
#端口
clientPort=2181
#leader和follower初始化连接时最长能忍受多少个心跳时间的间隔数
initLimit=5
#leader和follower之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime的时间长度
syncLimit=2
#zookeeper机器列表,server.order这里的Order(1 2 3 这样的)依据集群的机器个数依次进行递增,这里的weekend05、weekend06、weekend07表示机器IP地址(如果你/etc/hosts进行了映射 写hostName 也可以)
server.1=weekend05:2888:3888
server.2=weekend06:2888:3888
server.3=weekend07:2888:3888
Ps:上面的data目录和dataLog目录默认是没有的,需要自己预先建立好。并且真正用户开发环境的配置文件,尽量删除删掉上面的注释,以及多余的空白字符(划重点),有可能会造成zookeeper的读取失败

新建myid文件

  1. 然后创建一个tmp文件夹,mkdir /weekend/zookeeper-3.4.5/tmp
  2. 再创建一个空文件,touch /weekend/zookeeper-3.4.5/tmp/myid
  3. 最后向该文件写入ID,echo 1 > /weekend/zookeeper-3.4.5/tmp/myid
  4. 将配置好的zookeeper拷贝到其他节点(首先分别在weekend06、weekend07根目录下创建一个weekend目录:mkdir /weekend)
    scp -r /weekend/zookeeper-3.4.5/ weekend06:/weekend/
    scp -r /weekend/zookeeper-3.4.5/ weekend07:/weekend/
    注意:修改weekend06、weekend07对应/weekend/zookeeper-3.4.5/tmp/myid内容
    weekend06:
    echo 2 > /weekend/zookeeper-3.4.5/tmp/myid
    weekend07:
    echo 3 > /weekend/zookeeper-3.4.5/tmp/myid

ZooKeeper端口解释

1、2181:对cline端提供服务
2、3888:选举leader使用
3、2888:集群内机器通讯使用(Leader监听此端口)

启动zookeeper服务

zookeeper有选举模式每个节点角色不同一般选择 3台或者5台 7台这样的。修改完成后,在每台机器上依次使用bin/zkServer.sh start来启动zookeeper服务,待启动完成后使用 bin/zkServer.sh status来查看该机器的身份
在这里插入图片描述

启动zookeeper客户端检验服务是否可用

使用 bin/zkCli.sh来检验zookeeper是否可以连接成功,若出现如下提示,则表示zookeeper服务已经安装成功。
在这里插入图片描述

参考

zk基本指令跟Java编程
zookeeper讲解
简单理解zooKeeper选举
zk干什么的

发布了441 篇原创文章 · 获赞 870 · 访问量 111万+

猜你喜欢

转载自blog.csdn.net/qq_31821675/article/details/103520445