大数据——Zookeeper 安装(集群)(二)

ops/2024/12/1 10:49:58/

Zookeeper

补充

  1. CountDownLatch:闭锁。会对线程进行计数,在计数归零之前,之前的线程会被阻塞;当计数归零之后,被阻塞的线程就会自动放开继续执行
  2. CyclicBarrier:栅栏。会对线程进行计数,在计数归零之前,之前的线程会被阻塞;当计数归零之后,被阻塞的线程就会自动放开继续执行

安装(集群模式)

安装JDK

  1. 三个节点删除Linux自带的JDK

    rpm -qa | grep -i jdk | xargs rpm -ev --nodeps
    
  2. 创建对应的目录

    cd /opt
    mkdir presoftware
    mkdir software
    
  3. 在第一个节点上传JDK

    cd presoftware/
    # 上传JDK
    rz
    # 如果没有找到命令,那么安装之后重新上传
    yum -y install lrzsz
    
  4. 解压

    tar -xvf jdk-8u371-linux-x64.tar.gz -C ../software/
    
  5. 重命名

    cd ../software/
    mv jdk1.8.0_371/ jdk1.8
    
  6. 远程拷贝

    # 回到/opt目录下
    cd ..
    scp -r software/ root@10.16.2.194:/opt
    scp -r software/ root@10.16.2.193:/opt
    
  7. 配置环境变量

    # 编辑文件
    vim /etc/profile.d/javahome.sh
    # 如果找不到vim
    yum -y install vim
    # 添加环境变量
    export JAVA_HOME=/opt/software/jdk1.8
    export PATH=$PATH:$JAVA_HOME/bin
    # 保存退出,生效
    source /etc/profile.d/javahome.sh
    # 测试
    javac -version
    java -version
    
  8. 远程拷贝

    scp /etc/profile.d/javahome.sh root@10.16.2.194:/etc/profile.d/
    scp /etc/profile.d/javahome.sh root@10.16.2.193:/etc/profile.d/
    
  9. 测试其他两个节点的javacjava能否使用,如果不能,那么就先source之后再次测试

安装Zookeeper

  1. 进入预安装目录,上传Zookeeper的安装包

    cd /opt/presoftware/
    # 上传安装包
    rz
    
  2. 解压

    tar -xvf apache-zookeeper-3.9.1-bin.tar.gz -C /opt/software/
    
  3. 重命名

    cd ../software/
    mv apache-zookeeper-3.9.1-bin/ zookeeper-3.9.1
    
  4. 进入Zookeeper的配置目录

    cd zookeeper-3.9.1/conf/
    
  5. 复制文件

    cp zoo_sample.cfg zoo.cfg
    
  6. 编辑文件

    vim zoo.cfg
    

    修改dataDir属性的值

    dataDir=/opt/software/zookeeper-3.9.1/data
    

    在文件末尾添加server.编号=IP或者主机名:原子广播端口:选举端口,例如

    # 编号要求不能重复,必须是正整数
    server.1=10.16.2.191:2888:3888
    server.2=10.16.2.194:2888:3888
    server.3=10.16.2.193:2888:3888
    
  7. 构建数据目录并进入

    mkdir /opt/software/zookeeper-3.9.1/data
    cd /opt/software/zookeeper-3.9.1/data
    
  8. 编辑文件,文件名固定为myid

    vim myid
    

    在文件中添加当前主机的编号

  9. 远程拷贝

    cd /opt/software/
    scp -r zookeeper-3.9.1/ root@10.16.2.194:$PWD
    scp -r zookeeper-3.9.1/ root@10.16.2.193:$PWD
    
  10. 修改对应主机的myid

    vim /opt/software/zookeeper-3.9.1/data/myid
    

    修改为对应主机的myid,例如第二台主机的myid为2,第三台主机的myid为3

  11. 配置环境变量

    # 编辑文件
    vim /etc/profile.d/zookeeperhome.sh
    # 在文件中添加
    export ZOOKEEPER_HOME=/opt/software/zookeeper-3.9.1
    export PATH=$PATH:$ZOOKEEPER_HOME/bin
    # 保存退出,生效
    source /etc/profile.d/zookeeperhome.sh
    
  12. 远程拷贝

    scp /etc/profile.d/zookeeperhome.sh root@10.16.2.194:/etc/profile.d
    scp /etc/profile.d/zookeeperhome.sh root@10.16.2.193:/etc/profile.d
    
  13. 另外两个节点上进行source

    source /etc/profile.d/zookeeperhome.sh
    
  14. 启动Zookeeper

    zkServer.sh start
    
  15. 查看Zookeeper的状态

    zkServer.sh status
    

    如果出现一个leader+2个follower,那么说明配置成功

选举机制

概述

  1. 当Zookeeper集群启动的时候,此时所有的节点(在集群中,节点指的就是服务器)都会进入选举状态,并且此时所有的节点都会推荐自己成为leader
  2. 当一个节点收到别人的选举信息之后,就会进行比较。经过多轮比较之后,最后胜出的节点会成为leader

