Zookeeper

什么是zookeeper?原理?

分布式协调服务,底层基于ZAB协议(原子消息广播),保证各服务之间同步;
由Leader、Follower、Observer组成。
维护有层次的数据结构;数据一般存储在内存中;数据读取性能高;(JMeter压测读取性能最高可达12-13w)
leader负责统一接收客户端数据,广播给Follower处理;各个请求之间是顺序的;
各个Follower之间数据是一致的;
Observer负责监控Leader与Follower;
创建集群服务时,zookeeper服务官方推荐为奇数个,比如3个,5个等;

ZAB:支持崩溃恢复的原子广播协议,为分布式主备系统设计的;

崩溃恢复机制:Leader挂了,则升级ZXID最大的Follower为Leader,选取后其他Follower向新的leader同步状态后,新的leader才处理客户端请求。
消息广播:1.客户端提交数据,Leader接收,生成事务(含事务id,zxid等)2.leader生成事务队列提交事务给各个Follower,Follower接收写入事务日志待处理;3.各个Follower向Leader作出ACK回应;4.Leader确保收到半数以上回应后,向Follower发出Commit指令提交事务;5.响应客户端

ZAB底层基于cas算法,cas是基于paxos算法;
paxos算法:一致性状态;随机算法;

ZK应用

  • 配置管理
    (要求:数据量小;
    运行时数据动态变化;
    集群中各个节点共享信息,配置一直)

程序分布式的部署在不同的机器上,将程序的配置信息放在zk的znode下,当有配置发生改变时,也就是znode发生变化时,可以通过改变zk中某个目录节点的内容,利用watcher通知给各个客户端,从而更改配置。

  • 数据库切换

  • 命名服务

命名服务是指通过指定的名字来获取资源或者服务的地址,利用zk创建一个全局的路径,即是唯一的路径,这个路径就可以作为一个名字,指向集群中的集群,提供的服务的地址,或者一个远程的

  • 发布与订阅(eg:zk+rocketmq)
  • 分布式锁/分布式队列管理

有了zookeeper的一致性文件系统,锁的问题变得容易。锁服务可以分为两类,一个是保持独占,另一个是控制时序。对于第一类,我们将zookeeper上的一个znode看作是一把锁,通过createznode的方式来实现。所有客户端都去创建/distribute_lock节点,最终成功创建的那个客户端也即拥有了这把锁。用完删除掉自己创建的distribute_lock节点就释放出锁。
对于第二类,/distribute_lock已经预先存在,所有客户端在它下面创建临时顺序编号目录节点,和选master一样,编号最小的获得锁,用完删除,依次方便

  • 集群管理(eg:zk+dubbo)

所谓集群管理无在乎两点:是否有机器退出和加入、选举master。对于第一点,所有机器约定在父目录下创建临时目录节点,然后监听父目录节点的子节点变化消息。一旦有机器挂掉,该机器与zookeeper的连接断开,其所创建的临时目录节点被删除,所有其他机器都收到通知:某个兄弟目录被删除,于是,所有人都知道:它上船了。新兄弟目录加入,highcount又有了,对于第二点,我们稍微改变一下,所有机器创建临时顺序编号目录节点,每次选取编号最小的机器作为master就好

  • 分布式日志收集

相较于zk,nameserver更轻量级且无状态同步,支持存储策略;
rocketMq后续使用的就是nameserver;

zk安装

官方文档:http://dubbo.apache.org/zh-cn/docs/admin/install/zookeeper.html

外网下载:
wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.6.1/zookeeper-3.6.1.tar.gz

解压:
tar zxvf (目录)/zookeeper-3.6.1.tar.gz 目标目录

##配置开始
修改配置文件名称:mv zoo_sample.cfg zoo.cfg

配置集群节点:
格式:server.编号(需包含数字)=ip:2888:3888

server.1=ip:2888:3888
server.2=ip:2889:3889
server.3=ip:2890:3890

zoo.cfg文件编辑:vim zoo.cfg
添加以上集群节点配置,同时修改data数据存放目录为:
data=/temp/zookeeper/data/node1(zookeeper目录下没有data)

