zookeeper集群

环境:

  • 拥有三台服务器,假设三台服务器的Ip地址为 172.18.19.143,172.18.19.15,172.18.19.129
  • 开放三台服务器的2287,3387端口

集群搭建步骤:

  1. 修改zookeeper服务器对应的配置文件:添加

说明:

  1. 在zk的新建的data目录下新建文件myid,将步骤1中的数字A添加到文件中

  2. 使用./zkCli.sh -server 172.18.19.143:2181 登录指定的服务器

至此,集群已搭建完成。

zookeeper一致性协议:

zab协议全称为Zookeeper Atomic Broadcat(zk原子广播)。zk是通过zab协议来保证分布式事务的最终一致性。

基于zab协议,zk集群中的角色主要有以下三类:

  • Leader: 领导者负责进行投票的发起和决议,更新系统状态。
  • Learner:
  • Follower: Follower用于接收客户请求并向客户端返回结果,在选举过程中参与投票
  • Observer: Observer可以接收客户端连接,将写请求转发给leader节点。但Observer不参与投票过程,只同步leader的状态。Observer的目的是为了扩展系统,以提高读取速度。
  • Client:请求发起方

写请求保持一致性过程:

zookeeper的leader选举:

  • looking:寻找leader状态。当服务器处于该状态时,它会认为当前集群没有leader,因此需要进入leader选举状态。
  • leading:领导者状态。表明当前服务器角色是leader.

  • following: 跟随者状态。表明当前服务器角色是follower。

  • observing: 观察者状态。表明当前服务器角色是Observer。

在集群初始化阶段,当有一台服务器server1启动时,其单独无法进行和完成leader选举,当第二台服务器server2启动时,此时两台机器可以相互通信,每台机器都试图找到leader,于是进入leader选举过程。选举过程如下:

在zk运行期间,leader与非leader服务器各司其职,即便当有非leader服务器宕机或者新加入,此时也不会影响leader,但是一旦leader服务器宕机了,那么整个集群将会暂停对外服务,进入新一轮leader选举,其过程和启动时期的Leader选举过程基本一致。

假设正在运行的有server1,server2,server3三台服务器,当前leader是server2,若某一时刻leader挂了,此时便开始leader选举。选举过程如下:

observer角色特点:

配置步骤:

Original: https://www.cnblogs.com/kongieg/p/13375683.html
Author: kongieg
Title: zookeeper集群

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/586782/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 解读王垠博客“一道 Java 面试题”

    偶然拜读IT界知名大佬王垠老师的博客,发现一个有意思的题目: 1 // 这段代码里面到底哪一行错了?为什么? 2 // 原文:http://www.yinwang.org/blog…

    Java 2023年5月29日
    068
  • JSP中的九大内置对象

    JSP九大内置对象 pageContext 存东西 Request 存东西 Response Session 存东西 Application(servletContext) 存东西…

    Java 2023年6月13日
    063
  • IO流详解

    1.1 File类概述和构造方法 File:它是文件和目录路径名的抽象表示 文件和目录是可以通过File封装成对象的 对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个…

    Java 2023年6月6日
    068
  • 识别vite别名路径方法

    1、vite.config.js 修改 在 vie.config.js一级目录下添加一下配置 resolve: { // alias: [{ find: /^~/, replace…

    Java 2023年6月8日
    084
  • JAVA基础学习第五天!

    精华笔记: 1.循环结构: -for结构:应用率高、与次数相关的循环 1 )语法: // 1 2 3 for (要素1;要素2;要素3){ 语句块/循环体————-…

    Java 2023年6月13日
    064
  • 异常-Java学习日记

    异常:就是程序不正常的情况ava中程序的异常:Throwable Error:严重的问题,这样的情况,我们一般不做处理,因为这样的问题一般不是程序本身带来问题,而是外界导致。 Ex…

    Java 2023年6月5日
    069
  • 容器与虚拟机的区别

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年5月30日
    064
  • 【SpringCloud-Alibaba系列教程】10.gateway网关

    简介 在SpringCloud中网关作为一个重要的组成部分,网关的角色是作为一个 API 架构,用来保护、增强和控制对于 API 服务的访问。API 网关是一个处于应用程序或服务(…

    Java 2023年6月5日
    091
  • 关于布隆过滤器,手写你真的知其原理吗?让我来带你手写redis布隆过滤器。

    说到布隆过滤器不得不提到, redis, redis作为现在主流的nosql数据库,备受瞩目;它的丰富的value类型,以及它的 偏向&…

    Java 2023年6月7日
    068
  • 理解IOC

    学习Spring,IOC是个绕不过去的话题。作为Spring的基础,IOC有太多博客和教程了。这里做个简单的梳理,以找工作为例,谈谈我对IOC的理解。 在经典的MVC架构这,一般会…

    Java 2023年6月5日
    088
  • JDK自带javap命令反编译class文件和Jad反编译class文件(推荐使用jad)

    一、前言 我们在日常学习中,对一个java代码有问题,不知道jvm内部怎么进行解析的时候;有个伟大壮举就是反编译,这样就可以看到jvm内部怎么进行对这个java文件解析的!我们可以…

    Java 2023年6月15日
    074
  • jsp中写java代码的方法

    Original: https://www.cnblogs.com/muhy/p/14827695.htmlAuthor: 永恒的回忆Title: jsp中写java代码的方法

    Java 2023年5月29日
    066
  • java启动的一些参数

    -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9001 -Dcom.sun.manageme…

    Java 2023年5月29日
    079
  • synchronized原理剖析

    synchronized原理剖析 并发编程存在什么问题? 1️⃣ 可见性 可见性:是指当一个线程对共享变量进行了修改,那么另外的线程可以立即看到修改后的最新值。 案例演示:一个线程…

    Java 2023年6月15日
    055
  • Java学习-082-多线程15:线程中断退出

    查看上篇文章的源代码执行结果,可以发现,在中断线程后,线程状态并未变化,且线程并未立即停止运行,而是继续运行至结束,输出创建了 800 个文件。 查看 Thread.interru…

    Java 2023年5月29日
    066
  • SpringSecurity 默认表单登录页展示流程源码

    SpringSecurity 默认表单登录页展示流程源码 本篇主要讲解 SpringSecurity提供的默认表单登录页 它是如何展示的的流程,涉及1.FilterSecurity…

    Java 2023年6月9日
    099
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球