选举细节

  1. 在Zookeeper集群中,当出现没有leader(集群刚刚启动,或者是leader宕机)的状态时,此时整个集群的所有节点都会进入选举状态,准备选举
  2. Zookeeper会为每一次选举出来的leader分配一个递增的编号,称之为Epochid
  3. 选举信息
    1. leader编号(Epochid)。如果Epochid比较小,那么说明操作已经过时
    2. 最大事务id(Zxid)。Zxid越大,说明这个节点接收的写操作越多
    3. 选举编号(myid)。要求myid不能重复
  4. 比较原则
    1. 先比较两个节点的Epochid,谁大谁赢
    2. 如果Epochid一致,那么比较两个节点的最大事务id,谁大谁赢
    3. 如果最大事务id一致,那么比较myid
    4. 如果两个节点进行比较,一方失败,那么失败的节点会转而接受胜出的节点的选举信息,此时可以理解为胜出的节点获得了一票。当一个节点赢得半数及以上的节点的支持的时候,那么这个节点就会成为leader - 过半性
  5. 如果一个Zookeeper集群中已经存在了leader,那么新添的节点的事务id或者myid无论是多少,只能成为follower
  6. 如果leader产生宕机,那么Zookeeper集群会重新选举出一个新的leader
  7. 一个节点能否成为leader,看这个节点能否抢先过半
  8. 在Zookeeper集群中,如果出现了2个及以上的leader,这种现象称之为脑裂
  9. 产生脑裂的原因
    1. 集群产生了分裂 - 硬件故障、网络故障等都会产生分裂,这个问题无法避免
    2. 分裂之后还进行了选举
  10. 在Zookeeper集群中,如果存活(能够相互通信)的节点个数不足一半,无论leader是否存在,剩余的存活节点都会停止服务(对外停止接收请求,对内停止选举和原子广播) - 过半性
  11. 如果集群中存在两个及以上的leader,那么此时会比较leader之间的Epochid。Epochid较小的节点就会变为follower状态
  12. 在集群的选举期间,集群只对外提供读服务,不提供写服务!
  13. Zookeeper集群中的节点状态
    1. voting/looking:选举状态
    2. follower:追随者/跟随者
    3. leader:领导者
    4. observer:观察者
  14. leader和follower都是有决策权和执行权的节点,observer没有决策权,只有执行权

http://www.ppmy.cn/ops/10682.html

相关文章

dpkg clashupdown dns缓存

alias clashup“source $HOME/my-config/clash_up.sh” alias clashdown“source $HOME/my-config/clash_down.sh” curl ipinfo.io dpkg -i:安装软件包; -r:删除软件包; -P:删除软件包的同时删除其配置文件&#xf…

【漏洞复现】网动统一通信平台meetingShow接口处存在任意文件下载漏洞

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

Android Room 记录一个Update语句不生效的问题解决记录

代码展示 1.数据实体类 Entity public class User {PrimaryKey(autoGenerate true)private long id;private String name;private String age;private String sex;public User(String name, String age, String sex) {this.name name;this.age age;this.sex sex;}public …

2024年短剧小程序视频解析#下载高手

2024年短剧小程序视频解析 | 点击获取绝妙剧情!利用下载高手,轻松下载所有精彩片段! 这里已经将下载高手打包好了,有需要的自己取一下 下载高手链接:https://pan.baidu.com/s/1KtR6830x8GciKtNcSRhQMg?pwd1234 提取…

【SAP HANA 15】SQL锁表 (查询,解锁)

锁表查看 --锁表检查语句 SELECT C.CONNECTION_ID,PS.STATEMENT_STRINGFROM M_CONNECTIONS C JOIN M_PREPARED_STATEMENTS PSON C.CONNECTION_ID PS.CONNECTION_ID AND C.CURRENT_STATEMENT_ID PS.STATEMENT_IDWHERE C.CONNECTION_STATUS RUNNINGAND C.CONNECTION_TYPE Re…

基于STM32实现流水灯【Proteus仿真】

详情更多 wechat:嵌入式工程师成长日记 https://mp.weixin.qq.com/s?__bizMzg4Mzc3NDUxOQ&mid2247485624&idx1&sn4e553234c2624777409bd2067a07aad8&chksmcf430de0f83484f6189b119d9d83ea6e6f2a85d13afaa04d218483918231c38e6382d3007061&tok…

就业班 第三阶段(负载均衡) 2401--4.19 day3 nginx3

二、企业 keepalived 高可用项目实战 1、Keepalived VRRP 介绍 keepalived是什么keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。 ​ keepalived工作原理keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundan…

【Linux系统编程】第七弹---权限管理操作(上)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、修改文件权限的做法(一) 2、有无权限的表现 总结 上一弹我们讲解了Linux权限概念相关的知识,但是我们只知道有…