分布式之服务注册 -- Zookeeper

1、Zookeeper配置文件

  • tickTime:Client-Server通信时间
  • 说明:Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳。tickTime以毫秒为单位、
  • initLimit:Leader-Follower初始通信时限
  • 说明:集群中的follower服务器与leader服务器之间初始连接时能容忍的最多心跳数(tickTime的数量)。时间就是 initLimit x tickTime
  • syncLimit:Leader-Follower同步通信时限。
  • 说明:集群中的follower服务器与leader服务器之间初始化之后请求和应答之间能容忍的最多心跳数(tickTime的数量)。时间就是initLimit x tickTime
  • dataDir:数据文件目录、
  • 说明:Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里。
  • clientPort:客户端连接端口
  • 说明:客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
  • 服务器名称与地址:集群信息(服务器编号,服务器地址,LF通信端口,选举端口)
  • 说明:这个配置项的书写格式比较特殊,规则如下:server.N=YYY:A:B
  • maxClientCnxns:对于一个客户端的连接数限制,默认是60,这在大部分时候是足够了。但是在我们实际使用中发现,在测试环境经常超过这个数,经过调查发现有的团队将几十个应用全部部署到一台机器上,以方便测试,于是这个数字就超过了。
  • autopurge.snapRetainCountautopurge.purgeInterval:-- 客户端在与zookeeper交互过程中会产生非常多的日志,而且zookeeper也会将内存中的数据作为snapshot保存下来,这些数据是不会被自动删除的,这样磁盘中这样的数据就会越来越多。不过可以通过这两个参数来设置,让zookeeper自动删除数据。
  • 说明:autopurge.purgeInterval就是设置多少小时清理一次。而autopurge.snapRetainCount是设置保留多少个snapshot,之前的则删除。
  • 分布式安装
# server.A=B.C.D
server.1=itcast05:2888:3888
server.2=itcast06:2888:3888
server.3=itcast07:2888:3888
  • 参数解读:
  • A是一个数字,表示这个是第几号服务器
  • B是这个服务器的ip地址
  • C是这个服务器与集群中的Leader服务器交换信息的端口。
  • D是万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举是服务器相互通信的端口。
  • myid文件创建在Zookeeper的数据目录下面,在里面设置每个服务器的myid值,如第一台:1、第二台:2、第三台:3等,zookeeper启动读取次文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server.
  • myid的值是zoo.cfg文件里定义的server.A项A的值,Zookeeper 启动时会读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是那个server,只是一个标识作用。

2、Zookeeper选举机制、

2.1、半数机制

  • 集群中半数以上机器存活,集群可用,所以Zookeeper适合安装奇数台服务器。
  • Zookeeper虽然在配置文件中没有指定Master 和 Slave,但是,Zookeeper工作时,是有一个节点为Leader,其他节点则为Follower,Leader是通过内部的选举机制临时产生的。
    分布式之服务注册 -- Zookeeper_第1张图片
  • 假设有五台zookeeper服务器,启动的时候会一台台的启动,当第一台启动的时候会开始投票,但是只能投给自己(< 3),所以不能当Leader,当自己不能的时候就只能投给id大的服务器,所以当第三台服务器启动的时候加上前面两台服务器的投票超过半数,所以第三台服务器当Leader。只要确定了Leader,后面的服务器就只能当Follower。

3、节点的类型

3.1、持久(Persistent)

  • 持久化节点目录:客户端和服务器断开连接后,创建的节点不删除
  • 持久化顺序编号目录节点:客户端与Zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号(说明:创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护)
  • 注意:在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序,比如是哪台服务器先上或者是哪台服务器出了问题等。

3.2、短暂(Ephemeral)

  • 临时目录节点:客户端和服务器断开连接后,创建的节点自己删除。
  • 临时顺序编号目录节点:客户端和服务器断开连接后,创建的节点自己删除。只是Zookeeper给该节点名称进行顺序编号。

4、客户端shell命令

  • ls /:查看节点
  • ls2 / :查看节点详情
  • get path:查看节点的值
  • create -e path :创建临时节点
  • create -s path: 创建顺序号节点
  • set path data:修改节点的值
  • get path data watch:监听节点的某个值得变化
  • ls path watch:监听节点的变化(路径)
  • delete path:删除节点
  • rmr path:递归删除节点

5、Salt结构体

分布式之服务注册 -- Zookeeper_第2张图片
分布式之服务注册 -- Zookeeper_第3张图片
在这里插入图片描述

6、监听原理

分布式之服务注册 -- Zookeeper_第4张图片

7、写数据流程

分布式之服务注册 -- Zookeeper_第5张图片

你可能感兴趣的:(Zookeeper,zookeeper,分布式)