微服务 zookeeper分布式协调服务框架

刺骨的言语ヽ痛彻心扉 2023-01-10 13:18 281阅读 0赞

微服务 zookeeper分布式协调服务框架

  • 微服务 zookeeper分布式协调服务框架
    • 一、zookeeper概念
      • 1、zookeeper是什么
      • 2、zookeeper应用场景及说明
    • 二、zookeeper下载安装
      • 1、下载
      • 2、安装
    • 三、zookeeper使用

微服务 zookeeper分布式协调服务框架

一、zookeeper概念

1、zookeeper是什么

zookeeper官网地址:https://zookeeper.apache.org/index.html
在这里插入图片描述

  1. 什么是zookeeper,这个官网说的很清楚了,分布式协调服务框架。
  2. zookeeper本身是树形结构的存储工具,但是在微服务中不同场景下不同的使用方式,使其具有不同的功能。

2、zookeeper应用场景及说明

  1. zookeeper是一个分布式协调服务框架。
  2. 通过对Zookeeper中数据节点进行交叉使用,配合Watcher事件通知机制,可以非常方便的构建一系列分布式应用中都会涉及的核心功能,如:
  3. 数据发布/订阅
  4. 负载均衡
  5. 服务命名
  6. 分布式协调/通知
  7. 集群管理
  8. Master选举
  9. 分布式锁
  10. 分布式队列
  11. 1. 数据发布/订阅
  12. 介绍
  13. 数据发布/订阅系统,即所谓的配置中心,顾名思义就是发布者发布数据供订阅者进行数据订阅。
  14. 目的
  15. 动态获取数据(配置信息)
  16. 实现数据(配置信息)的统一管理和数据的动态更新
  17. 设计模式
  18. Push 模式
  19. Pull 模式
  20. 数据(配置信息)特性:
  21. 数据量通常比较小
  22. 数据内容在运行时会发生动态更新
  23. 集群中各机器共享,配置一致
  24. 如:机器列表信息、运行时开关配置、数据库配置信息等
  25. 基于Zookeeper的实现方式
  26. 数据存储:将数据(配置信息)存储到Zookeeper上的一个数据节点
  27. 数据获取:应用在启动初始化节点从Zookeeper数据节点读取数据,并在该节点上注册一个数据变更Watcher
  28. 数据变更:当变更数据时,更新Zookeeper对应节点数据,Zookeeper会将数据变更通知发到各客户端,客户端接到通知后重新读取变更后的数据即可。
  29. 2. 负载均衡
  30. zk的命名服务
  31. 命名服务是指通过指定的名字来获取资源或者服务的地址,利用zk创建一个全局的路径,这个路径就可以作为一个名字,指向集群中的集群,提供的服务的地址,或者一个远程的对象等等。
  32. 3.分布式通知和协调
  33. 对于系统调度来说:操作人员发送通知实际是通过控制台改变某个节点的状态,然后zk将这些变化发送给注册了这个节点的watcher的所有客户端。
  34. 对于执行情况汇报:每个工作进程都在某个目录下创建一个临时节点。并携带工作的进度数据,这样汇总的进程可以监控目录子节点的变化获得工作进度的实时的全局情况。
  35. 7.zk的命名服务(文件系统)
  36. 命名服务是指通过指定的名字来获取资源或者服务的地址,利用zk创建一个全局的路径,即是唯一的路径,这个路径就可以作为一个名字,指向集群中的集群,提供的服务的地址,或者一个远程的对象等等。
  37. 8.zk的配置管理(文件系统、通知机制)
  38. 程序分布式的部署在不同的机器上,将程序的配置信息放在zkznode下,当有配置发生改变时,也就是znode发生变化时,可以通过改变zk中某个目录节点的内容,利用watcher通知给各个客户端,从而更改配置。
  39. 9.Zookeeper集群管理(文件系统、通知机制)
  40. 所谓集群管理无在乎两点:是否有机器退出和加入、选举master
  41. 对于第一点,所有机器约定在父目录下创建临时目录节点,然后监听父目录节点的子节点变化消息。一旦有机器挂掉,该机器与 zookeeper的连接断开,其所创建的临时目录节点被删除,所有其他机器都收到通知:某个兄弟目录被删除,于是,所有人都知道:它上船了。
  42. 新机器加入也是类似,所有机器收到通知:新兄弟目录加入,highcount又有了,对于第二点,我们稍微改变一下,所有机器创建临时顺序编号目录节点,每次选取编号最小的机器作为master就好。
  43. 10.Zookeeper分布式锁(文件系统、通知机制)
  44. 有了zookeeper的一致性文件系统,锁的问题变得容易。锁服务可以分为两类,一个是保持独占,另一个是控制时序。
  45. 对于第一类,我们将zookeeper上的一个znode看作是一把锁,通过createznode的方式来实现。所有客户端都去创建 /distribute_lock 节点,最终成功创建的那个客户端也即拥有了这把锁。用完删除掉自己创建的distribute_lock 节点就释放出锁。
  46. 对于第二类, /distribute_lock 已经预先存在,所有客户端在它下面创建临时顺序编号目录节点,和选master一样,编号最小的获得锁,用完删除,依次执行。
  47. 12.Zookeeper队列管理(文件系统、通知机制)
  48. 两种类型的队列:
  49. 1、同步队列,当一个队列的成员都聚齐时,这个队列才可用,否则一直等待所有成员到达。
  50. 2、队列按照 FIFO 方式进行入队和出队操作。
  51. 第一类,在约定目录下创建临时目录节点,监听节点数目是否是我们要求的数目。
  52. 第二类,和分布式锁服务中的控制时序场景基本原理一致,入列有编号,出列按编号。在特定的目录下创建PERSISTENT_SEQUENTIAL节点,创建成功时Watcher通知等待的队列,队列删除序列号最小的节点用以消费。此场景下Zookeeperznode用于消息存储,znode存储的数据就是消息队列中的消息内容,SEQUENTIAL序列号就是消息的编号,按序取出即可。由于创建的节点是持久化的,所以不必担心队列消息的丢失问题。

