首页 > 其他分享 >【分布式系统管理框架】Zookeeper集群

【分布式系统管理框架】Zookeeper集群

时间:2024-07-08 12:55:53浏览次数:13  
标签:zookeeper Zookeeper 192.168 集群 分布式系统 服务器 Leader

目录

1. Zookeeper

1.1 Zookeeper定义

1.2 Zookeeper工作机制

1.3 Zookeeper特点

1.4 Zookeeper数据结构

1.5 Zookeeper选举机制

2.部署Zookeeper集群

2.1 初始化操作

2.2 安装 Zookeeper

2.3 修改配置文件

2.4 启动zookeeper


1. Zookeeper

1.1 Zookeeper定义

Zookeeper是一个开源的,为分布式框架提供协调服务的Apache项目。

1.2 Zookeeper工作机制

Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接收观察者的注册,一旦这些数据的状态发生变化。Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者,做出相应的反应。也就是说Zookeeper = 文件系统 + 通知机制。

1.3 Zookeeper特点

(1)Zookeeper:一个领导者(Leader),多个跟随者(Follower)组成的集群。
(2)Zookeepe集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。所以Zookeeper适合安装奇数台服务器。
(3)全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的。
(4)更新请求顺序执行,来自同一个Client的更新请求按其发送顺序依次执行,即先进先出。
(5)数据更新原子性,一次数据更新要么成功,要么失败。
(6)实时性,在一定时间范围内,Client能读到最新数据。

1.4 Zookeeper数据结构

ZooKeeper数据模型的结构与Linux文件系统很类似,整体上可以看作是一棵树,每个节点称做一个ZNode。每一个ZNode默认能够存储1MB的数据,每个ZNode都可以通过其路径唯一标识。

1.5 Zookeeper选举机制

第一次启动选举机制

(1)服务器1启动,发起一次选举。服务器1投自己一票。此时服务器1票数一票,不够半数以上(3票),选举无法完成,服务器1状态保持为LOOKING;
(2)服务器2启动,再发起一次选举。服务器1和2分别投自己一票并交换选票信息:此时服务器1发现服务器2的myid比自己目前投票推举的(服务器1)大,更改选票为推举服务器2。此时服务器1票数0票,服务器2票数2票,没有半数以上,选举无法完成,服务器1,2状态保持LOOKING;
(3)服务器3启动,发起一次选举。此时服务器1和2都会更改选票为服务器3。此次投票结果:服务器1为0票,服务器2为0票,服务器3为3票。此时服务器3的票数已经超过半数,服务器3当选Leader。服务器1,2更改状态为FOLLOWING,服务器3更改状态为LEADING;
(4)服务器4启动,发起一次选举。此时服务器1,2,3已经不是LOOKING状态,不会更改选票信息。交换选票信息结果:服务器3为3票,服务器4为1票。此时服务器4服从多数,更改选票信息为服务器3,并更改状态为FOLLOWING;
(5)服务器5启动,同4一样当小弟。

非第一次启动选举机制

(1)当ZooKeepe集群中的一台服务器出现以下两种情况之一时,就会开始进入Leader选举:

  • 服务器初始化启动。
  • 服务器运行期间无法和Leader保持连接。

(2)而当一台机器进入Leader选举流程时,当前集群也可能会处于以下两种状态:

  • 集群中本来就已经存在一个Leader

对于已经存在Leader的情况,机器试图去选举Leader时,会被告知当前服务器的Leader信息,对于该机器来说,仅仅需要和Leader机器建立连接,并进行状态同步即可。

  • 集群中确实不存在Leader

假设ZooKeeper由5台服务器组成,SID分别为1、2、3、4、5,ZXID分别为118、119、120、120、119,并且此时SID为3的服务器是Leader。某一时刻,3和5服务器出现故障,因此开始进行Leader选举。

选举Leader规则:

1.EPOCH大的直接胜出
2.EPOCH相同,事务id大的胜出
3.事务id相同,服务器id大的胜出

SID:服务器ID;用来唯一标识一台ZooKeeper集群中的机器,每台机器不能重复,和myid一致。

ZXID:事务ID;ZXID是一个事务ID,用来标识一次服务器状态的变更。在某一时刻,集群中每台机器的ZXID值不一定完全一致,这和ZooKeeper服务器对于客户端“更新请求”的处理逻辑速度有关。

Epoch:每个Leader任期的代号;没有Leader时==,同一轮投票过程中的逻辑时钟值是相同的==。每投完一次票,这个数据就会增加.

2.部署Zookeeper集群

准备 3 台服务器做 Zookeeper 集群

192.168.9.210
192.168.9.120
192.168.9.140

2.1 初始化操作

初始化操作,所有服务器操作
systemctl disable --now firewalld
setenforce 0
vim /etc/selinux/config
SELINUX=disabled
安装 JDK
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
java -version

2.2 安装 Zookeeper

192.168.9.210服务器
cd /opt
tar -zxvf apache-zookeeper-3.6.4-bin.tar.gz
mv apache-zookeeper-3.6.4-bin /usr/local/zookeeper

2.3 修改配置文件

192.168.9.210服务器
//修改配置文件
cd /usr/local/zookeeper/conf
cp zoo_sample.cfg zoo.cfg


vim zoo.cfg
tickTime=2000   #通信心跳时间,Zookeeper服务器与客户端心跳时间,单位毫秒
initLimit=10    #Leader和Follower初始连接时能容忍的最多心跳数(tickTime的数量),这里表示为10*2s
syncLimit=5     #Leader和Follower之间同步通信的超时时间,这里表示如果超过5*2s,Leader认为Follwer死掉,并从服务器列表中删除Follwer
dataDir=/usr/local/zookeeper/data      ● 12行修改,指定保存Zookeeper中的数据的目录,目录需要单独创建
dataLogDir=/usr/local/zookeeper/logs   ●添加,指定存放日志的目录,目录需要单独创建
clientPort=2181   #客户端连接端口
#添加集群信息
server.1=192.168.9.210:3188:3288
server.2=192.168.9.120:3188:3288
server.3=192.168.9.140:3188:3288

