Zookeeper系统性学习-应用场景以及单机、集群安装

Zookeeper 是什么?

Zookeeper 为分布式应用提供高效且可靠的分布式协调服务,提供了诸如统一命名服务、配置管理和分布式锁等分布式的基础服务。在解决分布式数据一致性方面,ZooKeeper 并没有直接采用 Paxos 算法,而是采用了名为 ZAB 的一致性协议

ZooKeeper 主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储。但是 ZooKeeper 并不是用来专门存储数据的,它的作用主要是用来维护和监控存储数据的状态变化。通过监控这些数据状态的变化,从而可以达到基于数据的集群管理

很多大名鼎鼎的框架都基于 ZooKeeper 来实现分布式高可用,如:Dubbo、Kafka 等

Zookeeper 一个最常用的使用场景就是用于担任服务生产者和服务消费者的注册中心

Zookeeper 数据结构

Zookeeper 数据结构为一棵树,每一个节点成为 ZNode,每个 ZNode 默认存储 1MB 数据

在这里插入图片描述

Zookeeper 应用场景

统一命名服务

对多个相同服务进行统一命名,可以负载均衡以及提高可用性

在这里插入图片描述

统一配置管理

在分布式环境下,保证所有节点配置信息一致,并保证在修改配置文件之后,快速可以同步到各个节点中

实现:在 Zookeeper 中维护一份配置文件,客户端监听配置文件,保证配置文件修改后可以同步到最新配置

在这里插入图片描述

Zookeeper 安装

https://zookeeper.apache.org/

去官网下载 3.5.7-bin-tar.gz

单机

  1. 安装 jdk
  2. 下载 bin.tar.gz 包
  3. 解压 tar -zxvf xxxbin-tar.gz -C /解压目录

修改 zookeeper 配置文件 ./conf/zoo.cfg

cd conf
# 将示例配置文件复制一份
cp zoo_sample.cfg zoo.cfg
# 修改配置文件
vi zoo.cfg
# 修改 dataDir 数据存储目录,可以在安装的zookeeper目录下创建 zkData 目录,将数据存储目录设置为 zkData 目录
dataDir= # 启动服务
./bin/zkServer.sh start
# 查看是否启动
jps -l# 启动客户端
./bin/zkCli.sh# 查看 zookeeper 状态
bin/zkServer.sh status

配置文件解析

Zookeeper 配置文件内容如下:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper
clientPort=2181
  • tickTime

    通信心跳时间,单位毫秒,是 Zookeeper 服务器与客户端心跳事件

  • initLimit

    LF 初始通信时间,Leader 和 Follower 初始连接时能容忍的最多心跳数

    即如果 initLimit=2,tickTime=2000,那么 Leader 和 Follower 初始连接时间最大不能超过 2 * 2000ms = 2秒

  • syncLimit

    LF 同步通信时限

    Leader 和 Follower 之间通信如果超过 syncLimit * tickTime,则 Leader 认为 Follower 挂掉,从服务器列表中删除 Follower

  • dataDir:保存 Zookeeper 中的数据

    默认 tmp 目录,Limux 中 tmp 目录定期删除,一般不用默认目录

Zookeeper 集群安装

在 3 台服务器上部署 zookeeper,假设服务器分别为:zk1、zk2、zk3

部署流程为:

1、解压安装

解压安装到 /develop/ 目录下,并且改名为 zookeeper,最终 zookeeper 目录为 /develop/zookeeper/

2、配置服务器编号

单台服务器编号配置

# 在 /develop/zookeeper/ 目录下创建目录 zkData,用于存放数据
cd /develop/zookeeper
mkdir zkData# 在 zkData 目录下创建 myid 文件
vi myid# myid 文件内容,作为身份标识
1

将上述的 zookeeper 目录拷贝到其他两台服务器,并且修改 myid 内容分别为 2、3

3、配置 zoo.cfg 文件

# 在每一台服务器将 zoo_sample.cfg 命名为 zoo.cfg
mv zoo_sample.cfg zoo.cfg
vim zoo_cfg# 修改数据存储路径
dataDir=/develop/zookeeper/zkData
# 增加集群配置
server.1=ip:2888:3888
server.2=ip:2888:3888
server.3=ip:2888:3888

上边集群配置参数解释:

server.A=B:C:D

A 表示为服务器的 myid

B 表示服务器 ip

C 表示服务器 Follower 和集群中的 Leader 服务器交换信息的端口

D 表示集群中 Leader 如果挂了,需要用来选举的通信端口

4、启动集群

在每台服务器中进行启动

zkServer.sh start

可以使用命令 zkServer.sh status 查看启动状态,当集群超过半数节点启动后,状态才为正常(如果不超过半数启动,无法选举 Leader)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android Studio Gradle下载慢解决方法

Android Studio Gradle下载慢解决方法 最近在练习模型部署,主要是在手机端部署,所以使用到了Android Studio,但是在创建项目的时候,一致在下载gradle,而且网速还很慢,不对,是极慢哪种&#xff0…

MQTT发布、订阅和取消订阅

在本文中,我们将深入了解MQTT发布、订阅和取消订阅相关的内容。如果你刚接触发布/订阅模型,建议阅读本专栏之前的文章。 什么是MQTT发布消息 在MQTT中,一个客户端连接到代理(broker)之后可以立即发布消息。这些消息依…

NetSuite预算管理实践

NetSuite预算相关的原生功能有两个: 一个是Expense Commitments And Budget Validation这个SuiteApp,我们在一年前写过一篇文章介绍过。它强调预算的过程控制,但由于功能很有限,没有实际用处。 NetSuite Budget功能包_netsuite …

Vue3 pinia的基本使用

