Zookeeper入门
1.概述
-
zookeeper是什么? 开放源码的分布式协调服务,是一个高性能的分布式数据一致性解决方案
-
zookeeper的典型应用场景? master选举、数据发布与订阅、负载均衡、命名服务(例如分布式服务id)、分布式协调(分布式锁)/通知(心跳机制)
-
zookeeper的优势? 开放源码、有广泛的应用基础(hadoop、storm、kafka等)、已经被证实是高性能、易用稳定的产品
2.zookeeper中的基本概念
-
集群角色? Leader、Follwer、Observer 使用到了Leader/Follwer设计模式和Observer观察者模式.
-
会话? 客户端与zookeeper服务器的连接,zookeeper中的会话叫session(有心跳机制检测)
-
数据节点? 很重要的两种节点:持久节点和临时节点,zookeeper的数据模型是一棵树,树的节点是Znode,Znode中可以保存信息
-
版本? 分为三种 version:当前数据节点数据内容的版本号;cversion:当前数据节点子节点的版本号;aversion:当前数据节点ACL变更版本号
-
watcher? 事件监听器,zookeeper允许用户在指定节点上注册一些watcher,当数据节点发生变化时,zookeeper服务器发通知给指定的zookeeper客户端
-
ACL权限控制? ACL策略进行权限控制,CREATE:创建子节点权限;READ:获取节点数据和子节点列表权限 ;WRITE:更新节点数据权限;DELETE:删除子节点权限;ADMIN:设置节点ACL的权限
3.zookeeper集群搭建
-
进入zookeeper.apache.org下载,直接执行 wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/stable/zookeeper-3.4.12.tar.gz
-
解压后进入配置文件zoo_sample.cfg,改名为zoo.cfg
-
修改配置文件如下(我这里以3台机器搭建为例)
#修改快照存储位置
dataDir=/var/zookeeper
#新增
#server.id=host:port:port
server.1=10.200.121.157:2888:3888
server.2=10.200.121.38:2888:3888
server.3=10.200.121.43:2888:3888
注意:
- dataDir目录是存储zookeeper快照的位置,如果你的var目录下没有zookeeper目录,请手动新建;
- id请保证每台机器上唯一,不重复
- 保证端口2888,3888可用
-
接着进入/var/zookeeper目录下新建myid,vim myid,把刚刚配置的每个节点的id直接写在这里,例如10.200.121.157机器中,myid就写入1即可,需要和上面server.id=host:port:port的id对应
-
启动 ./zookeeper/bin/zkServer.sh start
-
使用 telnet 10.200.121.157 2181 命令,接着输入stat,查看状态(如果没有telnet命令,先yum -y install telnet)
4.本人项目用zookeeper做了什么
-
服务负载均衡在7台机器上,基于Curator客户端实现了分布式锁;
-
分布式定时任务中使用到了基于Curator客户端的Leader Latch实现了Master来保证只有一台机器执行定时任务;
-
利用zookeeper的持久顺序节点特性,生成分布式唯一ID。