Zookeeper介绍
Apache ZooKeeper 是Apache软件基金会的一个软件项目,它为大型的分布式计算提供了开源的分布式配置服务、同步服务、命名注册等,ZooKeeper曾经是Hadoop的一个子项目,现在已经是一个独立的顶级项目。
1、下载与安装
开源软件,自行官网下载
1.1、解压
1.2、配置
进入conf文件夹,找到zoo_sample.cfg文件,命名为zoo.cfg
1.3、配置文件介绍
- tickTime:ZooKeeper的服务器和客户端之间维持心跳的间隔,每一个tickTime的时间就会发送一个心跳,tickTime是以好秒为单位的。zookeeper的客户端和服务器之间也有和web的开发类似的session的概念,而zookeeper的最小的session的过期时间也就是tickTime的2倍
- initTime:Follower在启动的过程中,会冲Leader同步最新的数据,然后确认自己能够对外的起始状态。Leader允许F在initTime的时间内完成工作。数据量大的时候,适当的调大此参数,默认为10
- syncLimit:运行过程中,Leader负责与ZK集群的所有机器进行通信,L发出心跳在syncLimit时间内没有收到响应,就认为这个F已经不在线了。
- dataDir:存储快照文件的snapshot的目录,默认情况下,事务日志也会存储在这里。建议存储日志的时候,同时配置参数dataLogDir,事务日志的写性能会影响zk性能。
- clientPort:客户端连接服务器的端口
2、启动服务端
3、停止服务端
4、使用客户端
5、集群环境的构建
单机环境模拟集群环境,所有需要不同的端口来模拟不同的主机。
5.1、复制配置文件
cd {zookeeperurl}/conf/
cp zoo.cfg zoo1.cfg
cp zoo.cfg zoo2.cfg
cp zoo.cfg zoo3.cfg
5.2、创建数据以及日志文件的目录
mkdir -p /zookeeper/data_1
mkdir -p /zookeeper/data_2
mkdir -p /zookeeper/data_3mkdir -p /zookeeper/logs_1
mkdir -p /zookeeper/logs_2
mkdir -p /zookeeper/logs_3
5.3、创建mid文件
echo “1” > /zookeeper/data_1/myid
echo “2” > /zookeeper/data_2/myid
echo “3” > /zookeeper/data_3/myid
5.4、修改配置文件
zoo1.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/zookeeper/data_1
clientPort=2181
dataLogDir=/zookeeper/logs_1
# server.x的x与myid保持一致,第一个端口用于leader和leaderner的同步,第二个端口用于选举过程中的投票通信
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
zoo2.cfg
```bash
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/zookeeper/data_2
clientPort=2182
dataLogDir=/zookeeper/logs_2
# server.x的x与myid保持一致,第一个端口用于leader和leaderner的同步,第二个端口用于选举过程中的投票通信
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
zoo3.cfg
```bash
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/zookeeper/data_3
clientPort=2183
dataLogDir=/zookeeper/logs_3
# server.x的x与myid保持一致,第一个端口用于leader和leaderner的同步,第二个端口用于选举过程中的投票通信
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
5.5、启动集群
zkServer.sh start {zookeeperUrl}/zookeeper-3.4.12/conf/zoo1.cfg
zkServer.sh start {zookeeperUrl}/zookeeper-3.4.12/conf/zoo2.cfg
zkServer.sh start {zookeeperUrl}/zookeeper-3.4.12/conf/zoo3.cfg
5.6、验证
zkServer.sh status {zookeeperUrl}zookeeper-3.4.12/conf/zoo1.cfg
zkServer.sh status {zookeeperUrl}zookeeper-3.4.12/conf/zoo2.cfg
zkServer.sh status {zookeeperUrl}zookeeper-3.4.12/conf/zoo3.cfg
server1:Mode: follower
server1:Mode: leader
server1:Mode: follower
打开命令行客户端分别连接3个server:
zkCli.sh -server localhost:2181
zkCli.sh -server localhost:2182
zkCli.sh -server localhost:2183
连上之后执行 ls /,显示3个server的目录是一致的,
在server1上执行文件夹,你就会看到同样的2、3都会创建。
6、Observer
节点配置中增加:peerType=observer
servers列表中增加:server.4=localhost:2890:3890:observer
7、集群的角色
- 领导者(Leader):负责投票的发起和决策,最终更新状态。
- 跟随者(Follower):用于接受客户端请求,并参与Leader的投票
- 观察者(Observer):接受客户端的连接,将请求转发给leader,但是不参与投票,只是同步leader的状态。
- 学习者( Learner):和leader能同步状态的server统称为Learner,
8、ZooKeeper中的CAP
ZooKeeper至少满足了cp,牺牲了可用性,保证强一致性
但是如果集群中有Leader、Follower、Observer,如果挂掉的是Observer,对于集群并没有影响,集群还是可以用的,是不过是Observer的数据不一致了,这个角度来讲的话,牺牲了一致性,满足了AP
9、ZooKeeper能做什么
1、统一命名中心
2、配置中心
3、集群监控和Master选举
4、分布式锁