zoukankan      html  css  js  c++  java
  • 【图文详解】Zookeeper集群搭建(CentOs6.3)

    Zookeeper简介:

    Zookeeper是一个分布式协调服务,就是为用户的分布式应用程序提供协调服务的。

    A、zookeeper是为别的分布式程序服务的

    B、Zookeeper本身就是一个分布式程序(只要有半数以上节点存活,zk就能正常服务)

    C、Zookeeper所提供的服务涵盖:主从协调、服务器节点动态上下线、统一配置管理、分布式共享锁、统一名称服务……

    D、虽然说可以提供各种服务,但是zookeeper在底层其实只提供了两个功能:

    • 管理(存储,读取)用户程序提交的数据;
    • 并为用户程序提供数据节点监听服务;

    Zookeeper集群机制

    • Zookeeper集群的角色: 1个leader 和 多个follower

    • 只要集群中有半数以上节点存活,集群就能提供服务,因此集群中机器数量适合选择奇数台,避免leader选举时出现同票数的情况。

    Zookeeper选举机制

    1. 服务器1启动,此时只有它一台服务器启动了,它发出去的报没有任何响应,所以它的选举状态一直是LOOKING状态
    2. 服务器2启动,它与最开始启动的服务器1进行通信,互相交换自己的选举结果,由于两者都没有历史数据,所以id值较大的服务器2胜出,但是由于没有达到超过半数以上的服务器都同意选举它(这个例子中的半数以上是3),所以服务器1,2还是继续保持LOOKING状态.
    3. 服务器3启动,根据前面的理论分析,服务器3成为服务器1,2,3中的老大,而与上面不同的是,此时有三台服务器选举了它,所以它成为了这次选举的leader.
    4. 服务器4启动,根据前面的分析,理论上服务器4应该是服务器1,2,3,4中最大的,但是由于前面已经有半数以上的服务器选举了服务器3,所以它只能接收当小弟的命了.
    5. 服务器5启动,同4一样,当小弟.

    综上可知:

    • 先后启动集群中3台机器,则机器2为leader
    • 先后启动集群中7台机器,则机器4为leader

    Zookeeper集群搭建

    1、前期准备

    • 3台虚拟机(Linux-----CentOs6.3)

      mini1----192.168.25.13
      
      mini2----192.168.25.14
      
      mini3----192.168.25.15
      
    • 三台虚拟机上分别都装好jdk

    2、上传Zookeeper安装包到mini1上

    3、解压安装包,并将解压后的目录改名为zk放到/usr/local/目录下

    tar -zxvf zookeeper-3.4.6.tar.gz
    mv zookeeper-3.4.6 /usr/local/zk
    

    4、进入zk目录下的conf目录中查看相关配置文件

    cd /usr/local/zk/conf
    

    5、将zoo_sample.cfg拷贝一份并重命名为zoo.cfg

    cp zoo_sample.cfg zoo.cfg
    

    6、 修改配置文件zoo.cfg(基本保持默认,修改图中两处配置即可)

    vim zoo.cfg
    

    • tickTime:基本事件单元,这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,每隔tickTime时间就会发送一个心跳

    • initLimit:此配置表示,允许follower连接并同步到Leader的初始化连接时间,以tickTime为单位。当初始化连接时间超过该值,则表示连接失败。

    • syncLimit:此配置项表示Leader与Follower之间发送消息时,请求和应答时间长度。如果follower在设置时间内不能与leader通信,那么此follower将会被丢弃。

    • dataDir:数据存放的位置

    • dataLogdDir:日志信息存放的位置

    • server.a=b:c:d

       a:集群中此台服务器的编号
      
       B:此台服务器的ip
      
       C:Zookeeper服务器之间的通信端口
      
       D:Leader选举的端口
      

    7、在zk目录下创建data目录

    mkdir /usr/local/zk/data
    

    8、在data目录中创建myid文件,并写入此台服务器的编号(在zoo.cfg配置文件里填写过)

    echo 1 > myid
    

    9、配置环境变量

    vim /etc/profile
    export ZOOKEEPER_HOME=/usr/local/zk
    export PATH=.:$HADOOP_HOME/bin:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin:$PATH
    

    10、将zk目录分别发送给mini2和mini3两台机器

    scp -r /usr/local/zk/ 192.168.25.14:/usr/local/
    scp -r /usr/local/zk/ 192.168.25.15:/usr/local/
    

    11、将环境变量文件分别发送给mini2和mini3两台机器

    scp /etc/profile 192.168.25.14:/etc/
    scp /etc/profile 192.168.25.15:/etc/
    

    12、到mini2机器的/usr/local/目录下可以看到刚传过来的zk目录

    13、到mini2的zk目录下的data目录将myid文件内容改为mini2这台机器的编号(mini3做同样操作)

    cd /usr/local/zk/data/
    echo 2 > myid(mini3的编号为3)
    

    14、分别启动三台机器上的Zookeeper,并查看状态(启动前重新加载环境变量)

    source /etc/profile
    zkServer.sh start
    zkServer.sh status
    

    自此Zookeeper集群搭建结束,我们可以看到mini3是集群中的leader,其他两台是follower,如果你的启动顺序是按顺序启动mini1,mini2,mini3则mini2会是集群中的leader

    集群批量启动,关闭

    批量启动Zookeeper集群
    #!/bin/sh
    
    for i in 192.168.25.13 192.168.25.14 192.168.25.15
    do 
    ssh $i "source /etc/profile;zkServer.sh start"    
    done
    
    批量停止Zookeeper
    #!/bin/sh
    
    for i in 192.168.25.13 192.168.25.14 192.168.25.15
    do 
    ssh $i "source /etc/profile;zkServer.sh stop"    
    done
    

    更多推荐:


  • 相关阅读:
    远程监控基础知识和故障排除
    感慨颇多
    物联网操作系统Hello China移植mile stone之一:移植基础版本V1.76发布
    iOS5系统API和5个开源库的JSON解析速度测试
    (译)iPhone: 用公开API创建带小数点的数字键盘 (OS 3.0, OS 4.0)
    [工具]Mac平台开发几个网络抓包工具(sniffer)
    [工具]Mac下非常好用的快捷终端Dterm
    【IOS】在SDK中打开其他接入应用的解决方案
    [开源]在iOS上实现Android风格的控件Toast
    [技巧]使用Xcode集成的HeaderDoc自动生成注释和开发文档
  • 原文地址:https://www.cnblogs.com/52mm/p/p6.html
Copyright © 2011-2022 走看看