Zookeeper集群角色

Leader:领导者,一个Zookeeper集群同一时间只能有一个Leader,,Leader服务器是整个Zookeeper集群工作制中的核心,其主要工作有以下:

  • 事务请求的唯一调度和处理者,保证集群事务处理的顺序性。Zookeeper中所有事务操作都是由leader服务器进行处理。
  • 集群内部服务器的调用者。
  • 接受所有的Follower的提案请求并统一协调发起提案投票,负责与所有Follower进行内部数据交换(同步)。

Follower:跟随者,主要工作:

  • 处理客户端的非事务请求,并转发事务请求给Leader服务器。
  • 参与事务请求的同步提交投票。同时与Leader进行数据交换(同步)。
  • 参与Leader选举投票。

Observer:观察者,从Zookeeper3.3.0引入的一个全新的服务器角色,该服务器充当一个观察者角色,观察Zookeeper集群的最新状态变化,并将这些状态变更同步过来。Observer服务器在工作原理上和Follower基本一致,对于非事务请求,可以直接独立处理,而对于事务请求,则会转发给Leader服务器进行处理。和Follower唯一区别是,Observer不参与任何形式投票,包括事务请求提交投票、Leader选举投票。仅仅观察集群状态变化并把变化同步过来。

Observer不属于Zookeeper的关键部位,通常用于在不影响集群事务处理能力的前提下提升进去非事务处理的能力,就是不影响集群写性能的情况下,提高集群读性能。因为使用增加Follower固然会提高集群的读性能,但是也会降低集群事务处理的写性能。因为Follower太多的话,会把时间浪费在事务投票同步过程和Leader选举过程中,因为要通信、投票的机器多了。而Observer不参与任何形式投票,仅仅只是进行读操作。所以增加再多Observer也不会影响集群的写性能,反而能够提升集群的读性能。但是Observer太多,而Follower太少的话会降低系统的可用性。

Zookeeper集群中有一半以上的机器正常工作的话,集群对外提供的服务就是可用的。假如有1个Leader,100个Follower,那么就算有50台机器宕机,集群照样可用。假设现在采用1个Leader,10个Follower,90个Observer的话,只要集群里面有大于5台机器宕机,集群就会处于不可用状态,至少处理不了事务请求,因为事务投票需要一半以上的同意,而可用的Leader加Follower已经不足一半了。

集群构建

在进行集群搭建时,一般要知道单机环境的搭建https://blog.csdn.net/qq_40837310/article/details/106792984
环境:
五台虚拟机模拟:192.168.18.130、192.168.18.131、192.168.18.132、192.168.18.133、192.168.18.134。一台Leader、3台Follower、1台Observer(192.168.18.134)。Leader是选举出来的,Observer是指定的。
第一步:修改配置文件:

server.1=192.168.18.130:2182:2183
server.2=192.168.18.131:2182:2183
server.3=192.168.18.132:2182:2183
server.4=192.168.18.133:2182:2183
server.5=192.168.18.134:2182:2183:observer

语法:server.id=host:port1:port2

  1. server固定。
  2. id:集群中节点的唯一标志,是一个整形数字。
  3. host:可以是ip,也可以是IP的映射。
  4. port1:集群中进行leader选举的端口号。
  5. port2:集群中服务器进行通信的端口。

集群中每个节点的zoo.cfg配置文件都要加上这段修改,这段修改就好比一个通信录,然集群中的每一个节点都能互相知道其他节点的存在。

集群中一台服务器需要三个端口,面向客户端连接的端口,集群中进行leader选举的端口、集群中服务器进行通信的端口。

指定某节点为Observer:

  1. 要设置为Observer节点的配置文件添加配置peerType=observer
  2. 在server.id=host:port1:port2 后面加observer ,比如server.5=192.168.18.134:2182:2183:observer

第二步:创建myid文件
在Zookeeper服务器dataDir创建一个myid文件,文件内容就是该集群服务器的唯一id,就是上面配置文件配置的server.id中的id。比如192.168.18.131服务器的id为2,192.168.18.132的id为3。

第三步:启动Zookeeper
就跟单机环境下那样启动就行了。前提是服务器的配置的Zookeeper的那三个端口的要对外开放。

验证:

启动成功,为Follower节点。

启动成功,为leader节点。

启动成功,为observer。还有其他几台服务器就不贴了。

使用该三种角色分别进行添加一个节点和查看节点操作。
Leader:

Follower

Observer:

  1. 三种集群角色都能进行节点新增(事务操作),原因是Follower和Observer会把事务操作转发给Leader,实际上只有Leader会进行事务处理。
  2. 能够获取到其他节点添加的节点,说明Zookeeper各个节点会进行事务提交和数据同步。

javaAPI进行集群连接:

