当前位置:首页 > 数据库 > 正文内容

zookeeper基础知识共享(一)

邻居的猫1个月前 (12-09)数据库1441

写在前面

今日来学习Zookeeper部分的常识,之后会学习hbase的常识。

Zookeeper简介

Zookeeper是一个高效的分布式和谐服务,能够供给以下功用:

  • 装备信息办理
  • 命名
  • 分布式同步
  • 集群办理
  • 数据库切换等服务

它不合适用来存储很多信息,而是用于存储一些装备信息、发布与订阅等少数数据。以下是Zookeeper的典型运用场景:

  • Hadoop
  • Storm
  • 音讯中间件
  • RPC服务结构
  • 分布式数据库同步体系

Zookeeper集群

Zookeeper集群中节点的个数一般为奇数(>=3)。假如集群中的Master节点挂掉,且剩下节点数超越对折时,集群能够经过推举推举新的主节点持续对外供给服务。

客户端建议业务恳求时,业务的成果在整个Zookeeper集群中一切机器上的运用是共同的。不会呈现集群中部分机器运用了该业务,而其他机器未运用该业务的状况。Zookeeper确保集群中一切机器的数据模型共同。

Zookeeper能够确保客户端恳求的次序,每个恳求都会分配一个大局仅有的递加编号,用来反映业务操作的先后次序。

Zookeeper将全量数据保存在内存中,并直接服务于一切的非业务恳求。因而,在以读操作为主的场景中,Zookeeper功能十分杰出。

Zookeeper的数据结构与节点人物

Zookeeper运用的首要数据结构是树形结构,根节点为/。Zookeeper集群中的节点有以下几种身份:

  • Leader:担任客户端写恳求(writer类型的恳求)。
  • Follower:担任客户端读恳求(reader类型的恳求),并参加Leader推举。
  • Observer:是特别的Follower节点,能够接纳客户端的读恳求,但不会参加推举。Observer能够用来扩展体系的读才干,提高读取功能。

Zookeeper的规划理念

Zookeeper是一个根据观察者形式规划的分布式服务办理结构。它担任存储和办理相关数据,并接纳观察者的注册。一旦这些数据的状况发生变化,Zookeeper会通知已注册的观察者,以便观察者履行相关操作。

Zookeeper的协议与共同性确保

Zookeeper运用ZAB原子播送协议,节点之间的数据共同性算法选用Paxos算法,能够确保分布式环境中数据的共同性。

ZAB(Zookeeper原子播送协议)

具体介绍ZAB协议

Paxos算法

Paxos算法处理的问题是,如安在分布式体系中就某个值(抉择)达到共同。典型的运用场景包含:分布式数据库体系中,假如各节点的初始状况共同,且履行相同的操作序列,则它们终究会得到共同的状况。

为了确保每个节点履行相同的指令序列,需求经过共同性算法来确保每个节点看到的指令共同。Paxos算法便是为了处理分布式体系中的共同性问题,它是根据音讯传递模型的共同性算法。

Paxos算法不只能够用于分布式体系中的共同性确保,也适用于多个进程/线程需求达到共同的场景,包含:

  • 一台机器中多个进程/线程的数据共同性
  • 分布式文件体系或数据库中的并发读写
  • 分布式存储中多个副本呼应读写恳求的共同性

Zookeeper全解析——Paxos作为魂灵

Zookeeper(ZK)Server最根底的东西是什么呢?我想应该是Paxos。因而,本文将介绍Paxos及其在ZK Server中的完结。

什么是Paxos?

Paxos是一种根据音讯传递的共同性算法,由Leslie Lamport于1990年提出,近年来被广泛运用于分布式核算中。Google的ChubbyApache的Zookeeper都根据Paxos的理论进行完结。Paxos被认为是目前为止仅有老练的分布式共同性算法,其他算法往往是对Paxos的改善或简化。

需求指出的是,Paxos有一个条件:没有拜占庭将军问题。意思是,Paxos只要在一个可信的核算环境中才干建立,这个环境不该遭到侵略或损坏。

Paxos算法的描绘

Paxos描绘了这样一个场景:有一个叫做Paxos小岛(Island)的当地,岛上住着一批居民,他们的业务由一些特别的人来决议,这些人被称为议员(Senator)。议员的数量是固定的,不行更改。

岛上的每次业务改变都需求经过提议(Proposal),每个提议都有一个编号(PID),这个编号是递加的,不能后退。每个提议有必要得到超越对折议员的赞同才干收效。假如某个议员收到的提议编号小于等于他当时的编号,他会回绝该提议,并奉告对方“你的提议现已有人提过了”。

这个编号是每个议员在自己的记事本上记载的数字,跟着时刻的推移,议员会更新这个编号,确保提议依照正确的次序进行。整个议会的方针是:确保一切议员关于提议达到共同的观点

举个比如

假定岛上有三个议员:S1S2S3

  • S1提议将电费设定为1元/度,这时他将提议编号定为1。
  • 其他议员收到S1的提议后,查找自己的记事本,发现当时编号为0,所以承受这个提议,并记载编号为1。
  • 假如S1收到了超越对折(即2个议员)的赞同,他就会宣告“1号提议收效!”

