Zookeeper学习1:概述、安装、应用场景、集群配置

文章目录

    • 概述
    • 安装
      • Linux
      • Windows
    • 配置参数
    • 集群
      • 参考配置文件
      • 配置步骤流程
      • 启动

概述

Zookeeper: 为分布式框架组件提供协调服务的中间件 == 【类似:文件系统+通知机制】== 负责存储上下层应用关系的数据以及接收观察者注册监听,一旦观察查关心的数据发生变化,则Zookeeper会将数据变化推送给观察者

官网: https://zookeeper.apache.org/

组成: Zookeeper由一个领导者(Leader),多个跟随者(Follower)组成的集群 == 半数以上的节点存活,集群才能正常工作,并且建议安装奇数台服务器集群

全局数据一致: 每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的。

实时性: 客户端A更新信息到服务端A,则客户端B能在一定很快的时间范围内也同步回最新服务端A数据

Zookeeper内部数据结构: 树结构,每个节点最多存储1MB,并且每个数据节点有节点唯一标识进行识别区分

Zookeeper集群同步逻辑: 客户端向ZooKeeper集群发送写请求时,请求 首先会发送给Leader节点 ,Leader节点会将该请求广播给所有Follower节点,只有当大多数节点(包括Leader节点)都写入成功后,写操作才会被确认为成功(并通知客户端,客户端收到写入成功响应无需等待集群中所有机器都写入成功,只需过半机器写入成功即可,后续慢慢会执行同步,最终达到zxid一致) ,从而保证数据的一致性

身份证
修改数据的次数
投票的轮数
专有名词
SID:每个zookeeper的唯一标识,则dataDir下面的myid里面的值
ZXID:事务ID、标识依次服务器状态的变更 == 最终Zookeeper集群中ZXID会保持一致
Epoch:每个Leader的任期代号 == Zookeeper机器每完成一次投票则+1
//奇数台解释,以及半数以上人同意才可进行一致性读写操作
举个通俗易懂的例子,就好比开会需要做决定,
如果有5个人参与讨论,只要有3个人同意,就可以做出决定。
但如果只有4个人参与讨论,那么如果有2个人持不同意见,就无法做出决定
因此,为了确保能够做出决定,最好让参与讨论的人数为奇数。这样就能够确保在发生分歧时,仍然能够做出决定。


架构图
在这里插入图片描述

Zookeeper内部数据结构
在这里插入图片描述

1个
多个
Zookeeper集群
领导者
跟随者
Zookeeper应用场景
统一命名服务
统一配置管理
统一集群管理
服务器节点动态上下线
软负载均衡

安装

Linux

下载地址: https://archive.apache.org/dist/zookeeper/

//解压
mkdir /opt/module/ && tar -zxvf apache-zookeeper-3.9.1-bin.tar.gz -C /opt/module && cd /opt/module/



//修改目录名
mv apache-zookeeper-3.9.1-bin  zookeeper-3.9.1

//创建zookeeper数据目录
cd zookeeper-3.9.1 && mkdir zkData


//修改配置文件 == 数据目录改为zkData
cp conf/zoo_sample.cfg conf/zoo.cfg 
sed -i '/^dataDir=/c\dataDir=/opt/module/zookeeper-3.9.1/zkData' conf/zoo.cfg


//查看配置文件
more conf/zoo.cfg

//==============服务端======================
//启动zookeeper服务端 == 注意确保2181、39306、8080 这三个端口不会被占用,否则启动失败
// zookeeper服务端启动
cd /opt/module/zookeeper-3.9.1/bin && sh zkServer.sh start
// zookeeper服务端状态查看
cd /opt/module/zookeeper-3.9.1 && sh bin/zkServer.sh status
// zookeeper服务端状态停止
cd /opt/module/zookeeper-3.9.1 && sh bin/zkServer.sh stop




//查看zookeeper服务端是否启动成功 == 出现QuorumPeerMain说明启动成功
jps -l

//查看zookeeper服务端占用的端口号
netstat -anlp |grep $(jps -l | grep QuorumPeerMain |  awk '{print $1}') | grep tcp


//==============客户端======================
cd /opt/module/zookeeper-3.9.1 && sh bin/zkCli.sh 


//查看zookeeper客户端占用的端口号
netstat -anlp |grep $(jps -l | grep ZooKeeperMain | awk '{print $1}') | grep tcp



服务端相关
在这里插入图片描述

客户端相关
在这里插入图片描述

Windows

配置参数

配置文件路径: /opt/module/zookeeper-3.9.1/conf/zoo.cfg

在这里插入图片描述

//tickTime
默认2000
通信心跳时间,Zookeeper服务器与客户端心跳时间,单位毫秒

//initLimit
默认10
【建立连接】
LeaderFollower初始连接时能容忍的最多心跳数(tickTime的数量)
LF初始通信时限(tickTime * initLimit时间范围内未通信成功,则认为失败)、zookeeper集群LeaderFollower的通信时限

