https://www.cnblogs.com/leeSmall/p/9563547.html

一、Zookeeper介绍

1. 介绍Zookeeper之前先来介绍一下分布式

1.1 分布式主要是下面两个方面:

1) 任务拆分

  任务拆分指的是把传统的单节点服务拆分成多个节点服务部署到不同的机器上对外提供服务。比如一个传统服务有订单+支付+物流等3个模块,拆分成订单系统、支付系统、物流系统3个服务。
2) 节点分工

  如上面的服务拆分后,订单系统、支付系统、物流系统各司其职
说明:

分布式解决高可用,高并发的。

集群解决的是高可用。

集群从物理上来定义,分布式一种工作方式。
例如:一个工作任务需要10个小时(单节点)
分布式:10台机器,任务只需要1个小时就能够完成
集群:10台机器,任务还是10个小时。

1.2 分布式协作中的难点:

如果让你设计一个分布式系统,你预见到什么问题?
1) 保证节点高可用(节点故障)
2) 数据的一致性
3) 通讯异常
4) 网络分区
.......

2.  Zookeeper简介

Zookeeper就是用来解决分布式协作中的难点的

zookeeper是google的chubby项目开源实现。最早是hadoop的子项目

Zookeeper的使用场景:

小米米聊、淘宝Taokeeper其实是类zookeeper。

Kafka使用zookeeper。消息发布订阅,其中zk就是用于检测节点崩溃。实现主题的发现,并且保持主题的生产和消费状态。

Hbase三段查找,Root-Region=》Meta Region=》Region(Table)。hbase的元数据信息放在HBase。HMaster挂掉,马上要节点恢复。
Hadoop。NameNode(SecondaryNameNode),HA Hadoop。一般情况下一个简单的hadoop集群,只有一个NameNode,如果NameNode挂掉,hadoop集群不可用。HA Haoop里面就要用到zk。

3. Zookeeper解决哪些问题

3.1 Master节点管理

  解决的问题:Master高可用(挂掉以后,谁来负责工作),保证唯一。

3.2 配置文件管理

  解决的问题:统一把配置文件存放zk,由ZK统一分发修改的内容到各台机器。

3.3 发布与订阅

  发布者(producer)将数据发布到zk节点上,供订阅者(consumer)动态获取

3.4 分布式锁

  分布式环境访问同一个资源,由第三方配锁实现。
  解决的问题:由zk统一进行协调,保证数据的一致性。

3.5 集群的管理

  Worker集群监控。保证主数据和备份数据的一致

二、Zookeeper安装配置

环境准备:

一台安装有jdk的虚拟机:192.168.152.130

1. 安装

1.1.下载

cd /software
wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz

1.2.解压

tar -zxvf zookeeper-3.4.6.tar.gz

2. 配置

说明:这里配置的是伪分布式的zookeeper

注意:配置之前一定要在/etc/hosts里面配置主机映射,否则会报错误:

ERROR [master:3890:QuorumCnxManager$Listener@517] - Exception while listening
java.net.SocketException: Unresolved address

vim /etc/hosts

2.1 先建立zookeeper的三个数据目录

mkdir -p /zookeeper/zk1
mkdir -p /zookeeper/zk2
mkdir -p /zookeeper/zk3

2.2 查看zookeeper的配置文件(已删掉多余的配置和注释)

vim zoo_sample.cfg
tickTime=2000   #session的会话时间 以ms为单位
initLimit=10 #服务器启动以后,master和slave通讯的时间
syncLimit=5 #master和slave之间的心跳检测时间,检测slave是否存活
dataDir=/tmp/zookeeper #保存zk的快照和数据
clientPort=2181 #客户端访问zk的端口

2.3 复制zoo_sample.cfg为zoo1.cfg添加如下配置

cp zoo_sample.cfg zoo1.cfg
vim zoo1.cfg

配置:

#session的会话时间 以ms为单位
tickTime=2000 #服务器启动以后,master和slave通讯的时间
initLimit=10 #master和slave之间的心跳检测时间,检测slave是否存活
syncLimit=5 #(这个目录可以自行指定)
dataDir=/zookeeper/zk1 #客户端访问zk的端口
clientPort=2181
#master对应于前面在hosts里面配置的主机映射 2888是数据同步和消息传递端口,3888是选举端口
server.1=master:2888:3888 #
master对应于前面在hosts里面配置的主机映射 2889是数据同步和消息传递端口,3889是选举端口
server.2=master:2889:3889 #
master对应于前面在hosts里面配置的主机映射 2890是数据同步和消息传递端口,3890是选举端口
server.3=master:2890:3890
 

