一、zookeeper介绍

1、概述

  Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

2、特点

  • 1)Zookeeper:一个领导者(leader),多个跟随者(follower)组成的集群。

  • 2)Leader负责进行投票的发起和决议,更新系统状态。

  • 3)Follower用于接收客户请求并向客户端返回结果,在选举Leader过程中参与投票。

  • 4)集群中奇数台服务器只要有半数以上节点存活,Zookeeper集群就能正常服务。

  • 5)全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的。

  • 6)更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行。

  • 7)数据更新原子性,一次数据更新要么成功,要么失败。

  • 8)实时性,在一定时间范围内,client能读到最新数据。

3、数据结构

  ZooKeeper数据模型的结构与Unix文件系统很类似,整体上可以看作是一棵树,每个节点称做一个ZNode。每一个ZNode默认能够存储1MB的元数据,每个ZNode都可以通过其路径唯一标识。数据结构图:

4、应用场景

  提供的服务均包括:统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、负载均衡等。

  • 1)统一命名服务

  • 1)统一配置管理

(1)分布式环境下,配置文件管理和同步是一个常见问题

  一个集群中,所有节点的配置信息是一致的,比如hadoop集群。

  对配置文件修改后,希望能够快速同步到各个节点上。

(2)配置管理可交由ZK实现

  可配置信息写入ZK上的一个Znode

  各个节点监听这个ZNode

  一旦Znode中的数据被修改,ZK将通知各个节点

  • 3、统一集群管理

(1)分布式环境中,实时掌握每个节点的状态是必要的。

  可根据节点实时做出一些调整

(2)可交由Zk实现

  可将节点信息写入ZK上的一个ZNode

  监听这个Znode可获取它的实时状态变化

(3)典型应用

  HBase中Master状态监控与选举

(4)集群管理结构图如下所示:

4、服务器节点动态上下线

  • 5、软负载均衡

5、下载地址

二、Zookeeper安装

1、安装前准备:
  • 1)安装jdk。

  • 2)上传zookeeper到linux系统下。

  • 3)修改tar包权限。

[itstar@bigdata111 software]$ chmod u+x zookeeper-3.4.10.tar.gz
  • 4)解压到指定目录
[itstar@bigdata111 software]$ tar -zxvf zookeeper-3.4.10.tar.gz -C /opt/module/

  • 5)配置环境变量
[root@bigdata111 software]$ vi /etc/profile
export ZOOKEEPER_HOME=/opt/module/zookeeper-3.4.10
export PATH=$PATH:$ZOOKEEPER_HOME/bin

2、配置修改

  • 将/opt/module/zookeeper-3.4.10/conf这个路径下的zoo_sample.cfg修改为zoo.cfg;
[itstar@bigdata111 zookeeper-3.4.10]$mv zoo_sample.cfg  zoo.cfg

//进入zoo.cfg文件:vim zoo.cfg
//修改dataDir路径为
dataDir=/opt/module/zookeeper-3.4.10/zkData //在/opt/module/zookeeper-3.4.10/这个目录上创建zkData文件夹
[itstar@bigdata111 zookeeper-3.4.10]$ mkdir zkData

3、操作zookeeper

  • 1)启动zookeeper
[itstar@bigdata111 zookeeper-3.4.10]$ bin/zkServer.sh start
  • 2)查看进程是否启动
[itstar@bigdata111 zookeeper-3.4.10]$ jps
--------------------------
4020 Jps
4001 QuorumPeerMain
  • 3)查看状态:
[itstar@bigdata111 zookeeper-3.4.10]$ bin/zkServer.sh status
----------------------------------
ZooKeeper JMX enabled by default
Using config: /opt/module/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: standalone
  • 4)启动客户端:
[itstar@bigdata111 zookeeper-3.4.10]$ bin/zkCli.sh
  • 5)退出客户端:
[zk: localhost:2181(CONNECTED) 0] quit

  • 6)停止zookeeper
[itstar@bigdata111 zookeeper-3.4.10]$ bin/zkServer.sh stop

2、配置参数解读

  解读zoo.cfg文件中参数含义

  • 1)tickTime=2000:通信心跳数,Zookeeper服务器心跳时间,单位毫秒

  Zookeeper使用的基本时间,服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳,时间单位为毫秒。

  它用于心跳机制,并且设置最小的session超时时间为两倍心跳时间。(session的最小超时时间是2*tickTime)

  • 2)initLimit=10:Leader和Follower初始通信时限

  集群中的follower跟随者服务器与leader领导者服务器之间初始连接时能容忍的最多心跳数(tickTime的数量),用它来限定集群中的Zookeeper服务器连接到Leader的时限。

  投票选举新leader的初始化时间

Follower在启动过程中,会从Leader同步所有最新数据,然后确定自己能够对外服务的起始状态。

  Leader允许Follower在initLimit时间内完成这个工作。

  • 3)syncLimit=5:Leader和Follower同步通信时限

  集群中Leader与Follower之间的最大响应时间单位,假如响应超过syncLimit * tickTime,Leader认为Follwer死掉,从服务器列表中删除Follwer。

  在运行过程中,Leader负责与ZK集群中所有机器进行通信,例如通过一些心跳检测机制,来检测机器的存活状态。

  如果L发出心跳包在syncLimit之后,还没有从F那收到响应,那么就认为这个F已经不在线了。

  • 4)dataDir:数据文件目录+数据持久化路径

  保存内存数据库快照信息的位置,如果没有其他说明,更新的事务日志也保存到数据库。

  • 5)clientPort=2181:客户端连接端口

  监听客户端连接的端口。