二、zookeeper下载安装

1、下载

zookeeper下载地址:https://www.apache.org/dyn/closer.cgi/zookeeper/
在这里插入图片描述

  1. 注意事项:
  2. apache-zookeeper-3.5.7-bin.tar.gz 才是启动zookeepr需要的,千万别下载错。若下载的不是bin开头的tar包,则会抛出找不到主类异常。
  3. Zookeeper:无法加载主类
  4. org.apache.zookeeper.server.quorum.QuorumPeerMain
  5. 若启动zkServer报错:找不到或无法加载主类,肯定是tar包版本下载不对。

具体下载地址:https://archive.apache.org/dist/zookeeper/zookeeper-3.5.7/
在这里插入图片描述

2、安装

  • Windows环境

    1. jdk环境安装配置
      查看jdk环境配置:java -version
    2. 解压。
      解压到zookeeper目录下
    3. 修改配置
      在C:\ZooKeeper\路径下创建新文件夹data
      在C:\ZooKeeper\zookeeper-3.4.14\conf中的zoo-sample.conf更名为zoo.cfg
      用文本编辑器打开zoo.cfg,将dataDir=/tmp/zookeeper改成dataDir=C:\ZooKeeper\data
    4. 启动zk
      运行C:\ZooKeeper\zookeeper-3.4.14\bin\zkServer.cmd
      运行C:\ZooKeeper\zookeeper-3.4.14\bin\zkCli.cmd,若命令行窗口含有 Welcome to ZooKeeper!,表示安装成功,输入quit退出zkCli.cmd。
  • Linux环境

    1. 环境准备
    2. 解压
      tar -zxvf zookeeper-3.4.10.tar.gz -C /opt/module/
    3. 修改配置
      mv zoo_sample.cfg zoo.cfg
      vim zoo.cfg
      dataDir=/opt/module/zookeeper-3.4.10/zkData
      4.启动
      bin/zkServer.sh start
      5.查看
      jps