2.4 复制zoo1.cfg为zoo2.cfg添加如下配置

cp zoo1.cfg zoo2.cfg
vim zoo2.cfg
#session的会话时间 以ms为单位
tickTime=2000 #服务器启动以后,master和slave通讯的时间
initLimit=10 #master和slave之间的心跳检测时间,检测slave是否存活
syncLimit=5 #(这个目录可以自行指定)
dataDir=/zookeeper/zk2 #客户端访问zk的端口
clientPort=2182 #master对应于前面在hosts里面配置的主机映射 2888是数据同步和消息传递端口,3888是选举端口
server.1=master:2888:3888 #
master对应于前面在hosts里面配置的主机映射 2889是数据同步和消息传递端口,3889是选举端口
server.2=master:2889:3889 #
master对应于前面在hosts里面配置的主机映射 2890是数据同步和消息传递端口,3890是选举端口
server.3=master:2890:3890

2.5 复制zoo1.cfg为zoo3.cfg添加如下配置

cp zoo1.cfg zoo3.cfg
vim zoo3.cfg
#session的会话时间 以ms为单位
tickTime=2000 #服务器启动以后,master和slave通讯的时间
initLimit=10 #master和slave之间的心跳检测时间,检测slave是否存活
syncLimit=5 #(这个目录可以自行指定)
dataDir=/zookeeper/zk3 #客户端访问zk的端口
clientPort=2183
#master对应于前面在hosts里面配置的主机映射 2888是数据同步和消息传递端口,3888是选举端口
server.1=master:2888:3888 #
master对应于前面在hosts里面配置的主机映射 2889是数据同步和消息传递端口,3889是选举端口
server.2=master:2889:3889 #
master对应于前面在hosts里面配置的主机映射 2890是数据同步和消息传递端口,3890是选举端口
server.3=master:2890:3890

2.6 手动建立myid文件且指定在zk数据目录,也就是dataDir指定的路径(不管真分布还是伪分布都需要指定)

echo 1 >> /zookeeper/zk1/myid
echo 2 >> /zookeeper/zk2/myid
echo 3 >> /zookeeper/zk3/myid

 说明:

myid文件内容分别为1,2,3对应于zk配置文件的server.1,server.2,server.3

2.7 测试zookeeper分布式是否搭建成功

分别启动三个zookeeper

cd /software/zookeeper-3.4.6/bin/
./zkServer.sh start /software/zookeeper-3.4.6/conf/zoo1.cfg
./zkServer.sh start /software/zookeeper-3.4.6/conf/zoo2.cfg
./zkServer.sh start /software/zookeeper-3.4.6/conf/zoo3.cfg

查看3个zookeeper的状态

cd /software/zookeeper-3.4.6/bin/
/zkServer.sh status /software/zookeeper-3.4.6/conf/zoo1.cfg
/zkServer.sh status /software/zookeeper-3.4.6/conf/zoo2.cfg
/zkServer.sh status /software/zookeeper-3.4.6/conf/zoo3.cfg

可以看到第2个zookeeper是leader,第1个和第3个为follower,到此zookeeper分布式搭建完成!!!

2.8 Zookeeper常用命令

启动:
./zkServer.sh start /software/zookeeper-3.4.6/conf/zoo1.cfg
./zkServer.sh start /software/zookeeper-3.4.6/conf/zoo2.cfg
./zkServer.sh start /software/zookeeper-3.4.6/conf/zoo3.cfg 停止:
./zkServer.sh stop /software/zookeeper-3.4.6/conf/zoo1.cfg
./zkServer.sh stop /software/zookeeper-3.4.6/conf/zoo2.cfg
./zkServer.sh stop /software/zookeeper-3.4.6/conf/zoo3.cfg 查看状态:
/zkServer.sh status /software/zookeeper-3.4.6/conf/zoo1.cfg
/zkServer.sh status /software/zookeeper-3.4.6/conf/zoo2.cfg
/zkServer.sh status /software/zookeeper-3.4.6/conf/zoo3.cfg

2.9 Zookeeper真分布式部署在master、slave1、slave2 三台不同的服务器上

server1..../conf/zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/zookeeper/zk
clientPort=2181 server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

server2..../conf/zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/zookeeper/zk
clientPort=2181 server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

server3..../conf/zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/zookeeper/zk
clientPort=2181 server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

