zookeeper里kafka信息_HDFS

 

Zookeeper

Zookeeper是什么

-zookeeper是一个开源的分布式应用程序协调服务

Zookeeper能做什么

-Zookeeper是用来保证数据在集群间的事务一致性

 

死锁:A程序抢到了X资源,B抢到了Y资源,但是AB都需要XY资源才能往下处理,否则不会释放资源,抢到的资源也不会给别人用,就会造成死锁

 

zookeeper里kafka信息_zookeeper里kafka信息_02

单机的解决办法

zookeeper里kafka信息_HDFS_03

 

Zookeeper应用场景

-集群分布式锁

-集群统一命名服务

-分布式协调服务

 

角色与特性

Zookeeper角色与特性

-Leader:接受所有Follower的提案请求并统一协调发起提案的投票,负责与所有的Follower进行内部数据交换

-Follower:直接为客户端服务并参与提案的投票,同时与Leader进行数据交换

-Observer:直接为客户端服务单不参与提案的投票,同时也与Leader进行数据交换

 

角色与选举

Zookeeper角色与选举

-服务在启动的时候是没有角色的(LOOKING)

-角色是通过选举产生的

-选举产生一个Leader,剩下的是Follower

选举Leader原则

-集群中超过半数机器投票选择Leader

-假如集群中拥有n台服务器,那么Leader必须得到n+1/2台服务器的投票

 

Zookeeper角色与选举

-如果Leader死亡,重新选举Leader

-如果死亡的机器数量达到一半,则集群挂掉

-如果无法得到足够的投票数量,就重新发起投票,如果参与投票的机器不足n/2+1,则集群停止工作

-如果Follower死亡过多,剩余机器不足n+1/2,则集群也会停止工作

-Oberserver不计算在投票总设备数量里面

 

Zookeeper原理与设计

Zookeeper可伸缩扩展性原理与设计

-Leader所有写相关操作

-Follower写操作与响应Leader提议

-在Observer出现以前,Zookeeper的伸缩性由Follower来实现,我们通过添加Follower节点的数量来保证Zookeeper服务的读性能,但是随着Follower节点数量的增加,Zookeeper服务的写性能收到了影响(写操作要通过Follower同意)

 

Zookeeper可伸缩扩展性原与设计

-客户点提交一个请求,若是读请求,则由每台Server的本地副本数据库直接响应。若是写请求,需要通过一致性协议(Zab)来处理

-Zab协议规定:来自Client的所有写请求都要转发给ZK服务中唯一的Leader,由Leader根据该请求发起一个提议(Proposal)。然后其他的Server对该提议(Proposal)进行投票(Vote)。之后Leader对Vote进行收集,当Vote数量过半时Leader会向所有的Server发送一个通知消息。最后当Client所连接的Server收到该消息时,会把该操作更新到内存中并对Client的写请求作出回应

zookeeper里kafka信息_zookeeper里kafka信息_04

 

zookeeper里kafka信息_Server_05

zookeeper里kafka信息_HDFS_06

zookeeper里kafka信息_HDFS_07

 

Zookeeper集群的安装配置

zookeeper里kafka信息_Server_08

zookeeper里kafka信息_Server_09

zookeeper里kafka信息_zookeeper里kafka信息_10

 

zookeeper官方手册

管理员命令 四个字母:

http://zookeeper.apache.org/doc/r3.4.13/zookeeperAdmin.html#sc_zkCommands

 

案例

zookeeper里kafka信息_高可用_11

 

zookeeper里kafka信息_zookeeper里kafka信息_12

 

什么是Kafka

Kafka是什么

-Kafka是有LinkedIn开发的一个分布式的消息系统

-Kafka是使用Scala编写

-Kafka是一种消息中间件

为什么要使用Kafka

-解耦、冗余、提高扩展性、缓冲

解耦:类似卖房的人中介和买房人,有了中介,卖房可以不和买房人见面,处理问题靠中介

-保证顺序,灵活,削峰填谷

-异步通信

 

比如:爽11限时抢购时,可能会在短短几分钟内访问量请求量达到一个巨大的高峰,Kafka可以让同时请求数据分摊到几分钟或更多

 

Kafka角色

Kafka角色与集群结构

-producer:生产者,负责发布消息

-consumer:消费者,负责读取处理消息

-topic:消息的类别