Zookeeper学习笔记一的更多相关文章

  1. ZooKeeper 学习笔记

    ZooKeeper学习笔记 1.   zookeeper基本概念 zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,是hadoop和Habase的重要组件,是为分布式应用提供一致性服 ...

  2. ZooKeeper学习笔记(二)——内部原理

    zookeeper学习笔记(二)--内部原理 1. zookeeper的节点的类型 总的来说可以分为持久型和短暂型,主要区别如下: 持久:客户端与服务器端断开连接的以后,创建的节点不会被删除: 持久化 ...

  3. ZooKeeper学习笔记(一)——概述

    zookeeper学习笔记(一)--概述 1. 概述 Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目.zookeeper从设计模式的角度来理解:是一个基于观察者设计 ...

  4. Zookeeper学习笔记(中)

    Zookeeper学习笔记(中) Zookeeper的基本原理和基本实现 深入了解ZK的基本原理 ZK的一致性: ZAB 协议: Zookeeper 原子消息广播协议 ZK通过选举保证 leader ...

  5. Zookeeper学习笔记(上)

    Zookeeper学习笔记 本篇主要是一些基本的介绍和API的使用介绍, 有些只是记录了知识点,而没有完全在笔记中详细解释, 需要自行查找资料补充相关概念 主要参考了课程中的内容: Zookeeper ...

  6. ZooKeeper学习笔记一:集群搭建

    作者:Grey 原文地址:ZooKeeper学习笔记一:集群搭建 说明 单机版的zk安装和运行参考:https://zookeeper.apache.org/doc/r3.6.3/zookeeperS ...

  7. ZooKeeper学习笔记三:使用ZooKeeper实现一个简单的配置中心

    作者:Grey 原文地址:ZooKeeper学习笔记三:使用ZooKeeper实现一个简单的配置中心 前置知识 完成ZooKeeper集群搭建以及熟悉ZooKeeperAPI基本使用 需求 很多程序往 ...

  8. ZooKeeper学习笔记二:API基本使用

    Grey ZooKeeper学习笔记二:API基本使用 准备工作 搭建一个zk集群,参考ZooKeeper学习笔记一:集群搭建. 确保项目可以访问集群的每个节点 新建一个基于jdk1.8的maven项 ...

  9. ZooKeeper学习笔记四:使用ZooKeeper实现一个简单的分布式锁

    作者:Grey 原文地址: ZooKeeper学习笔记四:使用ZooKeeper实现一个简单的分布式锁 前置知识 完成ZooKeeper集群搭建以及熟悉ZooKeeperAPI基本使用 需求 当多个进 ...

  10. Zookeeper学习笔记(下)

    这是ZK学习笔记的下篇, 主要希望可以分享一些 ZK 的应用以及其应用原理 我本人的学习告一段落, 不过还遗留了一些ZK相关的任务开发和性能测试的任务, 留待以后完成之后再通过其他文章来进行分享了 Z ...

随机推荐

  1. 关于使用kms时遇到的there is nothing to do here

    我讲一下我自己的解决方法 ------------------------------------ 这个错误还是很明显的,没事干,如果不是kms的锅的话,那么就是字面上的问题了 ----------- ...

  2. 【React Native】在网页中打开Android应用程序

    React Native官方提供Linking库用于调起其他app或者本机应用.Linking的主要属性和方法有: 属性与方法 canOpenURL(url); 判断设备上是否有已经安装相应应用或可以 ...

  3. oracle快速创建用户、imp/exp导入导出dmp文件

    1.首先我们可以用管理员用户以sysdba的身份登录oracle sqlplus username/password as sysdba 2.然后我就可以来创建用户了. create user use ...

  4. Dart中类的getter和setter

    Dart类Getters和Setter Getters和Setter(也称为访问器和更改器)允许程序分别初始化和检索类字段的值. 使用get关键字定义getter或访问器.Setter或存取器是使用s ...

  5. 纪中20日c组模拟赛

    赛后感想 多写点东西总是好的,但是在最后,算法就不要改动了(就这样我少了10分) 题解 T1 2121. 简单游戏 T2 2122. 幸运票

  6. 剑指offer-面试题40-最小的k个数-最大堆

    /* 题目: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. */ /* 思路: 利用最大堆,C++中使用multiset& ...

  7. opencv —— imread、namedWindow & imshow、cvtColor、imwrite 加载、显示、修改、保存图像

    加载图像:imread 函数 Mat imread(const string& filename, int flags = 1): filename:需要载入的图像的路径名. flags:加载 ...

  8. wxpython 简单例子:显示文本框的窗口显示鼠标位置

    简单例子来自教程: #!/bin/env python import wx class MyFrame(wx.Frame): def __init__(self): wx.Frame.__init__ ...

  9. 关于FrameLayout中覆盖的问题

    FrameLayout中xml文件中写在下方的控件会默认覆盖上方的控件,如图,我准备实现如下效果: 这时recyclerview就要写在前面 如果recyclerview写在下面就会覆盖掉我linea ...

  10. Console对象与错误处理机制

    console的常见用途有两个. 调试程序,显示网页代码运行时的错误信息. 提供了一个命令行接口,用来与网页代码互动. console对象的浏览器实现,包含在浏览器自带的开发工具之中.按 F12 打开 ...