为什么使用zookeeper?
一句话:为了保证大量数据存储在计算机中的一致性。
背景:
大数据其实就是研究怎么把数据存到计算机里面和怎么计算这些数据,那么如果只有一台计算机存储所有的数据就会出现什么问题?
1.单点故障问题:一个机器出问题,那么所有数据丢失
解决方案:多台电脑备份数据,也就是所谓的分布式
2.性能瓶颈问题:一般为磁盘I/O:磁盘的读写速度远慢于内存的读写速度,系统运行时如果需要等待磁盘I/O的完成,将导致整个系统的性能下降
解决方案:多台电脑,每台电脑存储一部分数据,而每次取数据时就采用多线程运行多台电脑的不同数据也就是所谓的磁盘阵列
3.CAP:存储系统中都不能同时满足三个特性:
Consisitence:一致性:保证每个用户都能得到最新数据
Avaliability:可用性:一定时间内会出来一定结果
Partition tolerance分区容错性:一个计算机遇到网络故障的时候能容错
一致性(Consistency):数据在多个副本之间能够保持一致的特性(强一致性)。就像Redis的主从结构,Zookeeper的Master/Slave结构,主从之间的数据保持一致,这些都是最终一致性。
可用性(Availability):系统一直处于可用状态,能正常响应数据,但是不保证响应数据为最新数据。
分区容错性(Partition tolerance):分布式系统在遇到网络故障的时候,仍然能够对外提供满足一致性和可用性的服务,除非整个网络环境都发生了故障。
尽量保证可用性和分区容错性
弱一致性: 1.系统中的某个数据被更新后,后续对该数据的读取操作可能得到更新后的值,也可能是更改前的值。 2.即使过了不一致时间窗口,后续的读取也不一定能保证一致。
最终一致性: 1.弱一致性的特殊形式,不保证在任意时刻任意节点上的同一份数据都是相同的,但是随着时间的迁移,不同节点上的同一份数据总是在向趋同的方向变化 2.存储系统保证在没有新的更新的条件下,最终所有的访问都是最后更新的值
4.paxos算法:
通过超过一半节点来保证一致性:
就是
paxos算法延伸:
Raft算法:
其实就是用log日志保证一致性
区别:
paxos 选举leader 是等一个leader不能用了死掉了才换
raft则是靠任期而选取
RPC:节点间的通讯
其他理由
a. 大部分的分布式应用程序都需要一个主控、协调器或者控制器来物理分布的子进程(如资源,内存分配等) b. 目前大部分应用开发私有的协调程序,缺乏一个通用性 c. 协调程序的反复编写浪费,难以形成通用、伸缩性好的协调器 d. ZooKeeper:提供通用的分布式锁服务,用以协调分布式应用
什么是zookeeper?
zookeeper是一个数据管理框架
说白了其实就是一个 文件系统+监听通知系统
1.什么是zookeeper? (1)Zookeeper是Googel的Chubby的一个开源实现,是Hadoop的分布式协调服务,它包好了一个简单的原语,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。
(2)Zookeeper本身也允许单机模式,但是一台服务器很难表达出zookeeper的强大功能,所以真是生产环境下zookeeper一班都是3台以上的奇数量的存在,证实了zookeeper本身是一个分布式集群的存在。
说白了zookeeper是一个分布式协调服务框架,协调嘛,那么它有一部分功能就是协调集群,比如协调集群而保证满足集群的最终一致性,那么它是如何协调的呢?
首先我们得知道集群无非是用来存储数据和计算数据的,那么用户基本都是在集群中改数据和查数据(包括存数据进去和修改数据)。
而zookeeper集群的构造其实就是一个leader和其他的learner ,
leader需要被选举 leader可以判断是否超过一半的人去修改从而发给客户端修改成功
learner 可以投票,可以直接返回客户端查询结果
所以解决客户端的两个需求:
查询可以直接在learner中查询
而修改数据则需要保证最终一致性则需要leader保证超过一半的learner同意后则修改成功
细分后节点也就是服务器又分为observer,follower,leader
follow:执行服务器的读操作,投票
observer:执行服务器的读操作
leader:统一写操作
怎么使用zookeeper?
首先要知道zookeeper是什么,它是一个文件系统加上监听通知机制,它是为了保证数据存入集群的一致性的,也就是为了保证数据同步。
那么怎么用它来保证数据一致性呢,这就有一个zab协议,这个协议就说明了如何使用zookeeper来保证数据的一致性。
zab:zookeeper atomic broadcast
为什么会出现zab:用来保证分布式事务的最终一致性
什么是zab协议:
zab协议其实就是支持崩溃恢复的原子广播协议,是一种通用的分布式一致性算法
zookeeper的环境配置和搭建:
克隆三个虚拟机
在xshell中都登录
下载vim编辑器:
yum install -y vim :下载vim编辑器
进入 cd /opt/ 目录下:
cd /opt/
下载lrzsz工具:
yum install lrzsz -y
上传文档:
rz zookeeper.3.4.5.gz
解压文档:
tar -zxvf zookeeper-3.4.5.tar.gz
解压后删除压缩包:
rm -rf zookeeper.3.4.5.tar.gz
进入zookeeper的conf文件:
cd zookeeper-3.4.5/conf/
修改conf文件中的zoo_sample.cfg 为 zoo.cfg
c zoo_sample.cfg zoo.cfg
修改配置文件:
vim zoo.cfg
创建myid文件:
mkdir -p /var/bdp/zookeeper
创建myid的文本文件
touch /var/bdp/zookeeper/myid
标准输出 1 在 myid 文件中:
echo 1 >>> /var/bdp/zookeeper/myid
远程传输到其他节点上:
scp -r zookeeper-3.4.5 192.168.191.130 :/opt/
scp -r zookeeper-3.4.5 192.168.191.132 :/opt/
scp
命令用于 Linux 之间复制文件和目录。 scp
是 secure copy 的缩写, scp
是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。 scp 是加密的,rcp 是不加密的,scp 是 rcp 的加强版。
安装jdk:
rz jdk-8u231-linux-x64
传到其他节点:
scp jdk-8u231-linux-x64.rpm 192.168.191.130:/opt/
scp jdk-8u231-linux-x64.rpm 192.168.191.132:/opt/
安装所有jdk:
rmp -ivh jdk-8u231-linux-x64.rpm
搭建环境:
vi /etc/profile
编写hosts
vim /etc/hosts
正在上传…重新上传取消
zookeeper的基本命令:
到底如何使用zookeeper?
之前说了zookeeper是一个文件系统+监听通知机制,而监听通知机制就是上面的内容,那么文件系统是什么,其实就是存储数据的一种方式,和linux系统的文件系统差不多,只是zookeeper的每一个服务器也就是一个节点就是一个文件树,而文件树里面对应的数据是以key-value的方式来对应。
id的分类:
zkServer基本命令:
增:create
删:delete
改:set
查:get