保存退出:esc :wq(保存/退出)
强制保存退出:esc :wq!

在zookeeper下创建data&node1目录:mkdir data mkdir node1
在node1目录下创建内容文件(myid):vim myid 编号(数字)

##配置结束

集群节点2和3重复以上步骤;

启动: ./bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/cheilpengtai/apache-zookeeper-3.6.1/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
关闭:./bin/zkServer.sh stop
ZooKeeper JMX enabled by default
Using config: /home/cheilpengtai/apache-zookeeper-3.6.1/bin/../conf/zoo.cfg
Stopping zookeeper ... ./bin/zkServer.sh: line 213: kill: (31380) - No such process
STOPPED
查询状态./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/cheilpengtai/software/apache-zookeeper-3.6.1-bin2/bin/../conf/zoo.cfg
Client port found: 2182. Client address: localhost.
Mode: follower

zoo.conf

tickTime:维持心跳时间间隔
dataDir:数据存储目录
clientPort:客户端连接zk端口,zk监听这个端口;
initLimit:zk接受客户端初始化连接最长时间;
synclimit:leader与follower之间发送消息,请求与应答时间长度;

4种节点类型,如何实现分布式锁?

通过创建临时节点来实现分布式锁,临时节点在本次会话中有效;
Znode的四种类型:

1、PERSISTENT-持久化目录节点
客户端与zookeeper断开连接后,该节点依旧存在
2、PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点
客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号
3、EPHEMERAL-临时目录节点
客户端与zookeeper断开连接后,该节点被删除
4、EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点
客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序

ZK通知机制

client端会对某个znode建立一个watcher事件,当该znode发生变化时,这些client会收到zk的通知,然后client可以根据znode变化来做出业务上的改变。

WatchManager :一个接口,用于管理各个监听器,只有一个方法 materialize(),返回一个 Watcher 的 set。

//客户端创建zk连接实例时,注册watcher
//这个 Watcher 将作为整个 ZK会话期间的默认 Watcher,会一直被保存在客户端 ZKWatchManager 的 defaultWatcher 中。
//WatchRegistration/register()/watches.put(this.clientPath, watchers);
public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher)
//也可以通过 getData、exists 和 getChildren 三个接口来向 ZooKeeper 服务器注册 Watcher
public byte[] getData(String path, Watcher watcher, Stat stat) throws KeeperException, InterruptedException

ZK文件系统

文件系统:多层级命名空间,可设置关联的数据。只有文件节点可以存放数据而目录节点不行。在内存中维护了这个树状的目录结构,这种特性使得Zk不能用于存放大量的数据,每个节点的存放数据上限为1M。

ZK设置ACL权限控制

权限控制引用:https://www.cnblogs.com/fesh/p/5798353.html

ZK的节点有5种操作权限:

CREATE、READ、WRITE、DELETE、ADMIN 也就是
增、删、改、查、管理权限,这5种权限简写为crwda(即:每个单词的首字符缩写)
注:这5种权限中,delete是指对子节点的删除权限,其它4种权限指对自身节点的操作权限

身份的认证有4种方式:

world:默认方式,相当于全世界都能访问 auth:代表已经认证通过的用户(cli中可以通过addauth digest user:pwd
来添加当前上下文中的授权用户) digest:即用户名:密码这种方式认证,这也是业务系统中最常用的 ip:使用Ip地址认证

设置访问控制:

方式一:(推荐) 1)增加一个认证用户 addauth digest 用户名:密码明文 eg. addauth digest
user1:password1 2)设置权限 setAcl /path auth:用户名:密码明文:权限 eg. setAcl /test
auth:user1:password1:cdrwa 3)查看Acl设置 getAcl /path

方式二:

setAcl /path digest:用户名:密码密文:权限
注:这里的加密规则是SHA1加密,然后base64编码。