-Parition:每个Topic包含一个或多个Partition

-Broker:Kafka集群包含一个或多个服务器

 

Kafka通过Zookeeper管理集群配置,选举Leader

 

Kafka集群安装与配置

zookeeper里kafka信息_zookeeper里kafka信息_13

 

zookeeper里kafka信息_zookeeper里kafka信息_14

zookeeper里kafka信息_HDFS_15

zookeeper里kafka信息_高可用_16

zookeeper里kafka信息_HDFS_17

案例

zookeeper里kafka信息_HDFS_18

 

 

zookeeper里kafka信息_zookeeper里kafka信息_19

 

为什么需要NameNode

原因

-NameNode是HDFS的核心配置,HDFS又是Hadoop核心组件,NmaeNode在Hadoop集群中至关重要

-NameNode宕机,到时集群不可用,如果NameNode数据丢失将导致整个集群的数据丢失,而NameNode数据丢失将导致整个集群的数据丢失,而NameNode的数据的更新又比较频繁,实现NameNode高可用势在必行

 

解决方案

官方提供了两种解决方案

-HDFS with NFS

-HDFS with QJM

两种方式异同

zookeeper里kafka信息_zookeeper里kafka信息_20

 

HA方案对比

-都能实现热备

-都是一个Active NN和一个Standby NN

-都是用Zookeeper和ZKFC来实现自动失效恢复

-失效切换都是用Fencin配置的方法来Active NN

-NFS数据共享变更方案吧数据存储在共享存储里,我们还需要考虑NFS的高可用设计

-QJM不需要共享存储,但需要让每一个DN都知道两个NN的位置,并把块信息和心跳包发送个Active和Standby这两个NN

 

使用方案

使用原因(QJM)

-解决NameNode单点故障问题

-Hadoop给出了HDFS的高可用HA方案:HDFS通常由于两个NameNode组成,一个处于Active状态,另一个处于Standby状态。Active NameNode对外提供服务,比如处理来自客户端的RPC请求,而Standby NameNode则不对外提供服务,仅同步Active NameNote的状态,以便能够在他失败时进行切换

 

典型的HA集群

-NameNode会被配置在两台独立的机器上,在任何时候,一个NameNode处于活动状态,而另一个NameNode则处于备份状态

-活动状态的NameNode会响应集群中所有的客户端,备份状态的NameNode只是作为一个副本,保证在必要的时候提供一个快速的转移

 

NameNode高可用

NameNode高可用架构

-为了让Standby Node与Active Node保持同步,这两个Note都与一组称为JNS的互相独立的进程保持通信(Journal Nodes)。当Active Node更新了namespace,他将记录修改日志发送个JNS的多数派,Standby Node将会从JNS中读取这些edits,并持续关注他们对日志的变更

-Standby Node将日志变更应用在自己的namespace中,当Failover发生时,Standby将会在提升自己为Active之前,确保能够从JNS中读取所有的edits,即在Failover发生之前Standy持有的namespace与Active保持完全同步。NameNode更新很频繁,为了保持主备数据的一致性,为了支持快速Failover,Standby Node持有集群中blocks的最新位置是非常必要的,为了达到这个目的,DataNodes上需要同时配置这两个Namenode的地址,同时和他们都简历心跳连接,并把block位置发送给他们

zookeeper里kafka信息_Server_21

 

NameNode高可用架构图

zookeeper里kafka信息_zookeeper里kafka信息_22

系统规划

zookeeper里kafka信息_高可用_23

 

hadoop中的

zookeeper里kafka信息_zookeeper里kafka信息_24

zookeeper里kafka信息_Server_25

zookeeper里kafka信息_高可用_26

zookeeper里kafka信息_zookeeper里kafka信息_27

zookeeper里kafka信息_Server_28

zookeeper里kafka信息_Server_29

zookeeper里kafka信息_zookeeper里kafka信息_30

zookeeper里kafka信息_HDFS_31

zookeeper里kafka信息_高可用_32

 

案例

zookeeper里kafka信息_zookeeper里kafka信息_33

 

高可用验证

zookeeper里kafka信息_Server_34

zookeeper里kafka信息_zookeeper里kafka信息_35

zookeeper里kafka信息_高可用_36

zookeeper里kafka信息_zookeeper里kafka信息_37

案例

zookeeper里kafka信息_HDFS_38