1.zk的作用
分布协调服务,解决分布式服务在工作时产生的问题
1)竞态条件 //多个主机同时对一个文件进行操作,俗称抢资源
2)死锁: //多个主机互相等待对方完成
3)不一致性: //资源文件丢失或者主机宕机
2.zk在hadoop中
hadoop的namenode的高可用及自动容灾,也就是在多namenode 情况下,对namenode 管理节点的active以及standby,具体是:
在zk启动的情况下再启动hadoop的hdfs文件系统时,zk会根据自身的领袖推选机制,建立一个active的namenode,此时该namenode节点的active存放在ActiveStandbyElectorLock结点(zk的结点存储位置),它是临时结点,也就是负责存储active状态下的节点地址.而zk中的另一个节点ActiveBreadCrumb是永久结点,它存储的active的节点信息,当zk会话关闭或者中断时,再次启动,通过领袖推选机制获取的actice节点首先会与永久节点储存的信息做比较,如果此时的推选出来的active与永久结点上的信息一样,则不做任何操作,如果信息不一样,zk会首先将之前永久结点上存储的namenode的状态改为standby,然后再去修改新的active的节点信息,以完成正确分配active节点,避免脑裂(brain-split),即两个active节点状态的问题
3.zk负责的读写操作
读服务:所有连接节点的请求,zk节点都可以提供读服务(包括follower和leader),读请求可以越过leader直接读取follower节点的信息
写操作:需要先通过leader节点,leader同意之后,可以向指定节点写入
4.zk的领袖推选机制
以三个节点为例 102 103 104 三个节点 ,初始状态为looking状态 启动的时候,假如首先启动102,此时,102 首先广播自己是leader到103,104,此时的103,104的状态也是looking待定的状态,等到103上的zk启动时,103开始通过自己与102 比较,发现自己比102 大,它也进行广播,103是leader,102收到信息后,发现确实是不如103它,它此时承认103的领导地位,等到104 启动的时候,102节点和103 节点超过半数的节点认为103以及是领导了,104选择跟随,也就承认了103的leader地位.