Zookeeper知识要点与集群安装,欢迎纠错相关推荐

  1. 笔记系列之zookeeper在单机模拟集群安装

    文章目录 0.目的 1.下载zookeeper并解压 2. 编辑配置文件 3.目录创建 4.启动 5. 客户端连接 5.1 创建节点 5.1.1 创建顺序节点 5.1.2 创建临时节点 5.1.3 创 ...

  2. ZooKeeper伪分布式集群安装及使用

    为什么80%的码农都做不了架构师?>>>    ZooKeeper伪分布式集群安装及使用 让Hadoop跑在云端系列文章,介绍了如何整合虚拟化和Hadoop,让Hadoop集群跑在V ...

  3. ZooKeeper伪分布式集群安装

    为什么80%的码农都做不了架构师?>>>    获取ZooKeeper安装包 下载地址:http://apache.dataguru.cn/zookeeper 选择一个稳定版本进行下 ...

  4. ZooKeeper布式集群安装及使用

    前言 ZooKeeper是Hadoop家族的一款高性能的分布式协作的产品.在单机中,系统协作大都是进程级的操作.分布式系统中,服务协作都是跨服务 器才能完成的.在ZooKeeper之前,我们对于协作服 ...

  5. 原创:centos7.1下 ZooKeeper 集群安装配置+Python实战范例

    centos7.1下 ZooKeeper 集群安装配置+Python实战范例 下载:http://apache.fayea.com/zookeeper/zookeeper-3.4.9/zookeepe ...

  6. zookeeper+kafka集群安装之中的一个

    zookeeper+kafka集群安装之中的一个 准备3台虚拟机, 系统是RHEL64服务版. 1) 每台机器配置例如以下: $ cat /etc/hosts ... # zookeeper host ...

  7. SolrCloud 分布式集群安装部署(solr4.8.1 + zookeeper +tomcat)

    SolrCloud 分布式集群安装部署 安装软件包准备 · apache-tomcat-7.0.54 · jdk1.7 · solr-4.8.1 · zookeeper-3.4.5 注:以上软件都是基 ...

  8. zookeeper集群安装部署

    zookeeper集群安装部署 1:规划:     集群建议至少在三台服务器上部署     192.168.1.171     192.168.1.172     192.168.1.173 2:去各 ...

  9. 基于zookeeper(集群)+LevelDB的ActiveMq高可用集群安装、配置、测试

    Linux 环境 zookeeper集群安装.配置.测试https://blog.csdn.net/weixin_40816738/article/details/100576259 MQ集群部署规划 ...

最新文章

  1. 2022-2028年中国手机配件行业发展前景战略及投资风险预测分析报告
  2. 怎样用Python控制图片人物动起来?一文就能Get!
  3. 优酷土豆:财报不是问题!
  4. 完全背包问题 POJ1384
  5. Ozon Tech Challenge 2020 (Div.1 + Div.2) F. Kuroni and the Punishment 随机化
  6. Android 应用开发----ViewPager---2.四大函数
  7. HIT Software Construction Review Notes(2-1 Software Lifecycle and Configuration Management)
  8. 如何在SQL Server中实现错误处理
  9. IntelliJ IDEA 14 license key gen
  10. UVA10946 You want what filled?【DFS】
  11. kafka安装使用说明
  12. 牛客2022年愚人节比赛,10题做法完整版
  13. Google发布Chrome 8
  14. 人工智能AI - 学习/实践
  15. 简单实现DButil工具类
  16. 软件需求分析——UML用例图
  17. jsp允许跨域访问_如何解决js跨域问题
  18. php unlink 无法删除,php unlink 删除有关问题
  19. 2022年度调味品十大热门品牌排行
  20. http协议的状态码(statue) / readyState状态码

热门文章

  1. Vue项目supermall仿蘑菇街详解(一)首页开发详解
  2. java计算月份所在的季度
  3. C不会断句?【前后置,位,移位操作符详解】 b = ++c, c++, ++a, a++
  4. 华为大佬:做一个快乐的程序员
  5. 【HTMLCSS】CSS当中设置背景图片不显示的问题
  6. 销量反弹,高管离职,苹果真的要改变高定价策略了?
  7. uni-app学习路线与建议
  8. Spring Boot进阶:原理、实战与面试题分析
  9. uni-app 190扫一扫加入群聊功能(二)
  10. 苹果人机交互指南_苹果人机界面设计指南的10个见解