抵触处理

假定S1和S2一起建议了提议:

  • S1提议设定电费为1元/度(提议编号为1)。
  • S2提议设定电费为2元/度(提议编号也是1)。

S3先收到S1的提议并赞同,接着收到S2的提议,但发现S2的提议编号小于等于自己当时的编号,因而回绝了S2的提议,S1的提议收效。

Paxos在Zookeeper中的运用

现在让我们将Paxos的概念与Zookeeper(ZK Server)中的完结对应起来:

  • 小岛(Island)—— Zookeeper集群(ZK Server Cluster)
  • 议员(Senator)—— Zookeeper Server节点
  • 提议(Proposal)—— ZNode的改变操作(如Create、Delete、SetData等)
  • 提议编号(PID)—— Zxid(ZooKeeper业务ID)
  • 正式法则 —— 一切ZNode及其数据

虽然概念对得上,可是Zookeeper中有一个特别人物——Leader。这个人物在Paxos中并不显着,但实际上它是处理“活锁”问题的要害。Paxos的作者Leslie Lamport在《The Part-Time Parliament》中说到,只要一个总统(President)能够宣布提议,以防止多个议员一起提议导致的抵触。

总统——ZK Server中的Leader

Zookeeper的Leader人物正是Paxos中的总统。在Zookeeper集群中,Leader担任和谐业务的处理并确保共同性,而Follower节点则跟从Leader的决议计划。

总统推举

总统(Leader)的推举机制是Paxos的一部分,推举进程或许比较复杂,Zookeeper运用Paxos来确保集群中的Leader共同性。你能够阅览相关博客了解更多具体信息:怎么选出总统

ZK Server的操作

让我们经过几个情形来更好地了解Zookeeper是怎么施行Paxos算法的。

状况一:

  • 客户端甲到某个ZK Server问询某条法则的状况(例如ZNode的数据)。ZK Server直接检查本地存储(local storage),并告知客户端成果。ZK Server会声明:“我的数据纷歧定是最新的。”假如客户端想要最新的数据,ZK Server会同步到Leader并回来最新成果。

状况二:

  • 客户端乙到某个ZK Server恳求修正数据(例如ZNode数据)。ZK Server会将该恳求提交给Leader,Leader会问询集群中的其他ZK Server的定见。当超越对折的ZK Server赞同后,Leader会发布指令,完结数据的修正,ZK Server回来给客户端。

状况三:

  • 假如ZK Server的Leader忽然挂掉,其他ZK Server会发现无法联系上Leader。此刻,ZK集群会发动Leader推举,推举出一个新的Leader。在此期间,客户端恳求会被回绝,直到推举完结。

总结

Paxos是Zookeeper的魂灵,它供给了分布式体系中达到共同性的根底。经过Paxos,Zookeeper确保了在分布式环境下的共同性与容错性。虽然Zookeeper还有其他特性(如Session、Watcher、Version等),但Paxos的中心原理仍然是了解Zookeeper作业的要害。

Zookeeper装置文档

1、上传并解压

上传装置包到master并解压

tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz -C /usr/local/soft
# 重命名
cd /usr/local/soft
mv apache-zookeeper-3.5.7-bin/ zookeeper-3.5.7

2、装备环境变量

vim /etc/profile

# 参加下列内容
ZOOKEEPER_HOME=/usr/local/soft/zookeeper-3.5.7
export PATH=$PATH:$ZOOKEEPER_HOME/bin

# 从头加载环境变量
source /etc/profile

3、修正装备文件

# 切换到装备文件目录
cd /usr/local/soft/zookeeper-3.5.7/conf
# 仿制默许装备文件偏重命名
cp zoo_sample.cfg zoo.cfg

# 修正装备
vim zoo.cfg

# 找到dataDir并修正
dataDir=/usr/local/soft/zookeeper-3.5.7/data
# 在文件尾部增加
server.0=master:2888:3888
server.1=node1:2888:3888
server.2=node2:2888:3888

4、新建相关目录及文件

cd /usr/local/soft/zookeeper-3.5.7
# 创立ZK数据寄存方位
mkdir data
cd data
# 在data目录下创立myid文件
touch myid

5、同步到其它节点

cd /usr/local/soft/

scp -r zookeeper-3.5.7 node1:`pwd`
scp -r zookeeper-3.5.7 node2:`pwd`

6、装备从节点的环境变量

装备node1和node2的环境变量
同过程2中环境变量装备共同
最终记住source

7、修正myid文件

每台都需修正,而且myid都不同

cd /usr/local/soft/zookeeper-3.5.7/data
vim myid
# master ---> myid  --> 0
# node1 ---> myid  --> 1
# node2 ---> myid  --> 2

8、发动与中止ZK

三台都需求履行

  • 发动

    zkServer.sh start
    
  • 中止

    zkServer.sh stop
    
  • 检查ZK状况
    经过jps能够检查zk的进程:QuorumPeerMain
    当有一个leader的时分发动成功

    zkServer.sh status
    