//syncLimit
默认5
【建立连接之后的通信】
LeaderFollower.之间通信时间如果超过syncLimit*tickTime,Leader认为Follwer死掉,从服务器列表中删除Follwer//dataDir
保存Zookeeper中的数据

//clientPort
客户端连接端口,通常不做修改。

集群

参考配置文件

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/opt/module/zookeeper-3.9.1/zkData
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# https://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

## Metrics Providers
#
# https://prometheus.io Metrics Exporter
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpHost=0.0.0.0
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true

# 集群配置
server.107=192.168.19.107:2888:3888
server.108=192.168.19.108:2888:3888
server.109=192.168.19.109:2888:3888

配置步骤流程

测试: 准备三台虚拟机107、108、109

//===========================
// 在107里面运行下面的命令

//集群必须中每台zookeeper必须设置一个唯一的身份证号
 echo 107 > /opt/module/zookeeper-3.9.1/zkData/myid 

//将107里面的zookeeper同步到另外两台服务器上

rsync -avz /opt/module/ root@192.168.19.108:/opt/module

rsync -avz /opt/module/ root@192.168.19.109:/opt/module


// 在108里面运行下面的命令
echo 108 > /opt/module/zookeeper-3.9.1/zkData/myid


// 在109里面运行下面的命令
echo 109 > /opt/module/zookeeper-3.9.1/zkData/myid

//================================================
//=================
//================================================





//配置文件添加集群信息 == opt/module/zookeeper-3.9.1/conf/zoo.cfg
server.zookeeper的身份证号=zookeeper的ip:集群间的通信端口号:集群leader挂了重新选举新Leader的端口号
//配置文件添加的信息
# 集群配置
server.107=192.168.19.107:2888:3888
server.108=192.168.19.108:2888:3888
server.109=192.168.19.109:2888:3888



//同步文件过去
rsync -avz /opt/module/zookeeper-3.9.1/conf/zoo.cfg root@192.168.19.108:/opt/module/zookeeper-3.9.1/conf
rsync -avz /opt/module/zookeeper-3.9.1/conf/zoo.cfg root@192.168.19.109:/opt/module/zookeeper-3.9.1/conf

在这里插入图片描述

启动


107服务器
在这里插入图片描述


108服务器
在这里插入图片描述


107服务器
在这里插入图片描述


109服务器
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/421378.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣SQL50 无效的推文 查询

Problem: 1683. 无效的推文 思路 👨‍🏫 参考 char_length(str):计算 str 的字符长度length(str):计算 str 的字节长度 Code select tweet_id from Tweets where char_length(content) > 15;

Docker中使用Tomcat并部署war工程

系列文章目录 文章目录 系列文章目录前言一、构建镜像二、运行镜像三、列出正在运行的容器四、停止正在运行的容器 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文…

java 基础上(1)(核心知识搭配代码)

前言 java的学习分为了上部分以及下部分进行学习,上部分就是对于java的基础知识,面向对象上,面向对象下,异常操作,javaApi;下部主要是集合,泛型,反射,IO流,J…

AcWing 466. 回文日期

先贴个题目: 以及原题链接:466. 回文日期 - AcWing题库https://www.acwing.com/problem/content/468/ 这题乍一看有点恶心,如果枚举日期还要判断合法性,然后每个日期再判断是不是回文,即麻烦,时间复杂度又高…

CSS 自测题 -- 用 flex 布局绘制骰子(一、二、三【含斜三点】、四、五、六点)

一点 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>css flex布局-画骰子</title><sty…

APP自动化测试-入门示例

入门示例 通过上一篇博客APP自动化测试介绍-CSDN博客的学习&#xff0c;相信大家对APP自动化测试已经有了一定的了解&#xff0c;下面演示一下入门示例 1. 配置Appium 1.1. 点击Appium图标&#xff0c;打开服务器&#xff1a; 1.2. 点击Edit Configurations,进入配置页面&am…

vue3项目中如何一个vue组件中的一个div里面的图片铺满整个屏幕样式如何设置

在Vue 3项目中&#xff0c;要使一个div内的图片铺满整个屏幕&#xff0c;你需要确保几个关键点&#xff1a;div元素和图片元素的样式设置正确&#xff0c;以及确保它们能够覆盖整个视口&#xff08;viewport&#xff09;。以下是一个简单的步骤和代码示例&#xff0c;帮助你实现…

帝国cms7.5仿非小号区块链门户资讯网站源码 带手机版

帝国cms7.5仿非小号区块链门户资讯网站源码 带手机版 带自动采集 开发环境&#xff1a;帝国cms 7.5 安装环境&#xff1a;phpmysql 包含火车头采集规则和模块&#xff0c;采集目标站非小号官网。 专业的数字货币大数据平台模板&#xff0c;采用帝国cms7.5内核仿制&#xff0…

