zoukankan      html  css  js  c++  java
  • zookepeer小记一则

    **获取centos7 ip** 
    ```bash
    ifconfig eth0 | grep "inet" | grep "192" | cut -d " " -f 10
    ```
    **查看主机名**  
    - hostname  
    
    **修改主机名(重启后无效)**  
    - hostname hadoop  
    
    **永久修改主机名**  
    ```bash
    [root@zqq1 etc]# pwd & cat hostname 
    [1] 8390
    /etc #当前路径
    zqq1 主机名
    ```
    *host 修改*
    ```bash
    [root@zqq1 etc]# pwd & cat hosts
    [1] 8442
    /etc
    192.168.5.5 zqq3 zqq3
    192.168.5.4 zqq2 zqq2
    192.168.5.3 zqq1 zqq1
    192.168.5.2 zqq zqq
    127.0.0.1 localhost
    #127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    [1]+  完成                  pwd
    ```
    *Zookeeper 优点* 
    ---
    特点 说明  
    最终一致性: 为客户端展示同一个视图,这是zookeeper里面一个非常重要的功能  
    可靠性: 如果消息被到一台服务器接受,那么它将被所有的服务器接受。  
    实时性: Zookeeper不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口。  
    独立性: 各个Client之间互不干预  
    原子性: 更新只能成功或者失败,没有中间状态。  
    顺序性: 所有Server,同一消息发布顺序一致。  
    ----
    **zookeeper集群机制**  
    - 半数机制:集群中半数以上机器存活,集群可用。
    - zookeeper适合装在奇数台机器上!!!
    
    **解压zookeeper到/usr/local (自定义)  
    修改 这个conf路径下的zoo_sample.cfg修改为zoo.cfg  
    修改dataDir/log路径为**  
    >    dataDir=/usr/local/zookeeper/data  
        dataLogDir=/usr/local/zookeeper/logs  
        
    **启动**  
    ```bash
    [root@zqq1 zookeeper]# zkServer.sh start
    ZooKeeper JMX enabled by default
    Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
    Starting zookeeper ... STARTED
    ```
    *查看状态*  
    ```bash
    [root@zqq1 zookeeper]# zkServer.sh status 
    ZooKeeper JMX enabled by default
    Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
    Error contacting service. It is probably not running. #未集群
    [root@zqq1 zookeeper]# jps
    8051 QuorumPeerMain #已经启动
    8202 Jps
    ```
    **配置集群**
    ```bash
    server.0=zqq1:2888:3888
    server.1=zqq3:2888:3888
    server.2=zqq2:2888:3888
    ```
    >配置参数解读  
    Server.A=B:C:D。  
    A是一个数字,表示这个是第几号服务器;  
    B是这个服务器的ip地址;  
    C是这个服务器与集群中的Leader服务器交换信息的端口;  
    D是万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。
    
    **关于A参数**
    > 集群模式下配置一个文件myid,这个文件在dataDir目录下,这个文件里面有一个数据就是A的值,Zookeeper启动时读取此文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server。
    
    ### 配置参数解读  
    **tickTime:**
    >通信心跳数,Zookeeper服务器心跳时间,单位毫秒
    Zookeeper使用的基本时间,服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳,时间单位为毫秒。
    它用于心跳机制,并且设置最小的session超时时间为两倍心跳时间。(session的最小超时时间是2*tickTime)  
    
    **initLimit:**
    >LF初始通信时限
    集群中的follower跟随者服务器(F)与leader领导者服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量),用它来限定集群中的Zookeeper服务器连接到Leader的时限。
    投票选举新leader的初始化时间
    Follower在启动过程中,会从Leader同步所有最新数据,然后确定自己能够对外服务的起始状态。
    Leader允许F在initLimit时间内完成这个工作。
    
    **syncLimit:**
    >LF同步通信时限
    集群中Leader与Follower之间的最大响应时间单位,假如响应超过syncLimit * tickTime,
    Leader认为Follwer死掉,从服务器列表中删除Follwer。
    在运行过程中,Leader负责与ZK集群中所有机器进行通信,例如通过一些心跳检测机制,来检测机器的存活状态。
    如果L发出心跳包在syncLimit之后,还没有从F那收到响应,那么就认为这个F已经不在线了。
    
    **dataDir:**
    > 数据文件目录+数据持久化路径
    保存内存数据库快照信息的位置,如果没有其他说明,更新的事务日志也保存到数据库。  
    
    **clientPort:**
    > 客户端连接端口
    监听客户端连接的端口
    
    #### Zookeeper的核心
    
    >Zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协
    议。Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者
    崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和leader的状态同步以后
    ,恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。
    为了保证事务的顺序一致性,zookeeper采用了递增的事务id号(zxid)来标识事务。所有的提议(
    proposal)都在被提出的时候加上了zxid。实现中zxid是一个64位的数字,它高32位是epoch用来标识
    leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch,标识当前属于那个leader的
    统治时期。低32位用于递增计数。  
    
    **每个Server在工作过程中有三种状态:**  
    - LOOKING:当前Server不知道leader是谁,正在搜寻
    - LEADING:当前Server即为选举出来的leader
    - FOLLOWING:leader已经选举出来,当前Server与之同步   
    
    **Zookeeper 的保证**
    - 更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行
    - 数据更新原子性,一次数据更新要么成功,要么失败
    - 全局唯一数据视图,client无论连接到哪个server,数据视图都是一致的
    - 实时性,在一定事件范围内,client能读到最新数据
    
    **Follower主要有四个功能:**
    1. 向Leader发送请求(PING消息、REQUEST消息、ACK消息、REVALIDATE消息);    
    2. 接收Leader消息并进行处理;  
    3. 接收Client的请求,如果为写请求,发送给Leader进行投票;  
    4. 返回Client结果。  
    
    #### Follower的消息循环处理如下几种来自Leader的消息:
    1. PING消息: 心跳消息;  
    2. PROPOSAL消息:Leader发起的提案,要求Follower投票;  
    3. COMMIT消息:服务器端最新一次提案的信息;  
    4. UPTODATE消息:表明同步完成;  
    5. REVALIDATE消息:根据Leader的REVALIDATE结果,关闭待revalidate的session还是允许其接受消息;  
    6. SYNC消息:返回SYNC结果到客户端,这个消息最初由客户端发起,用来强制得到最新的更新。  
    
    ##### zxid 
    - znode节点的状态信息中包含czxid, 那么什么是zxid呢?
    - ZooKeeper状态的每一次改变, 都对应着一个递增的Transaction id, 该id称为zxid. 由于zxid的递增性质, 如果zxid1小于zxid2, 那么zxid1肯定先于zxid2发生. 创建任意节点, 或者更新任意节点的数据, 或者删除任意节点, 都会导致Zookeeper状态发生改变, 从而导致zxid的值增加.
    
    ### Zookeeper工作原理
    ```text
    Zookeeper的核心是原子广播,这个机制保证了各个server之间的同步。  
    实现这个机制的协议叫做Zab协议。  
    Zab协议有两种模式,它们分别是恢复模式和广播模式。  
    当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数server的完成了和leader的状态同步以后,恢复模式就结束了。  
    状态同步保证了leader和server具有相同的系统状态。  
    一旦leader已经和多数的follower进行了状态同步后,他就可以开始广播消息了,即进入广播状态。  
    这时候当一个server加入zookeeper服务中,它会在恢复模式下启动,发现leader,并和leader进行状态同步。  
    待到同步结束,它也参与消息广播。  
    Zookeeper服务一直维持在Broadcast状态,直到leader崩溃了或者leader失去了大部分的followers支持。  
    广播模式需要保证proposal被按顺序处理,因此zk采用了递增的事务id号(zxid)来保证。
    所有的提议(proposal)都在被提出的时候加上了zxid。
    实现中zxid是一个64为的数字它高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch。
    低32位是个递增计数。
    当leader崩溃或者leader失去大多数的follower,这时候zk进入恢复模式,恢复模式需要重新选举出一个新的leader,让所有的server都恢复到一个正确的状态
    ```
    #### Leader的选举
    > 每个Server启动以后都询问其它的Server它要投票给谁。
      对于其他server的询问,server每次根据自己的状态
      都回复自己推荐的leader的id和上一次处理事务的
      zxid(系统启动时每个server都会推荐自己)
      收到所有Server回复以后,就计算出zxid最大的哪个
      Server,并将这个Server相关信息设置成下一次要投
      票的Server。
      计算这过程中获得票数最多的的sever为获胜者,如
      果获胜者的票数超过半数,则改server被选为leader
      。否则,继续这个过程,直到leader被选举出来。
      1. Leader 选举
      2. leader就会开始等待server连接
      3. Follower连接leader,将最大的zxid发送给leader
      4. Leader根据follower的zxid确定同步点
      5. 完成同步后通知follower 已经成为uptodate状态
      6. Follower收到uptodate消息后,又可以重新接受client的
      请求进行服务了
    
    修改zookpeer.out的文件位置
    修改zkEnv.sh的 ZOO_LOG_DIR="$ZOOKEEPER_PREFIX/logs"

    *******************************************************************************************************************************

    感谢阿贝云提供的免费云服务器和免费虚拟主机,1C1G5M配置,搭配内网穿透,真香,看视频听歌曲无压力,*

    运行起来也相当流畅,网速个人使用是真的赞,欢迎大家使用

    *******************************************************************************************************************************

  • 相关阅读:
    男子胃脘胀痛案(知老)
    转 Django中的Form
    转 Alert.log shows No Standby Redo Logfiles Of Size 153600 Blocks Available
    转发 django 初探
    转 Logs are not shipped to the physical standby database
    python 之django (一) Windows环境下Django 1.6.11开发环境搭建(简易版)
    oracle db 产品路线图
    转 python中%s与%d
    转 python 的常用函数replace, split(),enumerate() 函数
    转 [Error]EOL while scanning string literal
  • 原文地址:https://www.cnblogs.com/zqq1234/p/12853710.html
Copyright © 2011-2022 走看看