论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
数据库
›
Oracle
›
zookeeper底子知识分享(一)
zookeeper底子知识分享(一)
嚴華
论坛元老
|
2024-11-12 20:51:24
|
显示全部楼层
|
阅读模式
楼主
主题
1731
|
帖子
1731
|
积分
5193
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
写在前面
今天来学习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的Chubby
、
Apache的Zookeeper
都基于Paxos的理论进行实现。Paxos被认为是如今为止唯一成熟的分布式同等性算法,其他算法每每是对Paxos的改进或简化。
需要指出的是,Paxos有一个前提:
没有拜占庭将军问题
。意思是,Paxos只有在一个可信的盘算环境中才华建立,这个环境不应受到入侵或破坏。
Paxos算法的描述
Paxos描述了这样一个场景:有一个叫做
Paxos小岛
(Island)的地方,岛上住着一批住民,他们的变乱由一些特殊的人来决定,这些人被称为
议员
(Senator)。议员的数量是固定的,不可更改。
岛上的每次变乱变动都需要通过
发起
(Proposal),每个发起都有一个编号(PID),这个编号是递增的,不能倒退。每个发起必须得到凌驾半数议员的同意才华生效。假如某个议员收到的发起编号小于等于他当前的编号,他会拒绝该发起,并告知对方“你的发起已经有人提过了”。
这个编号是每个议员在本身的记事本上记录的数字,随着时间的推移,议员会更新这个编号,确保发起按照准确的次序进行。整个议会的目标是:
保证全部议员对于发起告竣同等的看法
。
举个例子
假设岛上有三个议员:
S1
、
S2
、
S3
。
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相关的内容。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
嚴華
论坛元老
这个人很懒什么都没写!
楼主热帖
iOS全埋点解决方案-用户标识 ...
用uniapp实现微信小程序的电子签名效果 ...
【万能皆可链接】C++中的动态链接库编 ...
【云服务器】推荐阿贝云服务器,目前永 ...
【Selenium+Pytest+allure报告生成自动 ...
MySQL实战45讲 20
【Javaweb】Web工作原理、两种网页、两 ...
Qt-FFmpeg开发-打开本地摄像头(6) ...
Spring Boot 配置文件
Doris(一) -- 简介和安装
标签云
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
虚拟化与私有云
前端开发
登录参与点评抽奖加入IT实名职场社区
下次自动登录
忘记密码?点此找回!
登陆
新用户注册
用其它账号登录:
关闭
快速回复
返回顶部
返回列表