• Zookeeper安装使用


    简介

      ZooKeeper 是一个高可用的分布式数据管理系统协调框架。基于对 Paxos 算法的实现,使该框架保证了分布式环境中数据的强一致性,也正是基于这样的特性,使得 ZooKeeper 解决很多分布式问题。
      Zookeeper 保证了CP(数据一致性和分区容错性)
      当向注册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟以前的注册信息,但不能接受服务直接down掉不可用。也就是说,服务注册功能对可用性的要求要高于一致性。但是zk会出现这样一种情况,当master节点因为网络故障与其他节点失去联系时,剩余节点会重新进行leader选举。问题在于,选举leader的时间太长,30 ~ 120s, 且选举期间整个zk集群都是不可用的,这就导致在选举期间注册服务瘫痪。在云部署的环境下,因网络问题使得zk集群失去master节点是较大概率会发生的事,虽然服务能够最终恢复,但是漫长的选举时间导致的注册长期不可用是不能容忍的。
      ZooKeeper 集群中的所有机器通过一个 Leader 选举过程来选定一台称为 “Leader” 的机器,Leader 既可以为客户端提供写服务又能提供读服务。除了 Leader 外,Follower 和 Observer 都只能提供读服务,Follower 和 Observer 唯一的区别在于 Observer 机器不参与 Leader 的选举过程,也不参与写操作的“过半写成功”策略,因此 Observer 机器可以在不影响写性能的情况下提升集群的读性能。
      当 Leader 服务器出现网络中断、崩溃退出与重启等异常情况时,ZAB 协议就会进人恢复模式并选举产生新的Leader服务器。这个过程大致是这样的:
      Leader election(选举阶段):节点在一开始都处于选举阶段,只要有一个节点得到超半数节点的票数,它就可以当选准 leader。
      Discovery(发现阶段):在这个阶段,followers 跟准 leader 进行通信,同步 followers 最近接收的事务提议。
      Synchronization(同步阶段):同步阶段主要是利用 leader 前一阶段获得的最新提议历史,同步集群中所有的副本。同步完成之后 准 leader 才会成为真正的 leader。
      Broadcast(广播阶段): 到了这个阶段,Zookeeper 集群才能正式对外提供事务服务,并且 leader 可以进行消息广播。同时如果有新的节点加入,还需要对新节点进行同步。

    Zookeeper单机版安装步骤

    1.上传zookeeper 安装包到linux中/usr/local/temp 中(目录随意,对安装无影响)
    2.解压zookeeper压缩包(tar zxvf 安装包)以3.4.8.版本为例

    tar zxvf /usr/local/temp/zookeeper-3.4.8.tar.gz
    

    3.复制zookeeper解压后的文件夹到/usr/local下并起名为zookpper(复制后名称任意,对安装无影响)

     cp -r /usr/local/temp/zookeeper-3.4.8  /usr/local/zookeeper
    

    4.进入到zookeeper文件夹中

    cd /usr/local/zookeeper
    

    5.在zookeeper中新建data文件夹,做为zookeeper数据存储文件夹

    mkdir data
    

    6.进入到conf文件夹

    cd conf
    

    7.复制zoo_sample.cfg,并给新起名的zoo.cfg

    cp zoo_sample.cfg zoo.cfg
    

    8.修改zoo.cfg中dataDir属性值为新建data文件夹的路径

    vim zoo.cfg
    

    修改后:
    在这里插入图片描述
    9.进入到zookeeper/bin文件夹,使用zkServer.sh启动zookeeper

     cd ../bin
     ./zkServer.sh start
    

    启动成功效果图
    在这里插入图片描述
    10.查看状态,其中Mode: standalone表示单机版

    ./zkServer.sh status
    

    在这里插入图片描述
    11. 为了外部能访问,需要在防火墙中放行2181端口


    Zookeeper集群版安装步骤

    结构:一共三个节点 (zk服务器集群规模不小于3个节点),要求服务器之间系统时间保持一致。
    1.上传zookeeper 安装包到linux中/usr/local/temp 中(目录随意,对安装无影响)
    2.解压zookeeper压缩包(tar zxvf 安装包)以3.4.8.版本为例

    tar zxvf /usr/local/temp/zookeeper-3.4.8.tar.gz
    

    3.复制zookeeper解压后的文件夹到/usr/local下并起名为zookpper(复制后名称任意,对安装无影响)

     cp -r /usr/local/temp/zookeeper-3.4.8  /usr/local/zookeeper
    

    4.修改环境变量

    vi /etc/profile
    export ZOOKEEPER_HOME=/usr/local/zookeeper
    export PATH=.:$ZOOKEEPER_HOME/bin:$JAVA_HOME:$PATH
    

    5.刷新环境变量配置文件,使其生效

    source /etc/profile
    

    6.zookeeper下修改配置文件

    cd /usr/local/zookeeper/conf
    //修改配置文件名称
    mv zoo_sample.cfg zoo.cfg
    

    7.修改conf下的 zoo.cfg

    //修改数据文件路径
    dataDir=/usr/local/zookeeper/data	
    //最后面添加,分别对应三个服务器节点
    server.0=199.168.177.128:2888:3888
    server.1=199.168.177.129:2888:3888
    server.2=199.168.177.130:2888:3888
    

    8.在 /usr/local/zookeeper 下创建文件夹 data

    cd /usr/local/zookeeper
    mkdir data
    

    9.在上面创建的data中创建文件myid并填写内容

    //三个节点添加不同的id值,id分别为上面zoo.cfg中server.(id)即服务器标识
    //如其中一个,直接写个0即可
    0
    

    10.启动zookeeper

    cd /usr/local/zookeeper/bin
    //执行:zkServer.sh start (注意这里3台机器都要进行启动)
    ./zkServer.sh start
    //状态:zkServer.sh status(在三个节点上检验zk的mode,一个leader和俩个follower)
    ./zkServer.sh status
    

    操作zookeeper (shell)

    zkCli.sh 进入zookeeper客户端
    根据提示命令进行操作:
     查找:ls / ls /zookeeper
     创建并赋值:create /bhz hadoop
     获取:get /bhz
     设值:set /bhz baihezhuo
    可以看到zookeeper集群的数据一致性
    创建节点有俩种类型:短暂(ephemeral) 持久(persistent)

    zoo.cfg详解

    tickTime:基本事件单元,以毫秒为单位。这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,
    也就是每隔 tickTime时间就会发送一个心跳。
    dataDir: 存储内存中数据库快照的位置,顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
    clientPort: 这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
    initLimit:这个配置项是用来配置 Zookeeper 接受客户端初始化连接时最长能忍受多少个心跳时间间隔数,当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 102000=20 秒。
    syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 5
    2000=10 秒
     server.A = B:C:D :
     A表示这个是第几号服务器,
     B 是这个服务器的 ip 地址;
     C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;
     D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader

  • 相关阅读:
    Android BroadcastAnyWhere(Google Bug 17356824)漏洞具体分析
    读写Word的组件DocX介绍与入门
    2015年终总结,忙碌与有所收获的一年,2016年继续努力!
    数据库题——高于部门平均工资查询问题
    Oracle 简单的列转行
    行香子·过尽千山
    ZOJ2599:Graduated Lexicographical Ordering(很经典的数位DP)
    【oracle11g,18】存储结构:暂时表,手工条带化,表/索引迁移表空间,删除表,外部表
    联想S820 MIUI刷机包 MIUI 4.4.30 流畅执行 在线主题破解
    android开发艺术探索学习 之 结合Activity的生命周期了解Activity的LaunchMode
  • 原文地址:https://www.cnblogs.com/firecode7/p/16120441.html
Copyright © 2020-2023  润新知