9、ZK根本操作

zk 是一个目录结构 ,每个节点能够存数据,一起能够有子节点

# 衔接ZK
zkCli.sh

# 创立目录
create /test testData
create /test/a aData

# 获取数据
get /test

# 检查目录
ls /test

# 删去节点
delete /test
# 假如节点非空
deleteall /test

10、重置zk

如遇毛病,可进行重置
重置将铲除ZK中一切数据,慎用!!!

  • 杀掉一切zk进程

    # 找到ZK的进程编号pid
    kill -9 {pid}
    
  • 删去数据
    删去data目录下的version文件, 一切节点都要删去

    rm -rf /usr/local/soft/zookeeper-3.5.7/data/version-2
    
  • 从头发动zk

    zkServer.sh start
    

11、装备启停脚本

1.进入脚本运转目录

cd /usr/local/bin 

2.创立脚本文件

vim zk

3.增加以下内容:

#!/bin/sh
case $1 in
"start"){
       for i in master node1 node2
       do
         echo "********$i --> zkServer.sh start **********"
         ssh $i 'source /etc/profile; /usr/local/soft/zookeeper-3.8.4/bin/zkServer.sh start;exit'
       done
};;

"stop"){
   for i in master node1 node2
   do
       echo "********$i --> zkServer.sh stop **********"
       ssh $i 'source /etc/profile; /usr/local/soft/zookeeper-3.8.4/bin/zkServer.sh stop;exit'
   done
};;

"status"){
   for i in master node1 node2
   do
       echo "********$i --> zkServer.sh status **********"
       ssh $i 'source /etc/profile; /usr/local/soft/zookeeper-3.8.4/bin/zkServer.sh status;exit'
   done
};;
"restart"){
   for i in master node1 node2
   do
       echo "********$i --> zkServer.sh restart **********"
       ssh $i 'source /etc/profile; /usr/local/soft/zookeeper-3.8.4/bin/zkServer.sh restart;exit'
   done
};;
esac

4.修正文件权限

chmod 777 zk

5.直接运转

zk start

6.其他指令

zk stop
zk status
zk restart

今日的共享就到这了,之后会共享hbase相关的内容。

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=579

分享给朋友:

“zookeeper基础知识共享(一)” 的相关文章

读数据质量管理:数据可靠性与数据质量问题解决之道17数据网格

读数据质量管理:数据可靠性与数据质量问题解决之道17数据网格

1. 要害 1.1. 完成数据质量不能坐而论道,而取得“牢靠数据”取决于数据剖析和工程实践中的其他几个要素 1.2. 数据网格以及数据质量适用的当地 1.3. 数据质量在根据云的数据栈旅程中的效果 1.4. 常识图谱是更易于拜访数据的要害 1.5. 分布式数据架构下的数据发现 1.6. 何时开端进...

VTS:根据Apache SeaTunnel的开源向量数据搬迁东西

VTS:根据Apache SeaTunnel的开源向量数据搬迁东西

导言 VTS(Vector Transport Service),全称向量传输服务,是一个由Zilliz开发的专心于向量和非结构化数据搬迁的开源东西。VTS的中心特色在于其根据Apache SeaTunnel开发,这一现实使其在数据处理和搬迁方面具有明显的优势。Apache SeaTunnel作为一...

工业大数据,驱动工业数字化转型的核心力量

工业大数据,驱动工业数字化转型的核心力量

工业大数据是指在工业领域中,围绕典型智能制造模式,从客户需求到销售、订单、计划、研发、设计、工艺、制造、采购、供应、库存、发货和交付、售后服务、运维、报废或回收再制造等整个产品全生命周期各个环节所产生的各类数据及相关技术和应用的总称。其核心是以产品数据为主,涵盖了生产经营相关业务数据、设备物联数据和...

oracle操作,Oracle数据库基础操作教程

oracle操作,Oracle数据库基础操作教程

1. 创建数据库: ```sql CREATE DATABASE 数据库名; ```2. 删除数据库: ```sql DROP DATABASE 数据库名; ```3. 创建表: ```sql CREATE TABLE 表名 ; ```4. 删除表: ```s...

大数据生命周期,大数据生命周期概述

大数据生命周期,大数据生命周期概述

大数据生命周期是指从数据的产生、收集、存储、处理、分析、共享到消亡的整个过程。这个过程通常包括以下几个阶段:1. 数据产生:数据的产生可以是实时的,也可以是定期的。例如,社交媒体上的帖子、交易记录、传感器数据等都是数据产生的来源。2. 数据收集:数据收集是指将分散的数据源中的数据集中到一个地方,以便...

分布式大数据,技术革新与行业应用

分布式大数据是一个涉及多个领域和技术的复杂概念,它主要关注如何高效地存储、处理和分析大规模的数据集。在分布式系统中,数据被分散存储在多个物理位置上,而计算任务则被分配到多个节点上并行执行,以提高处理速度和效率。1. 分布式存储:为了存储大规模的数据集,通常使用分布式文件系统,如Hadoop的HDFS...