zookeeper集群部署以及zookeeper原理

文章目录

  • 简介
  • 工作原理
  • 特性
  • 官网地址
  • 准备
    • 节点准备
    • 环境准备
      • JAVA
      • 主机映射
  • 部署

简介

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
ZooKeeper包含一个简单的原语集,提供Java和C的接口。
ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在$zookeeper_home\src\recipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本。

工作原理

ZooKeeper是以Fast Paxos算法为基础的,Paxos 算法存在活锁的问题,即当有多个proposer交错提交时,有可能互相排斥导致没有一个proposer能提交成功,而Fast Paxos做了一些优化,通过选举产生一个leader (领导者),只有leader才能提交proposer,具体算法可见Fast Paxos。因此,要想弄懂ZooKeeper首先得对Fast Paxos有所了解。
ZooKeeper的基本运转流程:
1、选举Leader。
2、同步数据。
3、选举Leader过程中算法有很多,但要达到的选举标准是一致的。
4、Leader要具有最高的执行ID,类似root权限。
5、集群中大多数的机器得到响应并接受选出的Leader。

特性

在Zookeeper中,znode是一个跟Unix文件系统路径相似的节点,可以往这个节点存储或获取数据。如果在创建znode时Flag设置为EPHEMERAL,那么当创建这个znode的节点和Zookeeper失去连接后,这个znode将不再存在在Zookeeper里,Zookeeper使用Watcher察觉事件信息。当客户端接收到事件信息,比如连接超时、节点数据改变、子节点改变,可以调用相应的行为来处理数据。Zookeeper的Wiki页面展示了如何使用Zookeeper来处理事件通知,队列,优先队列,锁,共享锁,可撤销的共享锁,两阶段提交。
那么Zookeeper能做什么事情呢,简单的例子:假设我们有20个搜索引擎的服务器(每个负责总索引中的一部分的搜索任务)和一个总服务器(负责向这20个搜索引擎的服务器发出搜索请求并合并结果集),一个备用的总服务器(负责当总服务器宕机时替换总服务器),一个web的cgi(向总服务器发出搜索请求)。搜索引擎的服务器中的15个服务器提供搜索服务,5个服务器正在生成索引。这20个搜索引擎的服务器经常要让正在提供搜索服务的服务器停止提供服务开始生成索引,或生成索引的服务器已经把索引生成完成可以提供搜索服务了。使用Zookeeper可以保证总服务器自动感知有多少提供搜索引擎的服务器并向这些服务器发出搜索请求,当总服务器宕机时自动启用备用的总服务器。

官网地址

Zookeeper官网

准备

节点准备

三个节点

  • IP(192.168.0.101) 端口(2181/2881/3881)
  • IP(192.168.0.102) 端口(2181/2881/3881)
  • IP(192.168.0.103) 端口(2181/2881/3881)

环境准备

JAVA

将jdk-8u141-linux-x64.tar.gz上传到三台服务器安装配置。
解压到/data/program/software/
并将文件夹重命名为java8
配置jdk全局变量。

#vi /etc/profile
export JAVA_HOME=/data/program/software/java8
export JRE_HOME=/data/program/software/java8/jre
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib 
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

主机映射

修改操作系统的/etc/hosts文件,添加IP与主机名映射:
#zookeeper cluster servers
192.168.0.101 bigdata1
192.168.0.102 bigdata2
192.168.0.103 bigdata3
下载zookeeper-3.4.9.tar.gz 到/data/program/software/目录

# pan.baidu.com/s/1TIscICrzaBHj7fTA01apMA?pwd=n1om

部署

解压zookeeper安装包,并对节点重民名
#tar -zxvf zookeeper-3.4.9.tar.gz
服务器1:

#mv zookeeper-3.4.9 zookeeper

服务器2:

 #mv zookeeper-3.4.9 zookeeper

服务器3:

#mv zookeeper-3.4.9 zookeeper

2.5 在zookeeper的各个节点下 创建数据和日志目录

#cd zookeeper
#mkdir data
#mkdir logs

2.6 重命名配置文件
将zookeeper/conf目录下的zoo_sample.cfg文件拷贝一份,命名为zoo.cfg:
#cp zoo_sample.cfg zoo.cfg
修改zoo.cfg 配置文件

clientPort=2181
dataDir=/data/program/software/zookeeper/data
dataLogDir=/data/program/software/zookeeper/logs

