Zookeeper简介、环境搭建 秒速五厘米 2022-05-26 01:57 233阅读 0赞 一、Zookeeper简介 * 1、Zookeeper是一个高效的分布式协调服务,它暴露了一些公共的服务,比如命名/配置管理/同步控制/群组服务等。我们可以使用ZK来实现比如达成共识/集群管理/leader选举等。 Zookeeper是一个高可用的分布式管理与协调框架,基于ZAB算法(原子消息广播协议)的实现。该框架能够很好地保证分布式环境中数据的一致性。也正是基于这样的特性,使得Zookeeper成为了解决分布式一致性问题的利器。 \*顺序一致性:从一个客户端发起的事务请求,最终将会严格的按照其发起的顺序被应用到Zookeeper中。 \*原子性:所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,也就是说,要么整个集群所有的机器都成功应用了某一事务,要么没有应用,一定不会出现部分机器应用了,而另一部分没有应用的情况。 \*单一视图:无论客户端连接的是哪一个Zookeeper服务器,其看到的服务器数据模型都是一致的。 \*可靠性:一旦服务器成功地应用了一个事务,并完成对客户端的响应,那么该事务所引起的服务器端状态将会被一致保留下来。除非有另外一个事务对其更改。 \*实时性:通常所说的实时性就是指一旦事务被成功应用,那么客户端就能立刻从服务器上获取变更后的新数据,zookeeper仅仅能保证在一段时间内,客户端最终一定能从服务器端读取最新的数据状态。 * \*工作原理:Zookeeper 的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和 leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。 为了保证事务的顺序一致性,zookeeper采用了递增的事务id号(zxid)来标识事务。所有的提议(proposal)都在被提出的时候加上了zxid。实现中zxid是一个64位的数字,它高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch,标识当前属于那个leader的统治时期。低32位用于递增计数。 * 2、zookeeper设计目标 目标1:简单的数据结构。zookeeper就是以简单的属性结构来进行相互协调(也叫树形名字空间); 目标2:可以构建集群。一般zookeeper集群通常由一组机器构成,一般3~5台机器就可以组成一个zookeeper集群了。只要集群中超过半数以上的机器能够正常工作,那么整个集群就能够正常对外提供服务。 目标3:顺序访问。对于来自每一个客户端的每个请求,zookeeper都会分配一个全局唯一的递增编号,这个编号反映了所有事务操作的先后顺序,应用程序可以使用zookeeper的这个特性来实现更高层次的同步。 目标4:高性能。由于zookeeper将全数据存储在内存中,并直接服务与所有的非事务请求,因此尤其是在读操作作为主的场景下性能非常突出。在JMater压力测试下(100%读请求场景下),其结果大约在12~13w的QPS。 * 3、zookeeper组成 ZK server根据其身份特征分为三种:leader、Follower、Observer,其中Follower和Observer又统称Learner(学习者)。 Leader:负责客户端的writer类型请求; Follower:负责客户端的reader类型请求,参与leader选举等。 Observer:特殊的“Follower”,其可以接收客户端reader请求,但不参与选举。 * 4、zookeeper应用场景 4.1、配置管理:配置的管理在分布式应用环境中很常见,比如我们在平常的应用系统中,经常会碰到这样的需求:如机器的配置列表、运行时的开关配置、数据库配置信息等。这些全局配置信息通常具备以下3个特性: A、数据量比较小; B、数据内容在运行时动态发生变化; C、集群中各个节点共享信息,配置一致。 4.2、集群管理:zookeeper不仅能够帮你维护当前的集群中机器的服务状态,而且能够帮你选出一个“总管”,让这个总管来管理集群,这个Zookeeper的另一个功能Leader,并实现集群容错功能。 A、希望知道当前集群中究竟多少集群工作; B、对集群中每天集群的运行时状态进行数据收集; C、对集群中每台集群进行上下线操作。 4.3、发布与订阅:Zookeeper是一个典型的发布/订阅模式的分布式数控管理与协调框架,开发人员可以使用它来进行分布式数据的发布与订阅。 4.4、数据库切换:比如我们初始化zookeeper的时候读取其节点上的数据库配置文件,当配置一旦发生变更时,zookeeper就能帮助我们把变更的通知发送到各个客户端,每个互动在接收到这个变更通知后,就可以重新进行最新数据的获取。 4.5、分布式日志收集:我们可以做一个日志系统收集集群中所有的日志信息,进行统一管理。 4.6、zookeeper的特性就是在分布式场景下高可用,但是原生的API实现分布式功能非常困难,团队去实现也太浪费时间,即使实现了也未必稳定。那么采用第三方的客户端的完美实现,比如Curator框架,它是Apache的顶级项目。 注:zookeeper底层实现原理,了解ZAB,PAXOS两点。 二、Zookeeper环境搭建 1、 解压zookeeper:`tar -zxvf zookeeper-3.4.5.tar.gz -C /usr/local` 2、 改名:`mv zookeeper-3.4.5 zookeeper` 3、修改环境变量:`vim /etc/profile` export ZOOKEEPER_HOME=/usr/local/zookeeper export PATH=.;$HADOOP_HOME/bin;$ZOOKEEPER_HOME/bin;$JAVA_HOME/.... 4、刷新生效:`source /etc/profile` 5、到zookeeper下修改配置文件名:`cd /usr/local/zookeeper/conf`,`mv zoo_sample.cfg zoo.cfg` 6、修改conf:`vim zoo.cfg`, (1)dataDir=/usr/local/zookeeper/data (2)server.0=192.168.5.121:2888:3888 server.1=192.168.5.122:2888:3888 server.2=192.168.5.123:2888:3888 7、服务器标识配置: 创建文件夹:`mkdir /usr/local/zookeeper/data` 创建文件myid并填写内容为0:`vim myid(内容为服务器标识:0)` 8、进行复制zookeeper目录到server1和server2还有/etc/profile文件 9、把server1和server2中的myid文件里的值修改为1和2路径(`vim /usr/local/zookeeper/data/myid`) 10、启动zookeeper: 路径:cd /usr/local/zookeeper/bin 执行:zkServer.sh start(三台设备都要进行启动) 状态:zkServer.sh status(在三个节点上检验zk的mode,一个leader和两个follwer) 11、操作Zookeeper(Xhell界面) 命令:`zkCli.sh`,进去Zookeeper客户端 根据提示命令进行操作: 查找:`ls zookeeper` 创建并赋值:`create /bhz hadoop` 获取:`get /bhz` 设置:`set /bhz baihezhuo` rmr /path 递归删除节点 delete /path/child 删除指定某个节点 创建节点有两种类型:短暂(ephemeral)、持久(persistent)
还没有评论,来说两句吧...