1.zookeeper
分布式应用程序的协同服务。
提供:集中式服务,维护配置信息,命名服务,分布式同步以及组同步。
2.zk组件
1.client
分布式应用中的一个节点,访问服务器的信息,周期内向server发送信息,表明自己alive,server向client回复确认信息,若未回复,则client自动重定向消息到另一台服务器。
2.server
zk集群中得一个节点,为client提供所有服务,给client回复ack表明server是alive的
3.Ensemble
一组ZK服务器,最小节点数从3开始
4.leader
连接任何节点故障,leader负责自动恢复,在server启动时完成leader的推选
5.follower
听从leader指令
3.名字空间等级——zk数据模型
类似于linux文件系统的树形结构,每个节点是znode。
根节点:/
/config --集中配置管理,每个znode存储上限1m数据
/workers --命名服务
每个znode都有stat的结构 : version + acl + ts + data length
version:节点关联的数据变化次数
acl:访问控制列表,权限认证
ts:时间戳,znode通过txid识别变化
data length:data长度,上限1m
4.znode类型
1.Persistence //持久节点,默认节点类型,客户端断开,一直有效
2.Ephemeral //临时节点,会话关闭自动删除,没有子节点。--临时节点删除时,在leader推选下一个节点顶替
3.Sequential //序列节点,可永久可临时,创建时,zk附加10个数字的序列号在末端。
5.搭建zk集群
1.安装jdk
2.安装zk
$ wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz -P /usr/local/src --下载 $ tar zxvf zookeeper-3.4.8.tar.gz -C /opt --解压 $ cd /opt && mv zookeeper-3.4.8 zookeeper $ cd zookeeper $ cp conf/zoo_sample.cfg conf/zoo.cfg --复制一份
配置环境变量etc/environment
3.配置zk的配置文件zoo.cfg
tickTime=2000 dataDir=/././..... clientPort=8080 initLimit=5 syncLimit=2
4.启动zk服务器
$ zkServer.sh start --启动zk服务器
$ zkCli.sh --启动客户端命令行程序
[zk: localhost:2181(CONNECTED) 0] connect localhost:2181 --连接服务器 [zk: localhost:2181(CONNECTED) 2] ls / [zookeeper] [zk: localhost:2181(CONNECTED) 3] create /root "hello world" --创建节点 Created /root [zk: localhost:2181(CONNECTED) 4] ls / [zookeeper, root] [zk: localhost:2181(CONNECTED) 5] get /root hello world cZxid = 0x8 ctime = Wed Feb 21 17:10:41 CST 2018 mZxid = 0x8 mtime = Wed Feb 21 17:10:41 CST 2018 pZxid = 0x8 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 11 numChildren = 0 [zk: localhost:2181(CONNECTED) 6] stat /root cZxid = 0x8 ctime = Wed Feb 21 17:10:41 CST 2018 mZxid = 0x8 mtime = Wed Feb 21 17:10:41 CST 2018 pZxid = 0x8 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 11 numChildren = 0 [zk: localhost:2181(CONNECTED) 7] create -s /root/enode "seq" --创建序列节点 Created /root/enode0000000000 [zk: localhost:2181(CONNECTED) 2] get /root/enode0000000000 1 --watch,当在别的节点做set操作时,此处会监控变化 mm cZxid = 0x9 ctime = Wed Feb 21 17:14:17 CST 2018 mZxid = 0xc mtime = Wed Feb 21 17:20:56 CST 2018 pZxid = 0x9 cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 2 numChildren = 0 [zk: localhost:2181(CONNECTED) 3] WATCHER:: WatchedEvent state:SyncConnected type:NodeDataChanged path:/root/enode0000000000
数据存放位置:zookeeper/data/version-2