-------------------------------------------------------------------------------------
server.A=B:C:D
●A是一个数字,表示这个是第几号服务器。集群模式下需要在zoo.cfg中dataDir指定的目录下创建一个文件myid,这个文件里面有一个数据就是A的值,Zookeeper启动时读取此文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server。
●B是这个服务器的地址。
●C是这个服务器Follower与集群中的Leader服务器交换信息的端口。
●D是万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。
-------------------------------------------------------------------------------------



cd /usr/local/zookeeper
mkdir data logs
echo 1 > data/myid


拷贝配置好的 Zookeeper 配置文件到其他机器上
scp -r zookeeper/ 192.168.9.120:/usr/local/
scp -r zookeeper/ 192.168.9.140:/usr/local/

192.168.9.120服务器
cd /usr/local/zookeeper
echo 2 > data/myid

192.168.9.140服务器
cd /usr/local/zookeeper
echo 3 > data/myid


2.4 启动zookeeper

三台服务器同样操作
cd /usr/local/zookeeper/bin
./zkServer.sh start
netstat -lntp | grep 2181

本实验中zookeeper启动顺序:192.168.9.210>192.168.9.140>192.168.9.120

查看各服务器zookeeper状态

./zkServer.sh status



标签:zookeeper,Zookeeper,192.168,集群,分布式系统,服务器,Leader
From: https://blog.csdn.net/2402_83805984/article/details/140260893

相关文章

  • 分片集群平衡器Balancer
    分片集群平衡器 MongoDB平衡器是一个后台进程,用于监控每个分片集合中每个分片的数据量。当给定分片上的分片集合的数据量达到特定的 迁移阈值时,平衡器会尝试在分片之间自动迁移数据,并在尊重区域的情况下使每个分片的数据量达到均衡。默认情况下,平衡器进程始终处于启用状态。......
  • Spring Boot Redis 集群性能优化(基于 Redisson)
    1.SpringBootRedis集群性能优化(基于Redisson)1.1.版本说明1.2.为什么是Redisson1.3.参数优化1.3.1.Redisson配置参数1.3.1.1.通用参数1.3.1.2.集群参数1.3.1.3.最终参数配置1.4.从Nacos获取Redisson配置1.SpringBootRedis集群性能优化(......
  • Es集群架构的搭建以及集群的核心概念
    1、深入理解ES集群架构的底层原理这篇主要讲解es的集群架构的底层原理,es的索引分片,副本等基本知识集群的核心概念在安装集群之前,先了解一下集群的几个概念。如下图,就是一个三个节点组成的es集群,p0、p1、p2表示一个节点中的分片,R0、R1、R2表示分片对应的副本 1.1节点以及......
  • 03、集群部署
    版本:Rocky8系统,K8S版本1.26.2测试环境最低硬件要求:①:CPU:2c②:内存:4G③:硬盘:50G服务器准备节点主机名IP地址mastertestlinux01192.168.222.101node1testlinux02192.168.222.102node2testlinux03192.168.222.103准备工作01、关闭selinux和firewalld......
  • NoSQL之Redis集群
    目录1.Redis主从复制(1)Redis主从复制工作原理(2)搭建Redis主从复制2.Redis哨兵模式(1)Redis哨兵工作原理(2)搭建Redis哨兵模式3.Redis集群模式(1)集群模式的工作原理(2)集群模式的特点(3)搭建Redis群集模式(4)集群模式与哨兵模式的主要区别1.Redis主从复制(1)Redis主从复制工作原理1.......
  • HDFS分布式集群搭建
    1、集群简介Hadoop集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起。另外,对于Hadoop的集群来讲,可以分为两大类角色:master和slave。(1)HDFS集群:负责海量数据的存储,集群中的角色主要有:NameNode(一个,master)、DataNode(若干,slave)和SecondaryName......
  • 2.基于Containerd运行时搭建Kubernetes多控制平面集群实践-腾讯云开发者社区-腾讯云
    https://cloud.tencent.com/developer/article/2129846 2.基于Containerd运行时搭建Kubernetes多控制平面集群实践发布于2022-09-2919:27:53 1K0 举报文章被收录于专栏:全栈工程师修炼之路[TOC] 0x00前言简述本章主要讲述,如果使用kubead......
  • 无人机集群路径规划:四种优化算法(GOOSE、APO、LPO、SBOA)求解无人机集群路径规划,提供MAT
     一、单个无人机路径规划模型介绍无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径,使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一,它可以通过算法和模型来确定无人机的航迹,以避开障碍物、优化飞行时间和节省能量消耗。二、无人......
  • 无人机集群路径规划:四种优化算法(GOOSE、APO、DCS、SBOA)求解无人机集群路径规划,提供MAT
     一、单个无人机路径规划模型介绍无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径,使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一,它可以通过算法和模型来确定无人机的航迹,以避开障碍物、优化飞行时间和节省能量消耗。二、无人......
  • Kafka抛弃Zookeeper后如何启动?
    Kafaka如何下载官网地址目前Kafka最新的版本就是3.7.1我们可以看到下面这两个版本信息?什么意思呢?Scala2.12-kafka_2.12-3.7.1.tgz(asc,sha512)Scala2.13-kafka_2.13-3.7.1.tgz(asc,sha512)我们应该知道,一个完整的Kafka实例,至少包含了3部分:生产者-ProducerBr......