pinia的使用跟vuex很像,去除了很多没用的api,写法有两种,一种老式的选项式api还有一种组合式api,用哪种根据自己喜好来,以下示例为组合式api 更多教程参考官网:pinia官网https://pinia.vuejs.org/zh/ 安装…

机器学习基本概念2

资料来源: https://www.youtube.com/watch?vYe018rCVvOo&listPLJV_el3uVTsMhtt7_Y6sgTHGHp1Vb2P2J&index1 https://www.youtube.com/watch?vbHcJCp2Fyxs&listPLJV_el3uVTsMhtt7_Y6sgTHGHp1Vb2P2J&index2 分三步 1、 定义function b和w是需要透…

linux之autoconf(1)基础介绍

Linux之autoconf(1)基础介绍 Author:Onceday Date:2023年2023年12月10日 漫漫长路,才刚刚开始… 本文主要内容翻译自Autoconf官方文档,仅供学习交流之用。 全系列文章请查看专栏: buildroot编译框架_Once_day的博客-CSDN博客。…

FL Studio21最新FL水果编曲软件中文版在哪下载?

FL Studio21水果编曲软件是一款专业的音乐制作软件,被广泛地应用于电子音乐、hip-hop、流行乐等多种音乐类型的制作。该软件提供了丰富的音频编曲工具和音乐效果器,让用户可以轻松地创作出高品质的音乐作品。同时,这也是一款非常易于上手的软…

[ 云计算 | Azure 实践 ] 在 Azure 门户中创建 VM 虚拟机并进行验证

文章目录 一、前言二、在 Azure Portal 中创建 VM三、验证已创建的虚拟机资源3.1 方法一:在虚拟机服务中查看验证3.1 方法二:在资源组服务中查看验证 四、文末总结 一、前言 本文会开始创建新系列的专栏,专门更新 Azure 云实践相关的文章。 …

YOLOv8改进 | 2023检测头篇 | 利用AFPN改进检测头适配YOLOv8版(全网独家创新)

一、本文介绍 本文给大家带来的改进机制是利用今年新推出的AFPN(渐近特征金字塔网络)来优化检测头,AFPN的核心思想是通过引入一种渐近的特征融合策略,将底层、高层和顶层的特征逐渐整合到目标检测过程中。这种渐近融合方式有助于…

软件无线电SDR-频谱采集python实现

sdr做的频谱采集,保存的500张频谱图,能看出来是什么东西吗?

VC++使用GetProcessTimes获取进程创建时间、销毁时间、用户态时间、内核态时间

一、GetProcessTimes函数简介(微软MSDN) 微软提供了一个非常有用的API函数GetProcessTimes用来获取进程创建时间、销毁时间、用户态时间、内核态时间,msdn连接为:GetProcessTimes 函数 (processthreadsapi.h) 其函数原型为&#…

基于NIQE算法的图像无参考质量评价算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 空域NSS特征提取 4.2 图像块选取 4.3 MVG模型 4.4 NIQE指标 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 clc; clear; close all; …

轻量封装WebGPU渲染系统示例<46>- 材质组装管线(MaterialPipeline)灯光、阴影、雾以及多Pass(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/material/src/voxgpu/sample/MaterialPipelineMultiPasses.ts 当前示例运行效果: 此示例基于此渲染系统实现,当前示例TypeScript源码如下: export class MaterialPipelin…

java实现网络聊天

网络聊天实现步骤(从功能谈论方法): 客户端: 1.登录面板:注册提醒用户注册格式,登录账号密码不为空,点击登录的时候需要连接服务器端,启动聊天面板。(监听用户点击登录…

Windows下nginx的启动,重启,关闭等功能bat脚本

echo off rem 提供Windows下nginx的启动,重启,关闭功能echo begincls ::ngxin 所在的盘符 set NGINX_PATHG:::nginx 所在目录 set NGINX_DIRG:\projects\nginx-1.24.0\ color 0a TITLE Nginx 管理程序增强版CLSecho. echo. ** Nginx 管理程序 *** echo.…

JAVA使用HTTP代码示例

你好,Java开发者们!今天,我要给你们带来一场硬核的盛宴,那就是在Java中使用HTTP协议进行网络通信的代码示例。准备好接受挑战了吗?Lets go! 首先,我们需要导入一些必要的库,它们将成…

C++枚举类

枚举 C11有作用域枚举和无作用域枚举 无作用域枚举 特点 全局作用域:无作用域枚举的成员(枚举值)在包含它们的作用域内是直接可见的,不需要使用枚举类型名称作为前缀。 隐式类型转换:无作用域枚举的成员可以隐式地转换…

鸿蒙开发组件之ForEach列表

一、ForEach函数 ForEach函数是一个迭代函数,需要传递两个必须参数和一个可选参数。主要通过迭代来获取参数arr中的数据不断的生成单个Item来生成鸿蒙中的列表样式 二、先创建单个的Item的UI 通过嵌套Row与Column来实现单个Item的UI。例如图中没有折扣的可以看成一…

用23种设计模式打造一个cocos creator的游戏框架----(八)适配器模式

1、模式标准 模式名称:适配器模式 模式分类:结构型 模式意图:适配器模式的意图是将一个类的接口转换成客户端期望的另一个接口。适配器模式使原本接口不兼容的类可以一起工作。 结构图: 适用于: 系统需要使用现有的…

309. 买卖股票的最佳时机含冷冻期(leetcode) 动态规划思想

文章目录 前言一、题目分析二、算法原理1.状态表示2.状态转移方程3.初始化边界条件4.填表顺序5.返回值是什么 三、代码实现总结 前言 在本文章中,我们将要详细介绍一下Leetcode中买卖股票的最佳时机含冷冻期相关的内容,本题采用动态规划的思想解决 一、…