zookeeper
• zookeeper 是什么?
– ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务
• ZooKeeper能干什么哪?
– ZooKeeper是用来保证数据在集群间的事务性一致

• zookeeper 应用场景
– 集群分布式锁
– 集群统一命名服务
– 分布式协调服务

• zookeeper 角色与特性
– Leader:
– 接受所有Follower的提案请求并统一协调发起提案的投票,负责与所有的Follower进行内部的数据交换
– Follower:
– 直接为客户端服务并参与提案的投票,同时与Leader进行数据交换
– Observer:
– 直接为客户端服务但并不参与提案的投票,同时也与Leader进行数据交换

• zookeeper 角色与选举
– 服务在启动的时候是没有角色的 (LOOKING)
– 角色是通过选举产生的
– 选举产生一个 leader,剩下的是 follower
– 选丼 leader 原则:
– 集群中超过半数机器投票选择leader.
– 假如集群中拥有n台服务器,那么leader必须得到n/2+1台服务器投票

• zookeeper 角色与选举
– 如果 leader 死亡,从新选举 leader
– 如果死亡的机器数量达到一半,集群挂起
– 如果无法得到足够的投票数量,就重新发起投票,如果参与投票的机器不足 n/2+1 集群停止工作
– 如果 follower 死亡过多,剩余机器不足 n/2+1 集群也会停止工作
– observer 不计算在投票总设备数量里面

• zookeeper 可伸缩扩展性原理与设计
– leader 所有写相关操作
– follower 读操作不响应leader提议
– 在Observer出现以前,ZooKeeper的伸缩性由Follower来实现,我们可以通过添加Follower节点的
数量来保证ZooKeeper服务的读性能。但是随着Follower节点数量的增加,ZooKeeper服务的写性
能受到了影响。为什么会出现这种情况?在此,我们需要首先了解一下这个"ZK服务"是如何工作的。

• zookeeper 可伸缩扩展性原理与设计
– 客户端提交一个请求,若是读请求,则由每台Server的本地副本数据库直接响应。若是写请求,
需要通过一致性协议(Zab)来处理
– Zab协议规定:来自Client的所有写请求,都要转发给ZK服务中唯一的Leader,由Leader根据该
请求发起一个Proposal。然后,其他的Server对该Proposal进行Vote。之后,Leader对Vote进行收集,
当Vote数量过半时Leader会向所有的Server发送一个通知消息。最后,当Client所连接的Server收到
该消息时,会把该操作更新到内存中并对Client的写请求做出回应

– ZooKeeper 服务器在上述协议中实际扮演了两个职能。它们一方面从客户端接受连接不操作请求,
另一方面对操作结果进行投票。这两个职能在 ZooKeeper集群扩展的时候彼此制约
– 从Zab协议对写请求的处理过程中我们可以发现,增加follower的数量,则增加了对协议中投票过程的压力。
因为Leader节点必须等待集群中过半Server响应投票,于是节点的增加使得部分计算机运行较慢,从而拖慢
整个投票过程的可能性也随之提高,随着集群变大,写操作也会随之下降

– 所以,我们不得不,在增加Client数量的期望和我们希望保持较好吞吐性能的期望间进行权衡。
要打破这一耦合关系,我们引入了不参与投票的服务器,称为Observer。 Observer可以接受客户端 
的连接,并将写请求转发给Leader节点。但是,Leader节点不会要求 Observer参加投票。相反,
Observer不参与投票过程,仅仅在上述第3歩那样,和其他服务节点一起得到投票结果

– Observer的扩展,给 ZooKeeper 的可伸缩性带来了全新的景象。我们现在可以加入很多 Observer 节点,
而无须担心严重影响写吞吐量。但他并非是无懈可击的,因为协议中的通知阶段,仍然与服务器的数量呈
线性关系。但是,这里的串行开销非常低。因此,我们可以认为在通知服务器阶段的开销不会成为瓶颈
– Observer提升读性能的可伸缩性
– Observer提供了广域网能力