server.1=bigdata1:2881:3881
server.2=bigdata2:2881:3881
server.3=bigdata3:2881:3881
参数说明:
tickTime=2000
tickTime这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳。
initLimit=10
initLimit这个配置项是用来配置Zookeeper接受客户端(这里所说的客户端不是用户连接Zookeeper服务器的客户端,而是Zookeeper服务器集群中连接到Leader的Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过10个心跳的时间(也就是tickTime)长度后Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是10*2000=20 秒。
syncLimit=5
syncLimit这个配置项标识Leader与Follower之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime的时间长度,总的时间长度就是5*2000=10秒。
dataDir=/data/program/software/zookeeper/data 
dataDir顾名思义就是Zookeeper保存数据的目录,默认情况下Zookeeper将写数据的日志文件也保存在这个目录里。
clientPort=2181
clientPort这个端口就是客户端(应用程序)连接Zookeeper服务器的端口,Zookeeper会监听这个端口接受客户端的访问请求。
server.A=B:C:D
server.1=bigdata1:2881:3881
server.2=bigdata2:2881:3881
server.3=bigdata3:2881:3881
A是一个数字,表示这个是第几号服务器;
B是这个服务器的IP地址(或者是与IP地址做了映射的主机名);
C第一个端口用来集群成员的信息交换,表示这个服务器与集群中的Leader服务器交换信息的端口;
D是在leader挂掉时专门用来进行选举leader所用的端口。
注意:如果是伪集群的配置方式,不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。
2.8 创建myid文件
在dataDir= dataDir=/data/program/software/zookeeper/data 下创建myid文件
编辑myid文件,并在对应的IP的机器上输入对应的编号。如在1上,myid文件内容就是1, 2上就是2, 3上就是3: 
#vi /myid## 值为1
#vi /myid## 值为2
#vi /myid## 值为3
2.9 启动测试zookeeper
(1)进入/bin目录下执行:
~~~shell
# /zkServer.sh start
# /zkServer.sh start
# /zkServer.sh start

在这里插入图片描述

(2)输入jps命令查看进程:
在这里插入图片描述

其中,QuorumPeerMain是zookeeper进程,说明启动正常
(3)查看状态:

# /zkServer.sh status

在这里插入图片描述

(4)查看zookeeper服务输出信息:
由于服务信息输出文件在/bin/zookeeper.out
$ tail -500 f zookeeper.out

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

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

相关文章

宝塔纯净版 7.6.0版本无需手机登录 [稳定版本/推荐]

下载地址:宝塔纯净版 7.6.0版本无需手机登录.zip 宝塔纯净版介绍 无需手机登录:不再有手机登录提示,或按照提示输入任意手机号密码即可模拟绑定; 安全:剥离了所有与宝塔官方的通信、上报、下发;并且不与…

Vue Excel 文件流导出乱码快速解决方案

今日在开发一个导出功能,原本一个非常简单的功能,却没想里面藏了陷阱! 背景 前端导出的文件流乱码,此时确定非后端问题(可以在postman导出是否正常来判断)。 前端导出: 后端正常数据&#xf…

黑马基于Web-socket的java聊天室基本解析

要是用Web-socket协议&#xff0c;我们要前端upgrade升级成web-socket协议 首先我们要引入springboot的websocket起步依赖&#xff0c;这样子方便使用&#xff0c;自己指定版本注意 <dependency><groupId>org.springframework.boot</groupId><artifactId&…

2种方法教你快速完成图片格式转换!

在数字世界中&#xff0c;图片是我们传递信息和表达创意的重要媒介。然而&#xff0c;不同的应用场景需要不同格式的图片。例如&#xff0c;网页设计可能需要使用PNG格式&#xff0c;而打印则需要使用JPG或PDF格式。这就需要我们经常进行图片格式转换。 下文小编将分享2种方法…

Ubuntu搭建VsCode C++ 开发环境

Ubuntu搭建VsCode C 开发环境 安装VS Code 使用命令来安装VS Code&#xff1a;他会下载vscode的最新版本。 sudo snap install --classic code如果不使用命令 的方式 在官网下载vscode安装包&#xff08; 后缀为 .deb的包 &#xff09;之后&#xff08;可以选择版本 &#x…

【JavaEE精炼宝库】多线程1(认识线程 | 创建线程 | Thread 类)

目录 一、认识线程 1.1 线程的概念&#xff1a; 1.2 为什么需要线程&#xff1a; 1.3 面试题.谈谈进程和线程的区别&#xff1a; 1.4 Java的线程和操作系统线程的关系&#xff1a; 二、创建线程 2.1 创建线程的5种写法&#xff1a; 2.1.1 写法1.继承 Thread 类&#xf…

codeforces round944(div4)A~F题解

文章目录 [A. My First Sorting Problem](https://codeforces.com/contest/1971/problem/A)[B. Different String](https://codeforces.com/contest/1971/problem/B)[C. Clock and Strings](https://codeforces.com/contest/1971/problem/C)[D. Binary Cut](https://codeforces…

5.10.10 用于图像识别的深度残差学习

1. 介绍 深度卷积神经网络为图像分类带来了一系列突破。深度网络自然地以端到端的多层方式集成低/中/高级特征和分类器&#xff0c;并且特征的“级别”可以通过堆叠层的数量&#xff08;深度&#xff09;来丰富。 学习更好的网络是否像堆叠更多层一样容易&#xff1f; 这个问…

网络工程师----第二十七天

计算机基 第四章&#xff1a;网络层 网络层提供服务的特点&#xff1a;网络层向上只提供简单的、无连接的、尽最大努力交付的数据报服务&#xff0c;不保证可靠通信。 网际协议IP&#xff1a; *地址解析协议ARP(Address Resolution Protocol) *网际控制报文协议ICMP(Inter…

分享一个非常好用的安装包下载网站

当我们需要下载linux下的某些包,以便在自己的环境下进行编译自己的安装包的时候,可能需要用到一些各种版本的依赖包,从网上 百度会很麻烦。 这里分享一个很好用的安装包下载网站,记得点赞收藏 网站: Red Hat Enterprise Linux Repositories - pkgs.org 找到对应系统,然…

【Java的抽象类和接口】

1. 抽象类 1.1 抽象类概念 在面向对象的概念中&#xff0c;所有的对象都是通过类来描绘的&#xff0c;但是反过来&#xff0c;并不是所有的类都是用来描绘对象的&#xff0c;如果 一个类中没有包含足够的信息来描绘一个具体的对象&#xff0c;这样的类就是抽象类。 以上代码中…

4.Jmeter阶梯加压Stepping Thread Group

1. 先去Jmeter下载地址下载PluginsManager&#xff0c;放置在Jmeter的lib/ext 目录下 &#xff0c;重启Jmeter 2. 在插件管理器查找并安装jpgc - Standard Set,重启Jmeter 3.右键测试计划->添加->Threads(Users)->jpgc - Stepping Thread Group 然后设置阶梯加压参数…

【保姆级教程】如何将火爆全网的Kimi接入微信公众号,成为你的专属AI智能客服

【保姆级教程】如何将火爆全网的Kimi接入微信公众号&#xff0c;成为你的专属AI智能客服 在数字化转型的浪潮中&#xff0c;企业越来越重视利用人工智能技术提升客户服务的效率和质量。Kimi 作为一款功能强大的AI智能助手&#xff0c;能够理解自然语言、提供信息搜索、解析网址…

图像/视频恢复和增强CodeFormer

github&#xff1a;https://github.com/sczhou/CodeFormer 尝试增强旧照片/修复人工智能艺术 面部修复 面部色彩增强和恢复 脸部修复

[XYCTF]-PWN:Intermittent解析(pop栈内数据构造shellcode,自己编写shellcode)

查看ida 这里程序只会把输入的前12字节内容移到虚拟地址里&#xff0c;然后执行&#xff0c;大小不足以让执行shellcode&#xff0c;只能用pop寄存器调用read&#xff0c;再把gets hell的shellcode输入进去 完整exp&#xff1a; from pwn import* context(log_leveldebug,arc…

【数据结构】平衡二叉树(插入、查找、删除)解析+完整代码

3.2 平衡二叉树 3.2.1 定义 平衡二叉树&#xff0c;简称平衡树&#xff08;AVL树&#xff09; 树上任一结点的左右子树高度差不超过1。 结点的平衡因子左子树高-右子树高 3.2.2 插入操作 插入结点后&#xff0c;可能造成不平衡 要调整最小不平衡子树&#xff0c;使其恢复平衡。…

Python以docker形式部署,flask简易服务器。

公司大部分都是springboot 服务器&#xff0c;有时候用到python写的一些模型&#xff0c;部署在linux上进行处理 首先项目这样&#xff1a; flask就不说了&#xff0c;快捷服务器&#xff0c; # -*- coding: utf-8 -*-from flask import Flask, request# 实例化Flask对象 app…

齐护K210系列教程(二十六)_口罩检测

口罩检测 1.下载模型1.1使用机器码下载模型1.2将模型文件下载到SD卡1.3 烧录基本固件 2.程序解释3.课程资源联系我们 要实现此程序的功能需要&#xff1a; 支持 kmodelv4 支持固件 人脸口罩检测模型的模型 模型下载地址为&#xff1a;https://maixhub.com/model/zoo/64 机器码…

简单4步教你电脑摄像头怎么打开!

电脑摄像头是现代计算机的一个重要组件&#xff0c;它为我们提供了进行视频通话、视频会议、拍摄照片和录制视频等功能。然而&#xff0c;对于一些用户来说&#xff0c;不清楚电脑摄像头怎么打开。在本文中&#xff0c;我们将介绍几个简单的步骤&#xff0c;帮助您在电脑上轻松…

易康001:易康多尺度分割结果异常

前言 易康是一种在遥感领域常用的数据处理软件&#xff0c;它主要是用于面向对象的分类&#xff0c;涵盖了分割、模糊分类、监督分类等流程。但是在进行多尺度分割时&#xff0c;往往会遇到一些问题&#xff0c;例如下面图片所示&#xff1a; 1 多尺度分割问题 这种问题一般是…