首页 > 其他 > 详细

Zookeeper 全局设计+集群环境搭建

时间:2020-10-02 13:42:07      阅读:40      评论:0      收藏:0      [点我收藏+]

zookeeper是什么?

(分布式协调)通过分布式协调组件多节点顺序一致性,简单来说zookeeper=文件系统+监听通知机制

 

Google Chubby(不开源产品)

  解决分布式一致性

 

技术分享图片

 

 技术分享图片

 

 


 

单机

  • 修改zoo.cfg

  • sh zkServer.sh start

集群

 

集群的角色:leader、follower、observer

leader

  • 整个集群中的调度节点

  • 数据的同步

follower

  • 高可用特性

  • 参与投票(leader选举的投票,数据达成一致的投票)

    • 过半提交(集群节点过多会影响整个集群性能的数据同步)

  • 处理客户端请求(提升集群性能)

observer

不需要参与投票

参与数据的同步

2N+1台组成(过半提交决策)大于过半

  • observer

安装部署/集群

  • 修改配置文件zoo.cfg,原配置文件,添加集群节点配置

  • $dataDir/myid 添加一个Myid文件

?
/home/program/zookeeper-3.4.14/data
?
如果需要增加observer节点
同时在zoo.cfg中增加;peerType=observer
Server.1=192.168.11.129:2888:3181    
Server.2=192.168.11.135:2888:3181
Server.3=192.168.11.136:2888:3181:observer

 


?
# The number of milliseconds of each tick
# 这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
  2 tickTime=2000   
  3 # The number of ticks that the initial 
  4 # synchronization phase can take    
  5 initLimit=10
  6 # The number of ticks that can pass between 
  7 # sending a request and getting an acknowledgement
# 这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 5*2000=10秒
  8 syncLimit=5
  9 # the directory where the snapshot is stored.
 10 # do not use /tmp for storage, /tmp here is just 
 11 # example sakes.
# 顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
 12 dataDir=/home/program/zookeeper-3.4.14/data
 13 # the port at which the clients will connect
# 这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
 14 clientPort=2181
 15 # the maximum number of client connections.
 16 # increase this if you need to handle more clients
 17 #maxClientCnxns=60
 18 #
 19 # Be sure to read the maintenance section of the 
 20 # administrator guide before turning on autopurge.
 21 #
 22 # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
 23 #
 24 # The number of snapshots to retain in dataDir
 25 #autopurge.snapRetainCount=3
 26 # Purge task interval in hours
 27 # Set to "0" to disable auto purge feature
 28 #autopurge.purgeInterval=1
 29 server.1=192.168.1.102:2888:3181:observer
 30 server.2=192.168.1.115:2888:3181
 31 server.3=192.168.1.106:2888:3181

 


?

配置说明

  • tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。

  • initLimit:这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 10个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20 秒

  • syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 5*2000=10秒

  • dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。

  • clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。

  • server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。

远程访问

sh zkCli.sh -server 192.168.1.102

 技术分享图片

 

 


 

Zookeeper的数据模型

技术分享图片

 

 

技术分享图片

 

 


 

节点特性

临时节点(生命周期

持久化节点,客户端与zookeeper断开连接后,该节点依旧存在 有序节点(递增序列号) 先有父节点,再有子节点 临时节点下不能存在子节点 同级节点下,节点名称必须是唯一

有序节点使用场景

  • 有序节点:全局ID

  • 分布式锁

  • 分布式队列

同级节点的唯一性

  • master选举

  • 分布式锁(锁用来解决安全性)

zookeeper数据结构

  • 服务注册

  • 配置中心

查询相关指令

[zk: 192.168.1.102(CONNECTED) 18] ls /

[zookeeper]

查看节点状态

[zk: 192.168.1.102(CONNECTED) 19] stat /zookeeper

 

创建节点指令

[zk: 192.168.1.102:2181(CONNECTED) 1] create /node1 123

Created /node1

 技术分享图片

 

 

如上:在根目录创建了node_1节点,携带数据 123

· cZxid:创建节点时的事务id
· pZxid:子节点列表最后一次被修改的事务id
· cversion:节点版本号
· dataCersion:数据版本号
. aclVerson:acl权限版本号
----------------------------------------------------------------
cZxid = 0x0        // 创建节点时的事务id
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0        // 修改的事务id
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x200000002        // 子节点列表最后一次被修改的事务id
cversion = 0            //节点版本号(乐观锁)
dataVersion = 0            //数据版本号
aclVersion = 0            //权限版本号
ephemeralOwner = 0x0     // 临时节点所属会话
dataLength = 0             // 数据的长度
numChildren = 2             // 子节点梳理(当前节点)

cversion=1->2 子节点的版本号

dataVersion 表示当前节点

 

Zookeeper 全局设计+集群环境搭建

原文:https://www.cnblogs.com/lwx57280/p/13760996.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!