当前位置: 首页 > 科技观察

本文简单了解和部署Zookeeper集群

时间:2023-03-21 22:28:15 科技观察

1。Zookeeper概述Zookeeper一开始可能很多人都听说过,使用场景也很多。它可以以节点的形式存储持久化数据,或者将此特性用作微服务的服务注册中心。简单的说,Zookeeper是一个开源的分布式Apache项目,为分布式框架提供协调服务。Zookeeper,从设计模式的角度来理解,是一个基于观察者模式设计的分布式服务管理框架。是一个文件系统,负责存储和管理大家关心的数据,然后接受观察者的注册;它也是一种通知机制,一旦这些数据的状态发生变化,Zookeeper将负责相应地通知那些在ZookeeperReact上注册的观察者。2、Zookeeper应用场景及一些注意事项ZooKeeper数据模型的结构与Unix文件系统非常相似,整体上可以看成一棵树,每个节点称为一个ZNode。默认情况下每个ZNode可以存储1MB的数据,每个ZNode可以通过其路径唯一标识。Zookeeper的应用场景很多,比如统一配置管理。在很多分布式环境中,一个服务集群的配置文件信息通常是一致的。如果需要修改配置信息的内容,不可能对每一个服务都一一修改。我想修改一次配置信息,然后就可以同步到所有服务节点。Zookeeper可以实现这个业务。这很简单。可以在ZooKeeper上将服务配置信息写到一个Znode中,让每个集群节点的服务器监控这个Znode,一旦数据有修改,ZooKeeper会通知每个服务器,达到同步的效果。它还可以进行统一的集群管理,动态服务器上下线和软负载平衡效果。练习Zookeeper前需要注意的事项:Zookeeper:由一个leader和多个follower组成的集群。集群正常运行的前提条件是集群节点数要过半,所以最好使用奇数个集群节点。全局数据一致性:每个服务器保存一份相同的数据,无论客户端连接到哪个服务器,数据都是一致的。更新请求是顺序执行的,来自同一个Client的更新请求按照发送的先后顺序依次执行。数据更新原子性,一次数据更新要么成功要么失败。实时的,在一定的时间范围内,Client可以读取到最新的数据。3、简单部署Zookeeper集群官网地址:https://zookeeper.apache.org/,本文使用VMware创建3台虚拟机搭建集群,XShell工具连接虚拟机进行操作:先安装jdk本机使用yum源安装,注意设置yum,等待安装成功出现“Complete”:[root@localhost~]#yuminstall-yjava-1.8.0-openjdk.x86_64输入/usr/local/目录,将准备好的“zookeeper-3.4.5.tar.gz”文件放入该目录,解压:[root@localhost~]#cd/usr/local/[root@localhostlocal]#tarzxvfzookeeper-3.4.5.tar.gz修改文件名为“zookeeper”:[root@localhostlocal]#mvzookeeper-3.4.5zookeeper修改环境变量:[root@localhostlocal]#vi/etc/profile#之后进入插入模式,在上面添加一些内容,保存退出exportZOOKEEPER_HOME=/usr/local/zookeeperexportPATH=$PATH:$ZOOKEEPER_HOME/bin重新编译"/etc/profile":[root@localhostzookeeper]#source/etc/profile进入conf目录,复制“zoo_sample.cfg”生成“zoo.cfg”文件作为zookeeper配置文件:[root@localhostzookeeper]#cdconf/[root@localhostconf]#cpzoo_sample.cfgzoo.cfg修改“zoo.cfg”文件:配置文件主要需要配置数据存储路径和日志路径。zookeeper默认的数据存放路径是“dataDir=/tmp/zookeeper”,是临时数据,会过期。本文将重新指定相关位置,存放在“自己的”路径下。当然,也可以根据需要创建单独的路径进行存储。#将配置文件中的dataDir替换成这个路径dataDir=/usr/local/zookeeper/data#在配置文件中添加如下配置,ip地址按照规划#其中server.1代表第一个child集群的cluster,后面会配置myid文件,myid文件的内容与对应的编号一致。比如1.131机器的myid就是1#ip地址为集群的三台机器。也可以配置host使用主机名,两个端口号,心跳端口和数据端口dataLogDir=/usr/local/zookeeper/logserver.1=192.168.1.11:2888:3888server.2=192.168.1.12:2888:3888server.3=192.168.1.13:2888:3888简单说明一下集群配置:server.A=B:C:DA是一个数字,表示服务器的编号;在集群模式下配置一个文件myid,这个文件在dataDir目录下,这个文件里面有一个数据就是A的值,当Zookeeper开始读取这个文件的时候,把里面的数据和里面的配置信息进行比较zoo.cfg以确定它是哪个服务器。B是这个服务器的地址;C是本服务器的Follower与集群中的Leader服务器交换信息的端口;D是万一集群中的Leader服务器挂了,需要一个端口重新选举,选举出新的Leader。而这个端口就是进行选举时,服务器之间进行通信的端口。回到“zookeeper”目录,创建配置文件中提到的两个路径并赋予权限:[root@localhostconf]#cd..[root@localhostzookeeper]#mkdir-m755data[root@localhostzookeeper]#mkdir-m755log来到“data/”路径下,创建一个myid文件,并赋予对应的值1:[root@localhostzookeeper]#cddata/[root@localhostdata]#vimyidatthismomentfor第一个集群节点一台机器的配置完成,另外两台机器需要在通过第一台机器将配置好的zookeeper和集群配置发送给另外两台机器的前提下准备环境和设置环境变量,注意修改对应机器的myid:[root@localhostdata]#scp-r/usr/local/zookeeperroot@192.168.1.12:/usr/local/[root@localhostdata]#scp-r/usr/local/zookeeperroot@192.168.1.13:/usr/local/修改myid值为2和3后集群部署为com完成。进入01号机器的zookeeper目录,启动zookeeper:[root@localhostzookeeper]#bin/zkServer.shstartJMXenabledbydefaultUsingconfig:/usr/local/zookeeper/bin/../conf/zoo.cfgStartingzookeeper...STARTED[root@localhostzookeeper]#bin/zkServer.sh状态默认启用JMX使用配置:/usr/local/zookeeper/bin/../conf/zoo.cfg联系服务时出错。它可能没有运行。此时集群没有运行有解决办法,因为目前只启用了一个节点。当第二台启动时,集群节点数超过一半,第二台机器将被选为leader[root@localhostzookeeper]#bin/zkServer.shstartJMXenableddefaultUsingconfig:/usr/local/zookeeper/bin/../conf/zoo.cfgStartingzookeeper...STARTED[root@localhostzookeeper]#bin/zkServer.shstatusJMXenabledbydefaultUsingconfig:/usr/local/zookeeper/bin/../conf/zoo.cfgMode:leader[root@localhostzookeeper]#第一个成为follower[root@localhostzookeeper]#bin/zkServer.shstatus默认启用JMXUsingconfig:/usr/local/zookeeper/bin/。./conf/zoo.cfgMode:follower启动第三台机器后,第二台机器已经是leader了,除非机器宕机触发重选。关于zookeeper的操作可以通过启动客户端来启动结束:[root@localhostzookeeper]#bin/zkCli.shWatchedEventstate:SyncConnectedtype:Nonepath:null[zk:localhost:2181(CONNECTED)0]至此测试完成,部署zookeeper集群,多zookeeper操作可以参考zookeeper官方文档