注意:

真分布必须是奇数台,因为必须满足n/2+1=m,m必须大于部署zk机器数的一半(n/2)可用才认为集群可用,而且奇数台更节省资源
2/2+1=2 一台不能坏
3/2+1=2 可以坏掉一台

4/2+1=3 只能坏一台
5/2+1=3 可以坏2台

三、ZK Shell的使用

1. 连接zk

zkCli.sh [-server ip:port]

示例:

连接到master(127.0.0.1 master)这台机器上2181的zookeeper

./zkCli.sh -server master 2181

2. 列出zk中的节点

ls、ls2

 示例:

3. 创建节点

create [-s] [-e] path data acl

说明:

zk的节点分为两种:临时节点(随着zk session消亡而自动删除)、持久节点(一直存在)

-s: 顺序节点

-e: 临时节点

acl:访问权限控制

示例:

3.1 创建一个zk-test的节点,数据是123 不带-s 、-e默认是持久节点

create /zk-test "123"

3.2 创建顺序节点

create  -s   /zk-test  “test123”

多次执行创建顺序节点的命令,可以看到zookeeper的内部会对顺序节点的名称进行自增控制

3.3 创建临时节点

create -e /zk-test123 "test1234"

说明:

临时节点依赖于顺序节点,临时节点下不能再创建临时节点,顺序节点下才可以创建临时节点

3.4 创建子节点test

create  /zk-test ""
create /zk-test/test "1"
ls /zk-test/test

4. 删除节点命令

delete 

示例:

删除节点zk-test,如果zk-test下面还有子节点得先删除子节点,才能删除zk-test

delete /zk-test/test
delete /zk-test

递归删除一个znode

rmr path 

示例:

删除zk-test及其下面的子节点

rmr  /zk-test

5. 获取节点信息

get

 示例:

create /zk-123  “abc”
get /zk-123

结果说明:

结果
cZxid = #创建节点时zk内部自己分配的id
Ctime = #创建节点的时间
mZxid = #修改的id
mtime = 修改的时间
pZxid = 子节点最后一次被修改的id
cVersion = 0 #拥有的子节点被改的话,该值随着改变
dataVersion = 0 #数据版本
aclVersion = 0 # 访问控制权限的版本
ephemeralOwner = 0X0 #临时节点还是持久节点 临时节点值不为0(值为当前会话id),持久节点值永远为0
dataLength = 3 #数据长度
numChildren = 0 #子节点个数

6. 更新节点数据

set  /zk-123 “d”

7. 连接到指定节点

connect host:port

 示例:

连接到2181
connect master:2181 连接到2182
connect master:2182 连接到2183
connect master:2183

说明:

这个命令是在已经连接到zookeeper之后,在里面切换到其他zookeeper时使用 

8. 设置配额

配额:给某个目录指定多少存储空间或者允许创建多少个节点

setquota -n|-b val path

参数说明:

n 指定可以设置多少个子节点

b 指定可以设置多大空间(byte)

示例:

setquota -n 5 /zk-123
create /zk-123/1 1
create /zk-123/2 2
create /zk-123/3 3
create /zk-123/4 4
create /zk-123/5 5
create /zk-123/6 6

说明:

对于配额不是硬性的提示,超过配额还是可以继续创建,只不过在日志里面有提示

配额的用途:

限制子节点的创建个数和分配空间的大小,如指定某个session有多少空间可以用

9. 查看配额

listquota path

10. 查看节点的状态

stat path

示例:

查看节点zk-123的状态

stat  /zk-123