Android挖取原图手指触点区域RectF(并框线标记)放大到ImageView宽高与矩阵mapRadius,Kotlin

Android挖取原图手指触点区域RectF(并框线标记)放大到ImageView宽高与矩阵mapRadius&#xff0c;Kotlin 这里 Android挖取原图中心区域RectF(并框线标记)放大到ImageView宽高&#xff0c;Kotlin-CSDN博客 实现的是把原图中心区域的一片小图挖取出来放大放到下面的ImageView里面…

STM32------分析GPIO寄存器

一、初始LED原理图 共阴极led LED发光二极管&#xff0c;需要有电流通过才能点亮&#xff0c;当有电压差就会产生电流 二极管两端的电压差超过2.7v就会有电流通过 电阻的作用 由于公式IV/R 不加电阻容易造成瞬间电流无穷大 发光二极管工作电流为10-20MA 3.3v / 1kΩ 3.…

深度学习-回顾经典AlexNet网络:山高我为峰

深度学习-回顾经典AlexNet网络之山高我为峰 深度学习中&#xff0c;经典网络引领一波又一波的技术革命&#xff0c;从LetNet到当前最火的GPT所用的Transformer&#xff0c;它们把AI技术不断推向高潮。2012年AlexNet大放异彩&#xff0c;它把深度学习技术引领第一个高峰&#x…

iOS消息发送流程

Objc的方法调用基于消息发送机制。即Objc中的方法调用&#xff0c;在底层实际都是通过调用objc_msgSend方法向对象消息发送消息来实现的。在iOS中&#xff0c; 实例对象的方法主要存储在类的方法列表中&#xff0c;类方法则是主要存储在原类中。 向对象发送消息&#xff0c;核心…

Flink:动态表 / 时态表 / 版本表 / 普通表 概念区别澄清

博主历时三年精心创作的《大数据平台架构与原型实现&#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行&#xff0c;点击《重磅推荐&#xff1a;建大数据平台太难了&#xff01;给我发个工程原型吧&#xff01;》了解图书详情&#xff0c;…

git安装4.3

一、git的安装 1、下载git包 下载git包url&#xff1a;https://git-scm.com/download/win 下载包分为&#xff1a;64位和32位 2、点击安装包 2、选择安装路径 3、 点击下一步 4、点击next 5、点击next 6、点击next 7、 8、 9、 10、 11、 12、在桌面空白处&#xff0c;右键…

使用正则表达式的SqlServer Check约束实例

有表如下&#xff1b;会员表&#xff0c;第一个字段是会员编号&#xff0c;varchar(24)类型&#xff1b;第二个字段是单位名称&#xff1b; 现在插入一条记录&#xff0c;会员编号为abcd&#xff1b;插入了&#xff1b; 下面要添加一个约束&#xff0c;会员编号字段只能为数字的…

后台组件体系

从今天开始进入更细粒度说明。后台微服务是由组件构成的。平台的开发理念是为甲方打造一个生态环境。安装实施时为客户安装私仓来管理组件。开发微服务时鼓励拆分为组件。开发新功能时&#xff0c;先看有没有相关组件&#xff0c;有的话就在pom.xml文件&#xff08;不要问我这个…

曾桂华:车载座舱音频体验探究与思考| 演讲嘉宾公布

智能车载音频 I 分论坛将于3月27日同期举办&#xff01; 我们正站在一个前所未有的科技革新的交汇点上&#xff0c;重塑我们出行体验的变革正在悄然发生。当人工智能的磅礴力量与车载音频相交融&#xff0c;智慧、便捷与未来的探索之旅正式扬帆起航。 在驾驶的旅途中&#xff0…

相机格式化了还能恢复照片吗?内存卡数据恢复方法

相机已成为我们记录生活、工作和学习的重要工具。然而当相机意外格式化后&#xff0c;许多珍贵的照片可能会瞬间消失&#xff0c;这无疑给我们的生活和工作带来不小的困扰。那么相机格式化后&#xff0c;我们是否还有机会找回那些丢失的照片呢&#xff1f; 首先我们需要了解相机…

南京观海微电子---如何区分LED显示屏与LED背光源?

LED屏绝对不是常见的LED背光源&#xff0c;LED显示屏也被称为电子显示屏或浮动字。由LED点阵和LEDPC面板&#xff0c;通过红&#xff0c;蓝&#xff0c;白&#xff0c;绿LED的亮灭来显示文字&#xff0c;图像&#xff0c;动画&#xff0c;视频&#xff0c;内容。可根据不同的场…

ABAP - OOALV 用户交互事件

当用户要根据ALV进行某些功能操作比如打印表单时&#xff0c;OOALV标准按钮无法满足用户需求的时候&#xff0c;就要用到自定义按钮来实现了。思路&#xff1a;在OOALV增加一个自定义按钮&#xff0c;类CL_GUI_ALV_GRID提供了内置事件toolbar来完成&#xff0c;通过自定义按钮的…