zookeeper 工作模式

zookeeper 安装
1 、配置 /etc/hosts ,所有集群主机可以相互 ping 通
2、安装java 环境 
yum  -y  install  java-1.8.0-openjdk-devel 
3、 zookeeper 解压拷贝到 /usr/local/zookeeper
tar  -xf  zookeeper-3.4.10.tar.gz -C .

mv  zookeeper-3.4.10   /usr/local/zookeeper
4、配置文件改名,并在最后添加配置
mv zoo_sample.cfg  zoo.cfg
vim     zoo.cfg      最后添加配置
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
server.4=nn01:2888:3888:observer

5、拷贝zoo.cfg 到集群其他节点
for  i  in  {11..13} ;do scp  /usr/local/zookeeper/conf/zoo.cfg  192.168.1.$i:/usr/local/zookeeper/conf/
6、 拷贝 /usr/local/zookeeper 到其他集群主机
for  i  in  {11..13} ;do scp  -r  /usr/local/zookeeper  192.168.1.10:/usr/local/zookeeper  ; done
7、 所有节点创建 mkdir /tmp/zookeeper
mkdir  /tmp/zookeeper
ssh  node1 mkdir  /tmp/zookeeper
ssh  node2 mkdir  /tmp/zookeeper
ssh  node3 mkdir  /tmp/zookeeper
8、 创建 myid 文件,id 必须与配置文件里主机名对应的 server.(id) 一致 echo 1 >/tmp/zookeeper/myid

echo  4  >  /tmp/zookeeper/myid
ssh  node1  'echo  1  >  /tmp/zookeeper/myid'
ssh  node2  'echo  2  >  /tmp/zookeeper/myid'
ssh  node3  'echo  3  >  /tmp/zookeeper/myid'

关于myid文件:
– myid文件中只有一个数字
– 注意,请确保每个server的myid文件中id数字丌同
– server.id 中的 id 不 myid 中的 id 必须一致
– id的范围是1~255

9 、启动服务,单启动一台无法查看状态,需要启动全部集群以后才能查看状态
/usr/local/zookeeper/bin/zkServer.sh start
10、 查看状态
/usr/local/zookeeper/bin/zkServer.sh status

11、利用 api 查看状态的脚本
 
#!/bin/bash
function getstatus(){exec 9<>/dev/tcp/$1/2181 2>/dev/nullecho stat >&9MODE=$(cat <&9 |grep -Po "(?<=Mode:).*")exec 9<&-echo ${MODE:-NULL}
}
for i in node{1..3} nn01;doecho -ne "${i}\t"getstatus ${i}
done

  

转载于:https://www.cnblogs.com/zzc-log/p/9591335.html

