当前位置: 首页 > Linux

Zookeeper集群搭建及介绍(二)

时间:2023-04-06 21:38:10 Linux

Zookeeper集群搭建及介绍(二)本文主要涉及知识点。一、linux虚拟机安装及linux基本设置2、linux免密码登录3、linux搭建zookeeper环境4、zookeeper介绍接上一章。3、在用linux搭建zookeeper之前,我们需要做一些准备工作,修改linux之间的名字和配置hosts文件。我们在远程连接的时候,是不需要输入密码的。在linux1中,修改/etc/hosts文件192.168.1.1(linux1的ip)znode1192.168.1.2(linux2的ip)znode2192.168.1.3(linux3的ip)znode3如果我们想链接到znode2,我们可以sshznode2。不用输入ip。第一步:上传zookeeper压缩包到/export/software/目录下。解压tarzxvfzookeeper.jar.gz/export/server/(将文件解压到/export/server/目录),进入conf查看zoo_sample.cfg文件,修改名称。mvzoo_sample.cfgzoo_sample.cfg修改zoo.cfg文件,执行命令:vimz00.cfg找到dataDir,稍后修改到这个路径。Zookeeper的日志文件会输出到这个目录.dataDir=/export/data/zookeeper将光标移到最后添加一些内容。znode1-znode3是linux2888的名称,3888是通信端口号和选举端口号。保存退出server.1=znode1:2888:3888server.2=znode2:2888:3888server.3=znode3:2888:3888第二步:进入/export/data目录。创建一个zookeeper目录,进入该目录执行echo1>myid。这个1就是上面server后面的个数,上面写几个,这里写几个,应该是对应的。第三步:修改环境变量。执行vim/etc/profile,在最后添加exportZOOKEEPER_HOME=/export/server/zookeeper#(zookeeper安装目录路径)exportPATH=$PATH:$ZOOKEEPER_HOME/bin保存退出,刷新文件源/etc/profile步骤4:复制/export/server/zookeeper文件到znode2和znode3scp-r/export/server/zookeeperznode2:/export/serverscp-r/export/server/zookeeperznode3:/export/server然后复制/etc/profile文件,这样你就不需要再添加环境变量了。scp/etc/profileznode2:/etc/scp/etc/profileznode3:/etc/注意需要刷新znode2和znode3中的文件。否则环境变量不生效第五步:进入znode2/export/data/zookeeper目录。执行echo2>myid,进入znode3/export/data/zookeeper目录。执行echo3>myid至此zookeeper安装基本完成。启动zookeeper.znode1,znode2,znode3必须启动zkServer.shstart查看zookeeper状态,zkServer.shstatusZookeeper介绍对zookeeper的理解:1.Zookeeper是一个分布式协调服务的开源框架,主要用于解决分布式集群的一致性问题2.ZooKeeper本质上是一个分布式小文件存储系统。提供基于类似于文件系统的目录树的数据存储,可以有效地管理树中的节点。它用于维护和监控您存储的数据的状态变化。通过监控这些数据状态的变化,可以实现基于数据的集群管理。功能如:统一命名服务、分布式配置管理、分布式消息队列、分布式锁、分布式协调等。2.zookeeper的特点是全局数据一致性:集群中的每个服务器都保存一份相同的数据,无论它是哪个客户端连接到服务器,显示的数据是一致的,这是最重要的特点。可靠性:如果一条消息被其中一台服务器接受,则该消息将被所有服务器接受顺序:包括全局顺序和部分顺序:全局顺序是指如果在一个服务器上消息a先于消息b发布,则消息a将被发布在所有服务器上的消息b之前;偏序是指如果同一个发送者Publish消息b在消息a之后发布,则a一定在b之前。数据更新原子性:一次数据更新要么成功(超过半数节点成功)要么失败,没有中间状态。实时性:Zookeeper保证客户端在一个时间间隔内获得服务器的更新信息,或者服务器故障的信息。Zookeeper集群的三种角色Leader:Zookeeper集群工作的核心。事务请求(写操作)的唯一调度器和处理器,保证集群事务处理的顺序;集群中每个服务器的调度程序。Follower:处理客户端非事务性(读操作)请求,将事务性请求转发给Leader;参与集群Leader选举投票Observer:观察者角色。观察Zookeeper集群最新的状态变化,并同步这些状态,对于非事务性的请求可以独立处理,对于事务性的请求,会转发给Leader服务器处理。不会参与任何形式的投票,只提供非事务服务,通常用于在不影响集群事务处理能力的情况下提高集群的非事务处理能力四zookeepershell运行链接zookeeperzkCli.sh-server知识产权。运行zkshell,会提示用法。createnodecreate[-s][-e]pathdataacl-s或-e分别指定节点特征、序列或临时节点,不指定则表示持久节点;acl用于权限控制。例如:create-s/Test2018-s表示该节点是一个序列化节点,/Test表示在根目录下创建一个Test节点,2018是要创建的节点存储的值临时节点create-e/test012018createpermanentnodecreate/Test022019nodereadls命令可以列出Zookeeper指定节点下的所有子节点,只能查看指定节点下第一级的所有子节点get命令可以获取Zookeeper指定的节点的数据内容和属性信息。查看zookeeper根节点目录:ls/查看节点详情:get/Test02更新节点set/Test022020删除节点。如果删除的节点有子节点,则不能删除该节点。必须先删除子节点,再删除父节点delete/Test02递归删除节点rmrpathquota对节点添加限制setquota-n|-bvalpathn:表示最大子节点数b:表示最大长度datavaluesval:最大子节点数或数据值最大长度path:节点路径listquota查看指定节点限制listquota路径delquota[-n|-b]path删除quotahistory列出历史命令redo:这个command可以重新执行指定命令号的历史命令,通过history可以查看命令号三zookeeper数据模型ZooKeeper的数据模型在结构上与标准的文件系统非常相似。它具有层次化的命名空间,并采用树形层次结构。ZooKeeper树中的每个节点都称为Znode。与文件系统的目录树一样,ZooKeeper树中的每个节点都可以有子节点。Znode同时具有文件和目录的特点。它既像文件一样维护数据、元信息、ACL、时间戳等数据结构,又能像目录一样作为路径标识的一部分,并且可以有子Znode。用户有Znodes的增删改查等操作(有权限)。Znode具有原子操作。读操作会获取节点相关的所有数据,写操作也会替换节点上的所有数据。另外,每个节点都有自己的ACL(AccessControlList),规定了用户的权限,即限制特定用户可以对目标节点进行的操作。Znode存储数据大小。Znode存放的是配置文件信息,状态信息,采集位置等,很小,一般以KB为单位。ZooKeeper的服务端和客户端在设计上严格检查并限制每个Znode的数据大小最大为1M。Znode由路径引用,路径必须是绝对路径,因此它们必须以斜杠字符开头。四种zookeeper数据结构每个节点都可以创建子节点,每个子节点也可以存储信息,所有节点组成一棵树状结构树。每个节点称为一个znode,每个znode有三部分组成stat:这是状态信息,描述Znode的版本,权限等信息data:与Znode相关的数据children:Znode下五个子节点zookeeper节点类型Znode有两种类型,分别是临时节点和永久节点节点的类型在创建时就确定了,不能更改。临时节点:节点的生命周期取决于创建它们的会话。一旦会话结束,临时节点会自动删除,当然也可以手动删除。临时节点不允许有子节点。永久节点:节点的生命周期不依赖于session,只有在客户端显示执行了删除操作后才能删除。Znode还具有序列化功能。如果在创建时指定,则Znode的名称会自动附加一个递增的序列号。序号对于这个节点的父节点是唯一的,这样每个子节点的创建顺序都会被记录下来。其格式为“%10d”(10位,没有数值的位补0,如“0000000001”)。这样,就会有四种Znode节点,分别对应:PERSISTENT:永久节点EPHEMERAL:临时节点PERSISTENT_SEQUENTIAL:永久节点,序列化EPHEMERAL_SEQUENTIAL:临时节点,序列化六个zookeeper节点属性每个znode包含一系列属性,通过命令get,可以得到节点的属性dataVersion:数据版本号。每设置一次节点,dataVersion的值都会加1(即使设置了相同的数据),可以有效避免数据更新的顺序。顺序问题。cversion:子节点的版本号。当znode的子节点发生变化时,cversion的值会加1。aclVersion:ACL版本号。cZxid:Znode创建的交易ID。mZxid:被修改的Znode的事务id,即每修改一个znode,mZxid都会更新。对于zk来说,每一次改变都会产生一个唯一的交易id,zxid(ZooKeeperTransactionId)。通过zxid,您可以确定更新操作的顺序。ctime:节点创建时的时间戳。mtime:节点最新更新发生时的时间戳。ephemeralOwner:如果该节点是临时节点,则ephemeralOwner值表示该节点绑定的sessionid。如果不是,则ephemeralOwner值为0。七个ZooKeeperWatcher概念:ZooKeeper提供分布式数据发布/订阅功能。一个典型的发布/订阅模型系统定义了一对多的订阅关系,允许多个订阅者同时监听一个主题对象。当这个主题对象本身的状态发生变化时,它会通知所有的订阅者,以便他们做出相应的动作。ZooKeeper中引入了Watcher机制来实现这种分布式通知功能。ZooKeeper允许客户端向服务器注册一个Watcher。当服务端的某些事件触发Watcher时,会向指定的客户端发送事件通知,实现分布式通知功能。触发事件的类型有很多种,例如:节点创建、节点删除、节点变化、子节点变化等。总的来说,Watcher可以概括为以下三个过程:client向server注册Watcher,server事件触发Watcher,client端回调Watcher获取触发事件情况。Watch机制的特点是一次性触发:当一个事件触发监听时,会向设置监听的客户端发送一个watcher事件。这种效果是一次性的。如果以后再次发生相同的事件,则不会再次触发事件封装:ZooKeeper使用WatchedEvent对象封装服务器端事件并传递下去。WatchedEvent包含了每个事件的三个??基本属性:通知状态(keeperState)、事件类型(EventType)和节点路径(path)事件异步发送:atcher的通知事件是从服务端异步发送到客户端的。先注册后触发:在Zookeeper中的watch机制中,客户端必须先去服务端注册监听,这样事件才会触发监听并通知客户端。通知状态和事件类型。相同的事件类型在不同的通知状态下有不同的含义。看图片![图片上传中...]3。Shell客户端settingwatcher设置节点数据变化监听变化节点数据!【图片上传中...】这时候设置监听的节点收到通知:![图片上传中...]8ZooKeeper选举机制Zookeeper默认的算法是FastLeaderElection,采用得票数超过一半获胜的逻辑。服务器ID:例如有3台服务器,编号分别为1、2、3。数字越大,选择算法中的权重越大。选举状态:LOOKING,竞选状态FOLLOWING,follower状态,同步leader状态,参与投票OBSERVING,观察状态,同步leader状态,不参与投票LEADING,leader状态数据ID:服务器保存的最新数据版本。值越大,数据越新,数据越新,选举算法中的权重越大。逻辑时钟:也叫得票数,同一轮投票中的逻辑时钟值相同。每投票一次,这个数据就会增加,然后和其他服务器收到的投票信息返回的值进行比较,根据不同的值做出不同的判断。新的集群选举假设当前有5台服务器,每台服务器都没有数据。他们的编号是1、2、3、4、5,按照编号顺序开始。投票,然后发送投票信息。由于其他机器还没有启动,它接收不到反馈信息。服务器1的状态一直是Looking。Server2启动,为自己投票,与之前启动的Server1交换结果,Server2获胜,因为Server2的数量较多,但此时得票数不超过一半,所以两者的状态服务器仍在寻找。服务器3启动,为自己投票,并与之前启动的服务器1和2交换信息。由于服务器3的编号最大,因此服务器3获胜。此时票数刚好大于一半,所以server3成为leader,server1和server2成为弟弟。服务器4启动,为自己投票,并与之前启动的服务器1、2、3交换信息。虽然服务器4的编号更高,但之前服务器3已经获胜,所以服务器4只能成为弟弟。5号服务器启动,后面的逻辑和4号服务器一样成为小弟。非全新集群选举对于正常运行的zookeeper集群,如果中途有一台机器宕机,需要重新选举,选举过程需要添加数据ID、服务器ID和逻辑时钟。数据ID:新版本数据较大,每次更新数据都会更新版本。ServerID:就是我们配置的myid中的值,每台机器一个。LogicalClock:这个值从0开始递增,每次选举对应一个值。如果在同一次选举中,这个值是一致的。这样,选举标准就变成了:1.忽略逻辑时钟较小的选举结果,重新进行投票;2.统一逻辑时钟后,dataid大者获胜;3、如果dataid相同,serverid大者获胜;