一、Zookeeper概述

一、Zookeeper概述

1、Zookeeper安装
  • 前置条件 : 安装JDK

  • 创建一个 /opt/software 文件目录,将apache-zookeeper-3.5.7-bin.tar.gz 安装包拷贝,并解压

    mkdir /opt/sofrware
    mkdir /opt/module
    tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz -C /opt/module/ # 将zookeeper解压到指定目录
    # 进入到 /opt/zookeeper给文件修改名称
    mv apache-zookeeper-3.5.7-bin/ zookeeper-3.5.7
    
  • 配置修改

    # 1> 将/opt/module/zookeeper-3.5.7/conf 这个路径下的 zoo_sample.cfg 修改为 zoo.cfg
    cd /opt/module/zookeeper-3.5.7/conf/ # 进入到 conf目录下
    mv zoo_sample.cfg zoo.cfg # 将zoo_sample.cfg 修改为 zoo.cfg
    # 2> 打开zoo.cfg文件,修改dataDir路径
    mkdir /opt/module/zookeeper-3.5.7/zkData # 创建 zkData目录
    vim zoo.cfg # 使用vim进入到zoo.cfg文件中
    dataDir=/opt/module/zookeeper-3.5.7/zkData # 修改dataDir 为刚刚创建的zkData目录
    
2、操作Zookeeper
  • 启动Zookeeper

    [root@localhost ~]# cd /opt/module/zookeeper-3.5.7/
    [root@localhost zookeeper-3.5.7]# bin/zkServer.sh start
    
  • 查看进程是否启动

    [root@localhost zookeeper-3.5.7]# jps
    
  • 查看状态

    [root@localhost zookeeper-3.5.7]# bin/zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg
    Client port found: 2181. Client address: localhost.
    Mode: standalone
    
  • 启动客户端

    [root@localhost zookeeper-3.5.7]# bin/zkCli.sh
    
  • 退出客户端

    [zk: localhost:2181(CONNECTED) 0] quit
    
  • 停止Zookeeper服务

    [root@localhost zookeeper-3.5.7]# bin/zkServer.sh stop
    
3、Zookeeper配置解读
  • tickTime=2000 : 通信心跳时间,Zookeeper服务器与客户端心跳时间,单位毫秒
  • initLimit=10 : LF初始通信时限
    • Leader和Follower初始连接时能容忍的最大心跳数(tickTime的数量)
  • syncLimit=5 : LF同步通信时限
    • Leader和Follower之间通信时限,时间如果超过syncLimit*tickTime,Leader会认为Follower死亡,从服务器列表中删除Follower
  • dataDir : 保存 Zookeeper中的数据
    • 默认的是tmp目录,容易被Linux系统定期删除,所以一般不使用tmp目录
  • clientPort=2181 : 客户端连接端口,通常不做修改
