zookeeper
中间件,提供协调服务
作用分布式系统
特性
数据一致性,数据按照顺序分批入库
原子性:事务要么成功要么失败,不会局部化
单一视图:客户端连接集群中的任一zk节点,数据是一致的。
可靠性 每次对zk的操作状态保存在服务端
实时性 客户端可以读取zk服务端的最新数据
jdk 与 zookeeper 的安装
cd jdk8
pwd
/usr/jdk8
vi /etc/profile
1 export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL 2 export JAVA_HOME=/usr/jdk8 3 export ZOOKEEPER_HOME=/usr/local/zookeeper 4 export CLASSPATH=.:JAVA_HOME%lib/dt.jar:%JAVA_HOME%/lib/tools.jar 5 #export PATH=$PATH:$JAVA_HOME/bin 6 export PATH=$PATH:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin
刷新配置文件
source /etc/profile
目录结构
bin 主要运行命令
conf 存放配置文件
contrib 附加一些功能
dist-maven mvn编译后的目录
docs 文档
lib jar包
recipes 案例demo代码
src 源码
配置文件
cd conf
cp zoo_sample.cfg zoo.cfg
1 tickTime 用于计算时间单元,比如session超时 2 initLimit 用于集群,允许从节点连接并同步到master节点的初始化连接时间 3 以tickTime的倍数来表示 4 syncLimit 用于集群,master 主节点与从节点之间发送消息,请求和应答时间长度(心跳检测) 5 6 dataDir 必须配置 7 dataLogDir 日志目录,如果不配置会和dataDir公用 8 9 dataDir=/usr/local/zookeeper/dataDir 10 dataLogDir=/usr/local/zookeeper/dataLogDir 11 12 clientPort 13 连接服务器的端口,默认2181
启动
cd bin
./zkServer.sh start
数据模型
是一个树形结构,类似tree.js组件
每个节点都称为znode ,它可以由子节点,也可以有数据
每个节点分为临时节点和永久节点,临时节点在客户端断开后消失
每个zk节点都有版本号
每当节点数据发生变化,该节点的版本号就会累加
删除/修改过时节点,版本号不匹配则会出错
每个zk节点数据不宜过大
节点可以设置acl,可以通过权限来限制用户的访问
作用
master 节点选举,主节点挂了以后,从节点会接受工作,保证节点唯一,即首脑模式,保证集群高可用
统一配置文件管理,只需部署一台服务器,则可以把相同的配置文件同步更新到其他所有的服务器
发布于订阅 ,发布者把数据存在znode上,订阅者会读取这个数据
提供了分布式锁
集群管理,集群保证数据的强一致性
常用命令
1 ls 2 ls 2 3 stat 4 get 取出当前节点数据 5 6 create 创建节点 7 create /hello hello-zookeeper 8 create -e 创建临时节点 9 create -e /hello/tmp hello-zookeeper 10 create -s /hello/sec seq 创建顺序节点 11 12 set path data [version] 13 set /hello hello-zookeeper-data 14 15 delete path [version]
watcher机制
针对每个节点的操作,都会有一个监督者 ,watcher
当监控的某个对象(znode)发生了变化,则会触发watcher事件
zk中的watcher是一次性的,触发后立即销毁
watcher事件类型
ls 为父节点设置watcher,创建,删除节点触发:NodeChildrenChange
ls 为父节点设置watcher ,修改节点不触发事件
watcher使用场景
统一资源配置
acl
权限字符串缩写
crdwa
create 创建子节点
read 获取节点/子节点
delete 删除子节点
write 设置节点数据
admin 设置权限
设置密码
auth:user:pwd:cdrwa digest:user:BASE64(SHA(pwd)):cdrwa addauth digest user:pwd addauth digest admin:admin 注册用户名 setAcl /hello/abc auth:admin:admin:cdrwa setAcl /hello/test digest:admin:xxxx:cdra
四字命令
yum install nc
1 echo [commond] | nc [ip] [port] 2 3 4 [stat] 查看zk的状态信息,以及是否mode 5 6 [ruck] 查看当前zkServer是否启动,返回 imok 7 8 [dump] 列出未经处理的会话和临时节点 9 10 [conf] 查看服务器配置 11 12 [cons] 展示连接到服务器的客户端信息 13 14 [envi] 环境变量 15 16 [mntr] 监控zk的健康信息 17 18 [wchs] 展示watch的信息
vi zoo.cfg
41w.commands.whitelist=*
wchc 和 wchp session与watch及path与watch的信息
zookeeper集群搭建
关闭防火墙
systemctl disable firewalld.service
master 192.168.239.145
slave1 192.168.239.134
slave2 192.168.239.135
配置文件myid 1/2/3 对应 server.1/2/3
master
vi dataDir/myid 1
slave1
vi dataDir/myid 2
slave3
vi dataDir/myid 3
关于zoo.cfg的配置
1 vi zoo.cfg 2 3 tickTime=2000 4 initLimit=10 5 syncLimit=5 6 dataDir=/usr/local/zookeeper/dataDir 7 dataLogDir=/usr/local/zookeeper/dataLogDir 8 clientPort=2181 9 4lw.commands.whitelist=* 10 11 server.1=192.168.239.145:2888:3888 12 server.2=192.168.239.134:2888:3888 13 server.3=192.168.239.135:2888:3888
启动集群
./zkServer.sh start
查看运行状态
./zkServer.sh status
完