暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Zookeeper分布式协调服务

小甜菜Pro 2021-01-16
227

上一期我们介绍了Hadoop集群的基础知识以及搭建流程,那么下面我就来介绍一下Hadoop生态中的一个重要组件-分布式协调服务Zookeeper。


一、ZooKeeper介绍

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

ZooKeeper包含一个简单的原语集, 提供Java和C的接口。ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在${ZOOKEEPER}\src\recipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本。[1]


二、ZooKeeper特性

  1. 顺序一致性:客户端的更新顺序与他们被发送的顺序相一致;

  2. 原子性:更新操作要么全部成功,要么全部失败;

  3. 单一试图:无论客户端连接到哪一个服务器,都可以看到相同的ZooKeeper视图;

  4. 可靠性:一旦一个更新操作被应用,那么在客户端再次更新它之前,其值将不会被改变;

  5. 实时性:在特定的一段时间内系统的任何变更都将被客户端检测到。[2]


三、ZooKeeper原理

ZooKeeper是以Fast Paxos算法为基础的,Paxos 算法存在活锁的问题,即当有多个proposer交错提交时,有可能互相排斥导致没有一个proposer能提交成功,而Fast Paxos作了一些优化,通过选举产生一个leader (领导者),只有leader才能提交proposer,具体算法可查阅Fast Paxos算法。

ZooKeeper的基本运转流程:
1. 选举Leader。
2. 同步数据。
3. 选举Leader过程中算法有很多,但要达到的选举标准是一致的。
4. Leader要具有最高的执行ID,类似root权限。
5. 集群中大多数的机器得到响应并接受选出的Leader。[1]


四、ZooKeeper部署

首先要准备3台主机,分别为master、slave1和slave2(若没有准备请在公众号后台回复关键词 搭建前的准备 获得图文教程),以下是Zookeeper详细部署步骤。

以下操作步骤都在master主机上执行

使用Xftp软件将apache-zookeeper-3.5.9-bin.tar.gz安装包上传到 ~/software/ 路径下,然后进行解
    tar -zxvf ~/software/apache-zookeeper-3.5.9-bin.tar.gz -C ~/servers/

    重命名
      $ mv ~/servers/apache-zookeeper-3.5.9-bin/ ~/servers/zookeeper


      修改环境变量
        $ vim ~/.bashrc


        文件末尾添加以下内容

          export ZOOKEEPER_HOME=~/servers/zookeeper
          export PATH=$PATH:$ZOOKEEPER_HOME/bin

          使环境变量生效
            $ source ~/.bashrc

            进入zookeeper的配置目录
              $ cd ~/servers/zookeeper/conf/

              修改zoo.cfg文件
                $ cp ./zoo_sample.cfg ./zoo.cfg
                $ vim ./zoo.cfg

                这个文件要修改两个地方:1. 修改dataDir
                  dataDir=/home/hadoop/servers/data/zookeeper


                  2. 在文件末尾添加以下代码
                    server.1=master:2888:3888
                    server.2=slave1:2888:3888
                    server.3=slave2:2888:3888

                    创建myid文件
                      mkdir -p ~/servers/data/zookeeper
                      $ echo 1 > ~/servers/data/zookeeper/myid
                      $ ssh slave1 "mkdir -p ~/servers/data/zookeeper"
                      $ ssh slave1 "echo 2 > ~/servers/data/zookeeper/myid"
                      $ ssh slave2 "mkdir -p ~/servers/data/zookeeper"
                      $ ssh slave2 "echo 3 > ~/servers/data/zookeeper/myid"

                      文件分发
                        $ scp ~/.bashrc slave1:~
                        $ scp ~/.bashrc slave2:~
                        $ scp -r ~/servers/zookeeper slave1:~/servers/
                        $ scp -r ~/servers/zookeeper slave2:~/servers/

                        使系统环境变量生效(在slave1和slave2上执行
                          $ source ~/.bashrc

                          zookeeper的启动、查看角色和关闭(在所有节点上执行
                            $ zkServer.sh start # 启动
                            $ zkServer.sh status # 查看角色
                            $ zkServer.sh stop # 关闭

                            回复关键词zookeeper获得软件,最后别忘了关注一下公众号哦



                            参考:

                            [1] https://blog.csdn.net/mahoking/article/details/81915050
                            [2] https://www.hollischuang.com/archives/1275

                            编辑:蔡猛


                            声明:

                            1.本文为 @caimeng99526 创文章转载请附上原文出处链接。

                            2.本文中所转载文章及部分图片均来自公开网络,仅供学习交流使用,不会用于任何商业用途。

                            3.如果出处标注有误或侵犯到原著作者权益,请联系 @caimeng99526 删除,谢谢。

                            4.转载本公众号中的文章请注明原文链接和作者,否则产生的任何版权纠纷均与本公众号无关。


                            文章转载自小甜菜Pro,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                            评论