Zookeeper安装使用

简介

  ZooKeeper 是一个高可用的分布式数据管理系统协调框架。基于对 Paxos 算法的实现,使该框架保证了分布式环境中数据的强一致性,也正是基于这样的特性,使得 ZooKeeper 解决很多分布式问题。
  Zookeeper 保证了CP(数据一致性和分区容错性)
  当向注册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟以前的注册信息,但不能接受服务直接down掉不可用。也就是说,服务注册功能对可用性的要求要高于一致性。但是zk会出现这样一种情况,当master节点因为网络故障与其他节点失去联系时,剩余节点会重新进行leader选举。问题在于,选举leader的时间太长,30 ~ 120s, 且选举期间整个zk集群都是不可用的,这就导致在选举期间注册服务瘫痪。在云部署的环境下,因网络问题使得zk集群失去master节点是较大概率会发生的事,虽然服务能够最终恢复,但是漫长的选举时间导致的注册长期不可用是不能容忍的。
  ZooKeeper 集群中的所有机器通过一个 Leader 选举过程来选定一台称为 “Leader” 的机器,Leader 既可以为客户端提供写服务又能提供读服务。除了 Leader 外,Follower 和 Observer 都只能提供读服务,Follower 和 Observer 唯一的区别在于 Observer 机器不参与 Leader 的选举过程,也不参与写操作的“过半写成功”策略,因此 Observer 机器可以在不影响写性能的情况下提升集群的读性能。
  当 Leader 服务器出现网络中断、崩溃退出与重启等异常情况时,ZAB 协议就会进人恢复模式并选举产生新的Leader服务器。这个过程大致是这样的:
  Leader election(选举阶段):节点在一开始都处于选举阶段,只要有一个节点得到超半数节点的票数,它就可以当选准 leader。
  Discovery(发现阶段):在这个阶段,followers 跟准 leader 进行通信,同步 followers 最近接收的事务提议。
  Synchronization(同步阶段):同步阶段主要是利用 leader 前一阶段获得的最新提议历史,同步集群中所有的副本。同步完成之后 准 leader 才会成为真正的 leader。
  Broadcast(广播阶段): 到了这个阶段,Zookeeper 集群才能正式对外提供事务服务,并且 leader 可以进行消息广播。同时如果有新的节点加入,还需要对新节点进行同步。

Zookeeper单机版安装步骤

1.上传zookeeper 安装包到linux中/usr/local/temp 中(目录随意,对安装无影响)
2.解压zookeeper压缩包(tar zxvf 安装包)以3.4.8.版本为例

tar zxvf /usr/local/temp/zookeeper-3.4.8.tar.gz

3.复制zookeeper解压后的文件夹到/usr/local下并起名为zookpper(复制后名称任意,对安装无影响)

 cp -r /usr/local/temp/zookeeper-3.4.8  /usr/local/zookeeper

4.进入到zookeeper文件夹中

cd /usr/local/zookeeper

5.在zookeeper中新建data文件夹,做为zookeeper数据存储文件夹

mkdir data

6.进入到conf文件夹

cd conf

7.复制zoo_sample.cfg,并给新起名的zoo.cfg

cp zoo_sample.cfg zoo.cfg

8.修改zoo.cfg中dataDir属性值为新建data文件夹的路径

vim zoo.cfg

修改后:
在这里插入图片描述
9.进入到zookeeper/bin文件夹,使用zkServer.sh启动zookeeper

 cd ../bin
 ./zkServer.sh start

启动成功效果图
在这里插入图片描述
10.查看状态,其中Mode: standalone表示单机版

./zkServer.sh status

在这里插入图片描述
11. 为了外部能访问,需要在防火墙中放行2181端口


Zookeeper集群版安装步骤

结构:一共三个节点 (zk服务器集群规模不小于3个节点),要求服务器之间系统时间保持一致。
1.上传zookeeper 安装包到linux中/usr/local/temp 中(目录随意,对安装无影响)
2.解压zookeeper压缩包(tar zxvf 安装包)以3.4.8.版本为例

tar zxvf /usr/local/temp/zookeeper-3.4.8.tar.gz

3.复制zookeeper解压后的文件夹到/usr/local下并起名为zookpper(复制后名称任意,对安装无影响)

 cp -r /usr/local/temp/zookeeper-3.4.8  /usr/local/zookeeper

4.修改环境变量

vi /etc/profile
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=.:$ZOOKEEPER_HOME/bin:$JAVA_HOME:$PATH

5.刷新环境变量配置文件,使其生效

source /etc/profile

6.zookeeper下修改配置文件

cd /usr/local/zookeeper/conf
//修改配置文件名称
mv zoo_sample.cfg zoo.cfg

7.修改conf下的 zoo.cfg

//修改数据文件路径
dataDir=/usr/local/zookeeper/data	
//最后面添加,分别对应三个服务器节点
server.0=199.168.177.128:2888:3888
server.1=199.168.177.129:2888:3888
server.2=199.168.177.130:2888:3888

8.在 /usr/local/zookeeper 下创建文件夹 data

cd /usr/local/zookeeper
mkdir data

9.在上面创建的data中创建文件myid并填写内容

//三个节点添加不同的id值,id分别为上面zoo.cfg中server.(id)即服务器标识
//如其中一个,直接写个0即可
0

10.启动zookeeper

cd /usr/local/zookeeper/bin
//执行:zkServer.sh start (注意这里3台机器都要进行启动)
./zkServer.sh start
//状态:zkServer.sh status(在三个节点上检验zk的mode,一个leader和俩个follower)
./zkServer.sh status

操作zookeeper (shell)

zkCli.sh 进入zookeeper客户端
根据提示命令进行操作:
 查找:ls / ls /zookeeper
 创建并赋值:create /bhz hadoop
 获取:get /bhz
 设值:set /bhz baihezhuo
可以看到zookeeper集群的数据一致性
创建节点有俩种类型:短暂(ephemeral) 持久(persistent)

zoo.cfg详解

tickTime:基本事件单元,以毫秒为单位。这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,
也就是每隔 tickTime时间就会发送一个心跳。
dataDir: 存储内存中数据库快照的位置,顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
clientPort: 这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
initLimit:这个配置项是用来配置 Zookeeper 接受客户端初始化连接时最长能忍受多少个心跳时间间隔数,当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 102000=20 秒。
syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 5
2000=10 秒
 server.A = B:C:D :
 A表示这个是第几号服务器,
 B 是这个服务器的 ip 地址;
 C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;
 D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader

你可能感兴趣的:(微服务,java,zookeeper)