zookeeper简介及安装

一. zookeeper概述

Zookeeper 是一个开源的分布式的,为分布式应用提供协调服务的 Apache 项目。它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等

1.1 为什么要使用zookeeper
大部分分布式应用需要一个主控、协调器或控制器来管理物理分布的子进程(如资源、任务分配等)。目前,大部分应用需要开发私有的协调程序,缺乏一个通用的机制协调程序的反复编写浪费,且难以形成通用、伸缩性好的协调器。
ZooKeeper:提供通用的分布式锁服务,用以协调分布式应用

1.2 zookeepr可以做什么
Hadoop2.X
使用Zookeeper的事件处理确保整个集群只有一个活跃的NameNode,存储配置信息等.
HBase
使用Zookeeper的事件处理确保整个集群只有一个HMaster,察觉HRegionServer联机和宕机,存储访问控制列表等.

1.3 Zookeeper的角色

领导者(leader),负责进行投票的发起和决议,更新系统状态

学习者(learner),包括跟随者(follower)和观察者(observer),follower用于接受客户端请求并给客户端返回结果,在选主过程中参与投票Observer可以接受客户端连接,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度

客户端(client),请求发起方

1.4 选举机制

半数机制(Paxos 协议):集群中半数以上机器存活,集群可用。所以 zookeeper 适合装在奇数台机器上。

Zookeeper 虽然在配置文件中并没有指定 master 和 slave。但是,zookeeper 工作时,是有一个节点为 leader,其他则为 follower,Leader是通过内部的选举机制临时产生的。

1.5 节点类型

Znode有两种类型:

短暂(ephemeral):客户端和服务器端断开连接后,创建的节点自己删除

持久(persistent):客户端和服务器端断开连接后,创建的节点不删除

Znode有四种形式的目录节点(默认是persistent ):
持久化目录节点(PERSISTENT)
客户端与zookeeper断开连接后,该节点依旧存在

持久化顺序编号目录节点(PERSISTENT_SEQUENTIAL)
客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号

临时目录节点(EPHEMERAL)
客户端与zookeeper断开连接后,该节点被删除

临时顺序编号目录节点(EPHEMERAL_SEQUENTIAL)
客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号

二、 安装

下载
http://mirror.bit.edu.cn/apache/zookeeper/

配置安装

[root@node01 Zookeeper]# tar -zxvf apache-zookeeper-3.5.5-bin.tar.gz
# 文件夹重命名
[root@node01 Zookeeper]# mv apache-zookeeper-3.5.5-bin zookeeper-3.5.5
[root@node01 Zookeeper]# cd zookeeper-3.5.5
[root@node01 zookeeper-3.5.5]# cd conf
[root@node01 conf]# mv zoo_sample.cfg zoo.cfg
[root@node01 conf]# vim zoo.cfg
## 修改以下内容
dataDir=/opt/SoftWare/Zookeeper/data
## 创建相应目录
[root@node01 Zookeeper]# mkdir data
## 修改环境变量
[root@node01 Zookeeper]# vi /etc/profile
#Zookeeper配置
export ZOOKEEPER_HOME=/opt/SoftWare/Zookeeper/zookeeper-3.5.5
export PATH=$PATH:$ZOOKEEPER_HOME/bin
[root@node01 Zookeeper]# source /etc/profile

配置参数

tickTime=2000: 通信心跳数,Zookeeper服务器心跳时间,单位毫秒
Zookeeper使用的基本时间,服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳,时间单位为毫秒。
它用于心跳机制,并且设置最小的session超时时间为两倍心跳时间。

initLimit=10: Leader和Follower初始通信时限
集群中的follower跟随者服务器与leader领导者服务器之间初始连接时能容忍的最多心跳数(tickTime的数量),用它来限定集群中的Zookeeper服务器连接到Leader的时限。
投票选举新leader的初始化时间Follower在启动过程中,会从Leader同步所有最新数据,然后确定自己能够对外服务的起始状态。
Leader允许Follower在initLimit时间内完成这个工作。