zookeeper原理及搭建相关推荐

  1. ELK+Filebeat+zookeeper+Kafka原理和搭建

    目录 引言 一.ZooKeeper介绍 二.Kafka介绍 2.1.为什么需要消息队列(MQ) 2.2.消息队列的好处 解耦合 异步处理 流量削峰 2.3.Kafka的特性 2.4.Kafka作为存储 ...

  2. Hadoop集群高可用及zookeeper+kafka组件搭建

    目录 一.Hadoop集群高可用 1.Zookeeper概述 1)Zookeeper基本概述 3)Zab协议 3)observer 4)zookeeper集群图例 2.zookeeper集群搭建 3. ...

  3. Kafka学习之(五)搭建kafka集群之Zookeeper集群搭建

    Zookeeper是一种在分布式系统中被广泛用来作为:分布式状态管理.分布式协调管理.分布式配置管理.和分布式锁服务的集群.kafka增加和减少服务器都会在Zookeeper节点上触发相应的事件kaf ...

  4. zookeeper原理:分布式协同技术

    zookeeper原理:分布式协同技术 有必要来重新巩固zookeeper思想了. Zookeeper到底是什么!? 学一个东西,不搞明白他是什么东西,哪还有心情学啊!!  首先,Zookeeper是 ...

  5. Zookeeper原理及实战开发-余强-专题视频课程

    Zookeeper原理及实战开发-77788人已学习 课程介绍         hadoop大数据 zookeeper原理及实战开发的一个课程内容. 学习此课程 开发理解任何分布式应用程序的话应该都是 ...

  6. Hadoop详解(五)——ZooKeeper详解,ZooKeeper伪分布搭建和集群搭建,Hadoop集群搭建,sqoop工具的使用

    ZooKeeper简介 什么是ZooKeeper? ZooKeeper是Google的Chubby一个开源的实现,是Hadoop分布式协调服务. 它包含了一个简单的原语集,分布式应用程序可以基于它实现 ...

  7. Zookeeper命令操作(初始Zookeeper、JavaAPI操作、分布式锁实现、模拟12306售票分布式锁、Zookeeper集群搭建、选举投票)

    Zookeeper命令操作(初始Zookeeper.JavaAPI操作.分布式锁实现.模拟12306售票分布式锁.Zookeeper集群搭建.选举投票) 1.初始Zookeeper Zookeeper ...

  8. ZooKeeper 原理及其在 Hadoop 和 HBase 中的应用

    ZooKeeper 原理及其在 Hadoop 和 HBase 中的应用 - 文章 - 伯乐在线 /* # The number of milliseconds of each tick tickTim ...

  9. 2021年大数据ZooKeeper(二):ZooKeeper集群搭建

    目录 ZooKeeper集群搭建 第一步:下载zookeeeper的压缩包,下载网址如下 第二步:解压 第三步:修改配置文件 第四步:添加myid配置 ​​​​​​​第五步:安装包分发并修改myid的 ...

  10. 单台主机 kafka + zookeeper 集群搭建

    文章转自: https://www.jianshu.com/p/dc4770fc34b6 在单台主机上搭建kafka + zookeeper 集群. zookeeper 集群搭建 kafka是通过zo ...

最新文章

  1. 实用目标检测器 | 性能超YoloV5,推理耗时不变(附github源码)
  2. 小清新简约风个人简历PPT模板
  3. python 模板匹配多个物体
  4. 关于21年电赛,这些一定要熟悉!
  5. linux软件安装管理
  6. 详解MathType中如何插入特殊符号
  7. PC-用Windows XP自带的组策略加固操作系统
  8. 2019 年互联网人才招聘报告:Java 吃香,算法工程师紧缺,今日头条崛起!
  9. TCP SYN-Cookie背后的人和事
  10. c语言mergesort 参数,求教关于归并排序MergeSort()的问题
  11. 寒假每日一题——拖拉机
  12. SAS系统学习之初探
  13. iPhoneXR为最畅销iPhone难解外界对苹果的担忧
  14. Kryo的基本简单使用
  15. 注解/Annotation
  16. 吸引力法则和《秘密》的理论其实不存在
  17. 小白教你制作3D旋转相册
  18. Python数据分析第三期--简述Pandas
  19. 字节、字、位、比特的关系
  20. 外交部发言人与BBC恳谈绿坝和娃

热门文章

  1. imos 学习笔记四 录像 c#
  2. C# .net中获取台式电脑中串口设备的名称
  3. IBM的ITIL管理解决方案
  4. python源码中的学习笔记_第7章_字符串
  5. 【Pre-Training】超细节的 BERT/Transformer 知识点
  6. 【干货】神经网络初始化trick:大神何凯明教你如何训练网络!
  7. 逼疯一个程序员有多简单?
  8. 内容范围:正态分布,泊松分布,多项分布,二项分布,伯努利分布
  9. 机器学习算法基础3-sklearn数据集与估计器
  10. 常用Linux命令(持续更新)