Zookeeper系列一:Zookeeper介绍、Zookeeper安装配置、ZK Shell的使用的更多相关文章

  1. Zookeeper 系列(三)Zookeeper API

    Zookeeper 系列(三)Zookeeper API 本节首先介绍 Zookeeper 的 Shell 命令,再对 Java 操作 Zookeeper 的三种方式进行讲解,本节先介绍 Zookee ...

  2. kudu介绍及安装配置

    kudu介绍及安装配置 介绍 Kudu 是一个针对 Apache Hadoop 平台而开发的列式存储管理器.Kudu 共享 Hadoop 生态系统应用的常见技术特性: 它在 commodity har ...

  3. zookeeper介绍以及安装配置

    Zookeeper启动时默认将Zookeeper.out输出到当前目录,不友好.改变位置有两种方法: 1:在当前用户下~/.bash_profile或在/etc/profile,添加ZOO_LOG_D ...

  4. 【原创】大数据基础之Zookeeper(1)介绍、安装及使用

    zookeeper3.4.11 http://zookeeper.apache.org/ 一 简介 ZooKeeper is a centralized service for maintaining ...

  5. ZooKeeper系列(1) 整体介绍(转)

    原文地址:https://www.cnblogs.com/wuxl360/p/5817471.html 一.分布式协调技术 在给大家介绍ZooKeeper之前先来给大家介绍一种技术——分布式协调技术. ...

  6. ZooKeeper 系列(二)—— Zookeeper单机环境和集群环境搭建

    一.单机环境搭建         1.1 下载         1.2 解压         1.3 配置环境变量         1.4 修改配置         1.5 启动         1. ...

  7. ZooKeeper系列(二)—— Zookeeper 单机环境和集群环境搭建

    一.单机环境搭建 1.1 下载 下载对应版本 Zookeeper,这里我下载的版本 3.4.14.官方下载地址:https://archive.apache.org/dist/zookeeper/ # ...

  8. zookeeper系列(二)zookeeper的使用--javaAPI

    作者:leesf    掌控之中,才会成功:掌控之外,注定失败: 出处:http://www.cnblogs.com/leesf456/ (尊重原创,感谢作者整理的这么好,作者的部分内容添加了我的理解 ...

  9. Zookeeper系列(十)zookeeper的服务端启动详述

    作者:leesf    掌控之中,才会成功:掌控之外,注定失败.出处:http://www.cnblogs.com/leesf456/p/6105276.html尊重原创,大家功能学习进步:  一.前 ...

  10. zookeeper系列(八)zookeeper客户端的底层详解

    作者:leesf    掌控之中,才会成功:掌控之外,注定失败.出处:http://www.cnblogs.com/leesf456/p/6098255.html 尊重原创,共同学习进步:  一.前言 ...

随机推荐

  1. [算法总结] 13 道题搞定 BAT 面试——字符串

    1. KMP 算法 谈到字符串问题,不得不提的就是 KMP 算法,它是用来解决字符串查找的问题,可以在一个字符串(S)中查找一个子串(W)出现的位置.KMP 算法把字符匹配的时间复杂度缩小到 O(m+ ...

  2. Docker部署Nginx并修改配置文件

    Docker部署Nginx并修改配置文件 一.拉取nginx镜像 docker pull nginx 二.在宿主机中创建挂载目录 mkdir -p /data/nginx/{conf,conf.d,h ...

  3. a dive in react lifecycle

    背景:我在react文档里找生命周期的图,居然没有,不敢相信我是在推特上找到的... 正文 react v16.3 新生命周期: static getDerivedStateFromProps get ...

  4. MySQL添加新用户、为用户创建数据库、为新用户分配权限

    登录MySQL [root@VM_0_2_33_centos /]#mysql -u root -p 添加新用户 允许本地 IP 访问 localhost, 127.0.0.1 mysql>'; ...

  5. .net core 下编码问题

    System.Globalization.CultureInfo.CurrentCulture = new System.Globalization.CultureInfo("zh-CN&q ...

  6. LEDAPS1.3.0版本移植到windows平台----HuCal定标模块

    这个是2012年左右放在百度空间的,谁知百度空间关闭...转移到博客园. 最近项目用到3.1.2版本的LEDAPS,新版本的使用情况会在后续文章中慢慢丰富. HuCal是将LEDAPS项目中的TM/E ...

  7. 搭建的flask项目,若修改项目中的文件,项目没有reload,除非重启主机,解决方法如下

    1.博主本人前面有发过一篇博文如何搭建flask项目,可以去查看. 解决办法:加入一句 touch-reload=项目目录在uwsgi.ini 2.测试没问题

  8. Spark性能优化【Stack Overflow】

    一.异常情况 Stack Overflow 二.异常分析 之所以会产生Stack Overflow,原因是在Stack方法栈中方法的调用链条太长的原因导致的,一般情况有两种: 1.过于深度的递归[常见 ...

  9. 网站流量统计PV&UV

    统计网站pv和uv PV是网站分析的一个术语,用以衡量网站用户访问的网页的数量. 对于广告主,PV值可预期它可以带来多少广告收入.一般来说,PV与来访者的数量成正比,但是PV并不直接决定页面的真实来访 ...

  10. spring4笔记----Spring几种常用的容器后处理器

    PropertyPlaceholderConfigurer  属性占位符配置器 PropertyOverrideConfigureer    重写占位符配置器 CustomAutowireConfig ...