4、Zookeeper集群安装
  • 集群规划:打开三台虚拟机,搭建Zookeeper集群至少要三台

  • 1、按照上面安装步骤给每一台虚拟机都安装Zookeeper

  • 2、配置服务器编号

    • 1》在/opt/module/zookeeper-3.5.7/zkData目录下创建myid文件

      vim myid # 文件名必须为myid
      # 创建完成后,在文件中存放当前server对应的编号每个编号都不同 上下左右都不要存在空格
      2
      
    • 2》配置好的Zookeeper同步到其他机器上

      [root@localhost module]# xsync zookeeper-3.5.7 # xsync是自己编写的shell脚本
      
  • 3、配置zoo.cfg文件

    • 1》该文件是之前重命名的zoo_sample.cfg的文件

    • 2》在该文件中添加如下配置

      #######################cluster##########################
      server.2=192.168.17.138:2888:3888
      server.3=192.168.17.139:2888:3888
      server.4=192.168.17.140:2888:3888
      # 若不想使用ip地址填写到该zoo.cfg文件中,也可以在/etc/hosts文件中配置映射端口
      
      • 对上述文件配置的解释

        server.A=B:C:D
        # A : 是一个数组,表示这个是几号服务器,myid文件配置的数值就是A的值,Zookeeper启动的时候会
        # 读取此文件,拿到里面的数据与zoo.cfg里面配置的信息比较从而判断到底是那个server
        # B : 是这个服务器的地址
        # C : 是这个服务器Follower与集群中的Leader服务器交换信息的端口
        # D : 万一集群中的Leader服务器挂了,需要一个端口来重新进行选取,选出一个新的Leader,而这个
        # 端口就是用来执行选举时服务器相互通信的端口
        
    • 3》同步zoo.cfg文件

      [root@localhost conf]# xsync zoo.cfg
      
  • 4、集群操作

    • 分别启动Zookeeper

      [root@localhost zookeeper-3.5.7]# bin/zkServer.sh start # 每个窗口都使用该命令进行启动
      
    • 查看状态

      #################192.168.17.138#################
      [root@localhost zookeeper-3.5.7]# bin/zkServer.sh status
      ZooKeeper JMX enabled by default
      Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg
      Client port found: 2181. Client address: localhost.
      Mode: follower
      #################192.168.17.139#################
      [root@localhost zookeeper-3.5.7]# bin/zkServer.sh status
      ZooKeeper JMX enabled by default
      Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg
      Client port found: 2181. Client address: localhost.
      Mode: follower
      #################192.168.17.140#################
      [root@localhost zookeeper-3.5.7]# bin/zkServer.sh status
      ZooKeeper JMX enabled by default
      Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg
      Client port found: 2181. Client address: localhost.
      Mode: leader
      
    • [注]若出现Zookeeper启动不了的情况,请注意将机器防火墙关闭和检查zoo.cfg文件是否配置错误

      [root@localhost ~]# systemctl stop firewalld.service # 禁用防火墙
      
5、选举机制(假设有五台)
  • 首次启动时的Zookeeper的选举机制
    • 服务器1启动时,发起一次选举,投自己一票,此时服务器1的票数为1,不够半数(3),选举无法完成,服务器1的状态为 LOOKING
    • 服务器2启动时,发起一次选举,服务器1服务器2分别投自己一票,并交换选票信息,此时服务器1发现自己的myid小于服务器2的myid就将自己的选票交给服务器2,此时服务器2有两张选票,不够半数(3),服务器1服务器2的状态都为LOOKING
    • 服务器3启动时,发起一次选举,此时服务器1服务器2服务器3都会比较myid,服务器3的myid大于其他二者,故服务器1服务器2将选票交给服务器3,此时服务器1、服务器2选票都为0,服务器3选票为3,大于等于半数(3),确定服务器3为Leader状态为LEADING其他服务器自动变为FOLLOWING
    • 服务器4启动时,发起一次选举,服务器1、2、3已经不是LOOKING状态,不会更改选票信息,交换选票结果,服务器3有3张选票,服务器4一张选票。此时服务器4将选票交给服务器3,更改自身状态为FOLLOWING状态
    • 服务器5启动时,和服务器4一样的过程和一样的结果
  • 非首次启动时Zookeeper的选举机制
    一、Zookeeper概述_第1张图片
6、Zookeeper集群启动、停止脚本
  • 1、在用户家目录的bin目录下,创建脚本

    [root@localhost bin]# vim zk.sh
    
  • 2、编写shell脚本

    #!/bin/bash
    case $1 in
    "start"){
    for i in 192.168.17.138 192.168.17.139 192.168.17.140
    do
     echo ---------- zookeeper $i 启动 ------------
    ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh 
    start"
    done
    };;
    "stop"){
    for i in 192.168.17.138 192.168.17.139 192.168.17.140
    do
     echo ---------- zookeeper $i 停止 ------------ 
    ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh 
    stop"
    done
    };;
    "status"){
    for i in 192.168.17.138 192.168.17.139 192.168.17.140
    do
     echo ---------- zookeeper $i 状态 ------------ 
    ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh 
    status"
    done
    };;
    esac
    
  • 3、增加脚本可以执行的权限

    [root@localhost bin]# chmod u+x zk.sh
    
  • 4、测试脚本运行

    [root@localhost module]# zk.sh start # 启动Zookeeper集群
    [root@localhost module]# zk.sh stop  # 停止Zookeeper集群
    

你可能感兴趣的:(Zookeeper,zookeeper,分布式)