三、zookeeper使用

  1. 1 启动客户端
  2. [atguigu@hadoop103 zookeeper-3.4.10]$ bin/zkCli.sh
  3. 2.显示所有操作命令
  4. [zk: localhost:2181(CONNECTED) 1] help
  5. 3 查看当前 znode 中所包含的内容
  6. [zk: localhost:2181(CONNECTED) 0] ls /
  7. [zookeeper]
  8. 4 查看当前节点详细数据
  9. [zk: localhost:2181(CONNECTED) 1] ls2 /
  10. [zookeeper]
  11. 5 分别创建 2 个普通节点
  12. [zk: localhost:2181(CONNECTED) 3] create /sanguo "jinlian"
  13. Created /sanguo
  14. [zk: localhost:2181(CONNECTED) 4] create /sanguo/shuguo
  15. "liubei"
  16. Created /sanguo/shuguo
  17. 6.获得节点的值
  18. [zk: localhost:2181(CONNECTED) 5] get /sanguo
  19. jinlian
  20. 7 创建短暂节点
  21. [zk: localhost:2181(CONNECTED) 7] create -e /sanguo/wuguo
  22. "zhouyu"
  23. Created /sanguo/wuguo
  24. 1)在当前客户端是能查看到的
  25. [zk: localhost:2181(CONNECTED) 3] ls /sanguo
  26. [wuguo, shuguo]
  27. 2)退出当前客户端然后再重启客户端
  28. [zk: localhost:2181(CONNECTED) 12] quit
  29. [atguigu@hadoop104 zookeeper-3.4.10]$ bin/zkCli.sh
  30. 3)再次查看根目录下短暂节点已经删
  31. 8 创建带序号的节点
  32. 1)先创建一个普通的根节点/sanguo/weiguo
  33. [zk: localhost:2181(CONNECTED) 1] create /sanguo/weiguo
  34. "caocao"
  35. Created /sanguo/weiguo
  36. 2 创建带序号的节点
  37. [zk: localhost:2181(CONNECTED) 2] create -s
  38. /sanguo/weiguo/xiaoqiao "jinlian"
  39. 9 修改节点数据值
  40. [zk: localhost:2181(CONNECTED) 6] set /sanguo/weiguo "simayi"
  41. 10.节点的值变化监听
  42. 1 hadoop104 主机上注册监听/sanguo 节点数据变化
  43. [zk: localhost:2181(CONNECTED) 26] [zk:
  44. localhost:2181(CONNECTED) 8] get /sanguo watch
  45. 2)在 hadoop103 主机上修改/sanguo 节点的数据
  46. [zk: localhost:2181(CONNECTED) 1] set /sanguo "xisi"
  47. 3)观察 hadoop104 主机收到数据变化的监听
  48. WATCHER::
  49. WatchedEvent state:SyncConnected type:NodeDataChanged
  50. path:/sanguo
  51. 11 节点的子节点变化监听(路径变化)
  52. 1)在 hadoop104 主机上注册监听/sanguo 节点的子节点变化
  53. [zk: localhost:2181(CONNECTED) 1] ls /sanguo watch
  54. [aa0000000001, server101]
  55. 2 hadoop103 主机/sanguo 节点上创建子节点
  56. [zk: localhost:2181(CONNECTED) 2] create /sanguo/jin "simayi"
  57. Created /sanguo/jin
  58. 3 观察 hadoop104 主机收到子节点变化的监听
  59. WATCHER::
  60. WatchedEvent state:SyncConnected type:NodeChildrenChanged
  61. path:/sanguo
  62. 12 删除节点
  63. [zk: localhost:2181(CONNECTED) 4] delete /sanguo/jin
  64. 13.递归删除节点
  65. [zk: localhost:2181(CONNECTED) 15] rmr /sanguo/shuguo
  66. 14.查看节点状态
  67. [zk: localhost:2181(CONNECTED) 17] stat /sanguo
  68. zookeeper还有很多原理性的知识,太多zab协议,选举机制啊等等,太多了,这只是简单初识,后续深入梳理。

参考:
zookeeper三十问
ZooKeeper学习笔记
Window下zookeeper安装和启动
下载地址:https://archive.apache.org/dist/zookeeper/zookeeper-3.5.7/

发表评论

表情:
评论列表 (有 0 条评论,281人围观)

还没有评论,来说两句吧...

相关阅读

    相关 分布式协调服务Zookeeper

    分布式系统介绍 分布式系统的定义 《分布式系统原理和范型》一书中定义:分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像是单个相关系统。 从进程角度看,两