一. 配置集群

1. 准备多台ZooKeeper服务器

2. 配置ZooKeeper服务器

在每台服务器的conf/zoo.cfg文件中添加如下内容:

server.20=192.168.4.20:2888:3888
server.21=192.168.4.21:2888:3888
server.22=192.168.4.22:2888:3888

格式: server.A=B:C:D
A表示这台服务器的编号ID,是一个数字
B表示服务器的IP地址或域名
C表示这台服务器与集群中的Leader交换信息时使用的端口
D表示执行选举Leader服务器时互相通信的端口

3. 创建myid配置文件

在集群环境下,需要在dataDir 目录中创建一个名为myid 的文件,文件内容是当前服务器的编号
ID,即上面配置的A

cd data
echo A的值 > myid

ZooKeeper启动时会读取这个文件,将里面的数字与zoo.cfg中配置的server.A进行比较,从而判断这台服务器是哪个

4.开启zookeeper

开启3台虚拟机的zookeeper程序

/usr/local/zookeeper/bin/zkServer.sh start

开启成功后查看zookeeper集群的状态

/usr/local/zookeeper/bin/zkServer.sh status

出现Mode:follower或是Mode:leader则代表成功


二:集群特性

  • 一个ZooKeeper集群中,有一个领导者Leader和多个跟随者Follower
  • Leader负责进行投票的发起和决议,更新系统状态
  • Follower用于接收客户端的请求并向客户端返回结果,在选举Leader过程中参与投票
  • 半数机制:可用节点数量>总节点数量/2
  • 全局数据一致:集群中每台服务器保存一份相同的数据副本,不论客户端连接到哪个服务器,数据都是
    一致的
  • 更新请求顺序执行:来自同一个客户端的更新请求,按其发送顺序依次执行
  • 数据更新的原子性:一次数据更新,要么成功,要么失败
  • 实时性:在一定的时间范围内,客户端能读取到最新数据

三:选举机制

ZooKeeper在提供服务时会自动选举一个节点服务器作为Leader,其他都是Follower

选举流程:

  1. Server1启动,给自己投票,然后发送投票信息,由于其它服务器都还没启动,所以它发现的消息收不到任何反馈,此时Server1为Looking(竞选)状态
  2. Server2启动,给自己投票,同时与Server1通信交换选举结果,由于Server2的id值较大,所以Server2胜出,但由于投票数没有过半,此时Server1和Server2都为Looking状态
  3. Server3启动,给自己投票,同时与Server1和Server2通信交换选举结果,由于Server3的id值较大,所以Server3胜出,此时票数已经过半,所以Server3为Leader,Server1和Server2为Follower
  4. Server4启动,给自己投票,同时与Server1、Server2、Server3通信交换选举结果,尽管Server4的id较大,但由于集群中已经存在Leader,所以Server4只能为Follower
  5. Server5启动,同Server4类似,只能为Follower

总结:

  • 每个服务器在启动时都会选择自己,然后将投票信息发送出去
  • 服务器编号ID越大,在选择算法中的权重越大
  • 投票数必须过半,才能选出Leader
  • 谁是Leader:启动顺序的前集群数/2+1 个服务器中,id值最大的会成为Leader

ZooKeeper入门(五)配置集群和选举机制相关推荐

  1. zookeeper(五)集群角色epoch的选取

    在zookeeper的第三篇有个流程图,不知道是否还有印象. 这个图在刚开始是非常抽象的.现在就可以对照这个图来说一下源码来的流程了. 因为上一篇已经讲解了zookeeper怎么选取leader的,所 ...

  2. 【Hadoop生态圈】1.Hadoop入门教程及集群环境搭建

    文章目录 1.简介 2.环境准备 3.安装hadoop 3.修改Hadoop配置文件 3.1.hadoop-env.sh配置 3.2.core-site.xml配置 3.3.hdfs-site.xml ...

  3. zookeeper配置集群

    zookeeper单点启动默认模式 Using config: /usr/local/zookeeper-3.4.9/bin/../conf/zoo.cfg Mode: standalone 配置集群 ...

  4. Zookeeper源码之集群选举

    前言 zookeeper算是一个流行的分布式协调框架,在大量java分布式中间件中广泛使用.在学习zookeeper的源码前建议先了解一下分布式一致性协议的概念,zookeeper自己实现了一套满足c ...

  5. zookeeper相关知识与集群搭建

    Zookeeper Zookeeper相关概念 Zookeeper概述 Zookeeper是一个分布式协调服务的开源框架,主要用来解决分布式集群中应用系统的一致性问题. Zookeeper本质上是一个 ...

  6. Zookeeper知识要点与集群安装,欢迎纠错

    Zookeeper 什么是zookeeper?原理? 分布式协调服务,底层基于ZAB协议(原子消息广播),保证各服务之间同步: 由Leader.Follower.Observer组成. 维护有层次的数 ...

  7. 猿创征文|ZooKeeper(伪)集群搭建

    前言:zookeeper作为一款分布式协调中间件,其重要性不言而喻,因此需要保证其高可用性.所以一般都会搭建zookeeper集群,今天叶秋带领大家在一台服务器上搭建伪集群. 目录 1. 搭建要求 2 ...

  8. zookeeper客户端使用与集群特性

    zookeeper客户端使用与集群特性 zookeeper Java客户端 项目构建 创建客户端实例 测试结果 创建zookeeper实例参数说明 演示java客户端增删查改zookeeper节点 A ...

  9. zookeeper的使用与集群搭建以及原理应用

    1.zookeeper介绍     zookeeper是一个为分布式应用提供一致性服务的软件,它包含一个简单的原语集,分布式应用程序可以根据它实现同步服务,     配置维护和命名服务等.     基 ...

最新文章

  1. 比特币寒冬中,你更应该关注企业区块链!
  2. 能力差的程序员90%输在这点上!CTO:其实都是瞎努力!
  3. delphi self 的使用
  4. Firefox自带下载功能进行断点续传
  5. django-TDD
  6. 输入一批整数,输出最大最小值,输入0结束
  7. 初次接触 Lottie
  8. Android之传感器(三)方向传感器
  9. python中字符串前的 u, r/R, b的含义
  10. EDIUS中的图片该如何进行剪裁
  11. Linux shell:脚本判断进程是否正在运行
  12. tplink无线桥接WDS小结
  13. html中去除浮漂有什么作用,鱼漂吃铅量大、和吃铅量小都有啥优点?
  14. macOS中比较好的解压缩软件:The Unarchiver
  15. 2022全球与中国电子纸显示器(EPD)市场现状及未来发展趋势
  16. iphone和ipad设备分辨率
  17. 95后离职汇智动力,现在月薪9k,哭着说出经历!
  18. 安卓虚拟机_VMOS Pro 免费又好用的安卓虚拟机,
  19. 阻焊层和助焊层的区别
  20. python学习之 ---正则表达式规则与正则表达式在python的应用

热门文章

  1. 聊聊高并发(三十)解析java.util.concurrent各个组件(十二) 理解CyclicBarrier栅栏
  2. JSON 序列化与反序列化:使用TypeReference 构建类型安全的异构容器
  3. Elasticsearch5.X Mapping万能模板
  4. HBase的布隆过滤器详解
  5. JS和OC交互的简单应用
  6. LeetCode Longest Substring Without Repeating Characters
  7. linux 系统监控、诊断工具之 IO wait
  8. php执行系统外部命令的四种方法
  9. 让云×××—微软虚拟化远程直播
  10. 修正mysqlcc在MySQL 5.0上常报的 Table 'xxx' doesn't exist 错误