syncLimit=5: Leader 和 Follower 同步通信时限
集群中Leader与Follower之间的最大响应时间单位,假如响应超过syncLimit * tickTime,Leader认为Follwer死掉,从服务器列表中删除Follwer。
在运行过程中,Leader负责与ZK集群中所有机器进行通信,例如通过一些心跳检测机制,来检测机器的存活状态。
如果L发出心跳包在syncLimit之后,还没有从F那收到响应,那么就认为这个F已经不在线了。

dataDir: 数据文件目录+数据持久化路径
保存内存数据库快照信息的位置,如果没有其他说明,更新的事务日志也保存到数据库。

clientPort=2181: 客户端连接端口
监听客户端连接的端口

简单操作

## 启动zookeeper服务
[root@node01 Zookeeper]# zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/SoftWare/Zookeeper/zookeeper-3.5.5/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
## 查看进程
[root@node01 Zookeeper]# jps
1777 ResourceManager
9987 QuorumPeerMain
1413 NameNode
10006 Jps
1614 SecondaryNameNode
## 查看服务状态
[root@node01 Zookeeper]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/SoftWare/Zookeeper/zookeeper-3.5.5/bin/../conf/zoo.cfg
Mode: standalone
## 启动客户端
[root@node01 Zookeeper]# zkCli.sh
## 退出客户端
[zk: localhost:2181(CONNECTED) 1] quit
## 停止zookeeper服务器端
[root@node01 Zookeeper]# zkServer.sh stop

完全分布式安装

## 在zoo.cfg中添加以下内容
##  配置集群
server.1=node01:2888:3888
server.2=node02:2888:3888
server.3=node03:2888:3888
##配置参数详情:
## server.A=B:C:D
## A :表示一个数字,这个数字表示第几号服务器,配置在myid的文件中
## B :服务的地址,也就是IP地址,但是IP不好记,所以配置了Hosts文件,让这个IP映射为域名
## C :是本台服务器与集群中的Leader服务器交换信息的端口
## D :万一leader挂了,就需要重新来选举Leader,用这个端口进行选举投票
​
## 创建一个新的配置文件myid
[root@node01 data]# vim myid
## 添加一个数字作为本机的ID

命令行操作​

[zk: localhost:2181(CONNECTED) 0] help
    stat path [watch]               #查看节点的状态
    set path data [version]         #设置节点的数据
    ls path [watch]                 #查看当前节点中所包含的内容
    ls2 path [watch]                #查看当前节点的数据并且能够看到更新次数等数据
    delete path [version]           #删除节点
    sync path                       #同步节点
    rmr path                        #递归删除节点
    get path [watch]                #获取节点的数据
    create [-s] [-e] path data acl  #创建节点并添加数据,-s带序号,-e临时节点
    quit                            #退出 
[zk: localhost:2181(CONNECTED) 14] stat /yangxiu
cZxid = 0x900000015                     #创建节点的事务ID,是Zookeeper中所有修改的总的次序,每一个修改都会有一个这样的ID
ctime = Mon Aug 20 02:52:21 EDT 2018    #创建的时间
mZxid = 0x900000015                     #最后更新的zxid
mtime = Mon Aug 20 02:52:21 EDT 2018    #最后修改的时候
pZxid = 0x900000015                     #最后更新的子节点的zxid
cversion = 0                            #更新子节点的次数(不包含对子节点数据的修改)
dataVersion = 0                         #数据的变化版本号
aclVersion = 0                          #访问控制列表的变化号
ephemeralOwner = 0x0                    #如果不是临时节点则为0,是临时节点则为拥有这的session id
dataLength = 2                          #数据长度
numChildren = 0                         #子节点的个数
发布了59 篇原创文章 · 获赞 4 · 访问量 4515

猜你喜欢

转载自blog.csdn.net/weixin_45102492/article/details/103013961