连接集群与连接单机类似,只是连接的地址是多个,用逗号分隔起来。其他操作与单机操作基本一致。

单机java API操作

Zookeeper集群详解相关推荐

  1. ElasticSearch搭建集群详解

    Elasticsearch如果做集群的话Master节点至少三台服务器或者三个Master实例加入相同集群,三个Master节点最多只能故障一台Master节点,如果故障两个Master节点,Elas ...

  2. 使用acs-engine在Azure中国区部署kubernetes集群详解

    1. acs-engine简介 ACS是微软在2015年12月推出的一项基于容器的云端PaaS服务.说简单点,acs-engine就是一个ARM模板生成器,用户只需要配置几个简单的参数来描述容器集群的 ...

  3. RocketMQ集群详解

    集群特点 (1)NameServer:是一个几乎无状态节点,可集群部署,节点之间无任何信息同步. (2)Broker:部署相对复杂,Broker分为Master与Slave,一个Master可以对应多 ...

  4. Redis数据结构、持久化、缓存技术和集群详解

    redis 是什么? 是完全开源免费的,用c语言编写的,是一个单线程,高性能的(key/value)内存数据库,基于内存运行并支持持久化的nosql数据库 能干嘛? 主要是用来做缓存,但不仅仅只能做缓 ...

  5. Redis Cluster 集群详解

    Redis 分布式扩展之 Redis Cluster 方案 主从切换的过程中会丢失数据,因为只有一个 master,只能单点写,没有解决水平扩容的问题.而且每个节点都保存了所有数据,一个是内存的占用率 ...

  6. mysql 集群操作系统_高性能MySQL集群详解(二)

    一.通过Keepalived搭建MySQL双主模式的高可用集群系统 1.MySQL Replication介绍: MySQL Replication是MySQL自身提供的一个主从复制功能,其实也就是一 ...

  7. Docker swarm集群详解(一)

    一.简介 Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源.Swarm和Ku ...

  8. Centos7安装mariadb galera cluster数据库集群 详解

    #Galera集群特点 集群之间无延时,同步复制.而master-slave主从异步复制,存在延迟. active-active多主,集群内部服务器都是同时写,必须等所有集群内所有数据库都完成数据写入 ...

  9. 构建负载均衡服务器之一 负载均衡与集群详解

    一.什么是负载均衡 首先我们先介绍一下什么是负载均衡: 负载平衡(Load balancing)是一种计算机网络技术,用来在多个计算机(计算机集群).网络连接.CPU.磁盘驱动器或其他资源中分配负载, ...

最新文章

  1. 7714天,王小川正式卸任搜狗CEO!用一瞬间定格永恒
  2. selenium WebDriverException: Message: unknown error: DevToolsActivePort file doesnt exist
  3. spring cloud Hystrix
  4. 课堂派派典型用户和场景
  5. 明明的随机数冒泡排序c 语言,NOIP复赛 c++-明明的随机数(算法和原码参考)
  6. 框架源码专题:Mybatis的一级缓存、二级缓存是什么?有什么作用?
  7. 日志管理Rsyslog
  8. servlet笔试题java,Java推荐!Servlet面试题和答案汇集
  9. redis配置文件参数说明及命令操作
  10. 凌晨半夜短信通道异常,乙方如何答复?
  11. 计算机的基本知识理论,计算机基本理论基础知识总汇
  12. 以模块方式加载 UVC 驱动
  13. ue4 启用ui_如何实现语音的AI启用ui设计原则
  14. 阿波罗java_携程Apollo(阿波罗)配置中心的Java样例客户端启动和调试
  15. linux 添加快捷命令,linux 添加快捷指令
  16. CloudCompare使用说明
  17. 适合写笔记的文本笔记管理工具——Keep It for Mac!
  18. 《孤岛危机》游戏系统需求列表出炉 您的机器还行吗?
  19. 【视频处理】模拟视频与数字视频的区别
  20. sketchup 插件_SketchUp和Rhino插件现已可用于Unity Reflect

热门文章

  1. 安卓学习笔记40:基于套接字网络编程
  2. 安卓案例:利用SQLiteDatabase操作数据库与表
  3. 【BZOJ1901】Dynamic Rankings,树状数组套主席树
  4. linux 4 内核 c,4. 使代码正确 — The Linux Kernel documentation
  5. python如何表示坐标_python – 如何制作x坐标字母?
  6. 一般编译器错误_[翻译]MLIR:摩尔定律终结的编译器基础结构
  7. python向量化编程技巧_Python学习(六)向量化
  8. 【英语学习】【WOTD】abstruse 释义/词源/示例
  9. Algorithms Part 1-Question 4- SCC 强联通问题
  10. iis php多版本共存,IIS7中多个版本php共存的方法