1.分布式系统中的协调服务:
分布式系统中,通常有多个节点,节点之间一般都有主从之分,you有的时候dan当一个节点挂掉的时候,如何保证节点之间协调工作就是一个比较重要的问题,此时就需要一个管理各个节点之间的协调工具,zk应运而生!
2.zk在各种分布式协调服务场景中的应用:
2.1在线感知:
a.所有服务节点上线时,先去zk上注册一个子节点;
b.“服务请求者”,监听父节点;
c.当所有新的服务节点加入时,或者有旧的服务节点掉线,“服务请求者”就能收到通知,就可以去zk上查看最新的在线服务列表 。
2.2 主从协调:此时server01为active(主节点)其余为standby(从节点),从节点一直监听主节点server01,当主节点挂机后,从节点扫描servers目录,定主机名id最大的为新的active。
2.3分布式共享锁:左边三个接口分别在三个节点上,都要访问右边的共享数据,但是每次只能有一个节点访问共享数据,这就需要分布式共享锁,股票模型分析访问数据时,会锁定lock01,此时另外两个访问不了,访问结束后锁lock01销毁,之后选股再访问共享数据依此类推。一轮过后,股票模型分析会绑定lock04访问共享数据...
3.zookeeper介绍:是一个分布式协调服务,就是为用户的分布式ying应用程序提供协调服务的;
a.zk是为别的分布式chen程序服务的;
b.zkben'本身就是一个分布式程序(只要有半数以上节点存货,zk就能zhen正常服务)
c.zk所提供的服务涵盖:主从协调、服务器节点动态上下线、统一配置管理、分布式共享锁、统一服务名称。。。
d.虽说可以提供各种服务,但是zk在底层其实只提供了两个功能:管理(存储,读取)用户程序提交的数据;并为用户程序提供数据节点监听服务。
4.zk集群搭建:
注:要先安装JDK,关闭防火墙,本案例为三台虚拟机名称为shizhan01,shizhan02,shizhan03。配置好hosts文件,三台节点yao要配置ssh免密登录,为以后的集群开启脚本做准备。
4.1先安装JDK
a.上传jdk压缩包 通过sftp工具上传即可
b.解压jdk压缩包 tar -zxvf jdk-7u67-linux-x64.gz -C /usr/local/
c.修改环境变量PATH vi /etc/profile
d.在文件最后加两行:
export JAVA_HOME=/usr/local/jdk1.7.0_67
export PATH=$PATH:$JAVA_HOME/bin
e.让环境变量生效 source /etc/profile
4.2安装zk:
a. 先上传zk:zookeeper-3.4.6.tar.gz
b. 解压压缩包到apps: -zxvf zookeeper-3.4.6.tar.gz -C apps
c. 删除多余的文件:(注意删除的语法)
[hadoop@shizhan01 zookeeper-3.4.6]$ rm -rf *.xml contrib dist-maven docs recipes src zookeeper-3.4.6.jar.asc zookeeper- 3.4.6.jar.md5 zookeeper-3.4.6.jar.sha1 *.txt
d.修改配置文件:
e.创建数据文件夹
make dir /root/zkdata
f.将apps拷贝到另外三个fu'w服务器中:$PWD:当前目录
[root@shizhan01 zookeeper-3.4.6]$ scp -r /home/root/apps/zookeeper-3.4.6 root@shizhan02:$PWD
g.写入id到zkdata文件夹(id为上面配置文件中的server.id,三个节点都要写入id)
[root@shizhan01 zkdata]echo 1 > myid
[root@shizhan02 zkdata]echo 2 > myid
[root@shizhan03 zkdata]echo 3 > myid
启动:
编写zk集群启动脚本启动脚本:
---------------------------------------------------------------------------------------------------------------------------------------
#!/bin/sh
echo "start zkServer..."
for i in 1 2 3
do
ssh shizhan0$i "source /etc/profile;/root/apps/zookeeper-3.4.6/bin/zkServer.sh start"
done
---------------------------------------------------------------------------------------------------------------------------------------
.zk特性:
5.1 zk:一个leader,多个follower组成的集群;
5.2全局一致性:每个server保存yi一份相同的数据副本,client无论链接到哪个server,数据都是一致的;
5.3 分布式du'x读写,更新请求转发,由leadersh实施;
5.4 更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行;
5.5数据更新yu原子性,一次数据更新要么成功(半数以上节点成功,就算更新成功),要么失败;
5.6 实时性。在一定时间范围内,client能读到最新数据。
数据一致性:当有半数节点更新成功,则数据就更新成功,数据更新是实时的,(PAXOS一致性算法原理)。
6.zk的数据结构
6.1、层次化的目录结构,命名符合常规文件系统规范(见下图)
6.2、每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识
6.3、节点Znode可以包含数据(只能存储很小量的数据,<1M;最好是1k字节以内)和子节点(但是EPHEMERAL类型的节点不能有子节点,下一页详细讲解)
6.4、客户端应用可以在节点上设置监视器(后续详细讲解)
数据结构:
7. 节点类型:
7.1、Znode有两种类型:
短暂(ephemeral)(断开连接自己删除)
持久(persistent)(断开连接不删除)
7.2、Znode有四种形式的目录节点(默认是persistent )
PERSISTENT
PERSISTENT_SEQUENTIAL(持久序列/test0000000019 )
EPHEMERAL
EPHEMERAL_SEQUENTIAL
7.3、创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护
7.4、在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序