什么是zookeeper?
zookeeper是分布式数据一致性的解决方案。
zookeeper能做什么?
数据的发布与订阅(配置中心:disconf)
负载均衡(dubbo利用了zookeeper机制实现负载均衡)
命名服务
master选举(kafka,hadoop,hbase)
分布式队列 分布式锁
zookeeper的特性
顺序一致性:
从一个客户端发起的事务请求,最终会严格按照顺序被应用到zookeeper中
原子性:
所有的事务请求的处理结果在整个集群中的所有机器上应用情况是一致的,也就是说,要么整个集群中的所有机器都成功应用了某一事务,要么都不应用。
可靠性:
一旦服务器成功应用了某一个事务数据,并且对客户端做了响应,那么这个数据在整个集群中一定是同步并且保留下来的
实时性:
一旦一个事务被成功应用,客户端就能够立即从服务端读取到事务变更后的最新数据状态。(近实时)
下载
首先下载zookeeper.jar
链接:https://pan.baidu.com/s/1uW2rT_r4blRVyQKiD2UGVg
提取码:884g
搭建
1.解压zookeeper
tar -zxvf zookeeper-3.4.10.tar.gz
2.cd 到 ZK_HOME/conf , copy一份zoo.cfg 这里也可以把zoo_sample.cfg改名为zoo.cfg
cp zoo_sample.cfg zoo.cfg
3.cd 到bin下:sh zkServer.sh xxx 查看常用命令
4.启动服务./zkServer.sh start
5.启动客户端 sh zkCli.sh -server ip:port
集群环境下zookeeper包含三种角色:
leader(领导者)follower(追随者)observer(观察者)
ovserver是一种特殊的zookeeper节点。可以帮助解决zookeeper的扩展性(如果大量客户端访问我们的zookeeper集群,需要增加zookeeper集群机器数量。从而增加zookeeper集群的性能。导致zookeeper写性能下降,zookeeper的数据变更需要半数以上服务器投票通过。造成网络消耗增加投票成本)
observer不参与投票,只接收投票结果。observer不属于zookeeper的关键部位。
配置集群
1.我这里是三台虚拟机,前两台修改conf下zoo.cfg配置文件,增加如下配置
第三台作为observer,修改conf下zoo.cfg,增加如下配置
server.id=host:port:port
id取值范围是1-255,用id来标识该机器在集群中的机器序号
2888是follower节点和leader节点交换信息的端口号
3181标识如果leader节点挂掉,需要一个端口来进行选举
2.zoo.cfg中有一个dataDir=/tmp/zookeeper,在这个目录下创建一个myid文件,myid只有一行就是当前服务器的id
3.启动服务
启动服务时如果失败,就到bin目录下看一下zookeeper.out,我这里就因为防火墙问题导致失败。
启动后查看下各服务器的角色:一个leader 一个follower 一个observer