【大数据技术】2.协调服务zookeeper

本文主要按以下六个部分进行描述:
一、概念与作用
二、数据模型与特征
三、角色
四、工作原理
五、选举机制
六、zookeeper实战操作(shell命令与API)

一、概念与作用

zookeeper主要是为分布式应用提供一致性服务
主要提供:维护配置信息、名字服务、分布式同步、组服务
其结构类似于文件系统,但没有文件和目录
节点名znode,保存数据的容器,限定在1M内

二、数据模型与特征

1.唯一路径表示,节点标识:/APP1/SERVER1,拥有一个层次的命名空间
2.节点里的数据可以有多个版本
3.可以有临时节点,session失效就自动删除,一般是保持长连接的方式,通过心跳机制保持连接。
4.可以自动编号。
5.也可以被监控。

三、角色

领导者
跟随者
观察者

四、工作原理

通过zab协议进行沟通,有两种工作模式:恢复模式与广播模式
1.领导者与跟随者正常状态下,使用广播模式进行节点同步,节点同步按zxid顺序执行,zxid为64位,高32位是epoch标识,表示leader关系是否改变,每次改变都会有个新epoch,低32位是个递增计数。
2.有服务启动状态或领导者崩溃状态,进入恢复模式,需要zookeeper根据选举机制进行投票,选出leader

五、选举机制

假设有3台服务器,每台服务器均没有数据,它们的编号分别是1,2,3,按编号依次启动,它们的选举过程如下:

每个Server发出一个投票。由于是初始情况,Server1和Server2都会将自己作为Leader服务器来进行投票,每次投票会包含所推举的服务器的myid和ZXID,使用(myid, ZXID)来表示,此时Server1的投票为(1, 0),Server2的投票为(2, 0),然后各自将这个投票发给集群中其他机器。
**服务器启动时的选举:**
    1.服务器1启动,给自己投票,然后发投票信息,由于其它机器还没有启动所以它收不到反馈信息,服务器1的状态一直属于Looking状态。
    2.服务器2启动,给自己投票,同时与之前启动的服务器1相互通信,开始进入竞争模式,Server1和Server2都会将自己作为Leader服务器来进行投票,每次投票会包含所推举的服务器的myid和ZXID,使用(myid, ZXID)来表示,由于ZXID表示上一次处理事务的id,刚启动的表示0,此时Server1的投票为(1, 0),Server2的投票为(2, 0),然后各自将这个投票发给集群中其他机器。
    3.集群的每个服务器收到投票后,首先判断该投票的有效性,如检查是否是本轮投票、是否来自LOOKING状态的服务器。
    **4.服务器PK,首先比较ZXID,如果ZXID相同再比较myid,比较后发现server2的myid较大,于是刷新server1的投票为(2,0),**
    5.计算票数,由于server2的票数过半,因此server2是领导者,server1是跟随者。
    **zookeeper运行期间的选举:**
    在Zookeeper运行期间,Leader与非Leader服务器各司其职,即便当有非Leader服务器宕机或新加入,此时也不会影响Leader,但是一旦Leader服务器挂了,那么整个集群将暂停对外服务,进入新一轮Leader选举,其过程和启动时期的Leader选举过程基本一致。
    1.服务器3启动加入,默认是跟随者,但是若服务器2宕机,就要重新进入选举模式。
    2.首先所有服务器进入LOOKING状态,服务器3给自己投票,同时与之前启动的服务器1交换信息,同样服务器1也一样,那么服务器1的投票为(1,2),服务器3的投票为(3,2),根据以上步骤,由于服务器3的编号最大所以服务器3胜出,所以服务器3成为领导者,服务器1成为小弟。
    那么如何加入服务器4,5,都是小弟。
注意:以上是我对zookeeper选举机制的理解,欢迎大家指正。

六、zookeeper实战操作(shell命令与API)

 zookeeper配置与启动

1.先解压zookeeper压缩文件, tar -zvxf /压缩文件地址

2.在zookeeper目录下创建文件夹mkdir data_single,并建立myid 输入值为1  命令:echo 1 >>myid

3.依次再去别的namenode的zookeeper目录下创建文件夹,以及myid文件,假如创建了2个,输入值为2,3,表示有三个集群

4.修改zookeeper目录的conf下zoo_sample.cfg文件,并改名zoo.cfg,修改该文件

5.设置集群参数,比如

server.1=192.168.213.10:2222:2223

server.2=192.168.213.11:2222:2223

server.3=192.168.213.10:2222:2223

格式server.myid=服务器ip:端口号1:端口号2

端口号1:用于F和L之间的数据同步和其它通信

端口号2:用于Leader选举过程中投票通信

6.启动服务,bin目录下执行,./zkServer.sh start (可加配置文件名 如zoo.cfg)

7.创建会话

可通过bin/zkCli.sh -timeout 5000 -server 192.168.213.11:2181 命令连接zk的服务

即创建会话,每次读操作会创建一个一次性触发器watch

根据集群的高可用性,一般hbase会依赖zookeeper  hbase会用到hdfs依赖Hadoop  因此

启动顺序:Hadoop->zookeeper->hbase

关闭顺序:hbase->zookeeper->Hadoop

随后就可以通过shell命令或java程序连接服务端,实现节点的增删改查了。

比如命令

create /zk “test”   ,

get /zk ,

set /zk "zzzz",

delete "zk" ,

个人觉得这些节点操作可检查zookeeper集群是否同步问题。

以上是个人的理解,欢迎批评指正,谢谢!

猜你喜欢

转载自blog.csdn.net/chufangcheng/article/details/84254281
今日推荐