Zookeeper系列—Zookeeper简介及部署

网站建设3年前发布
22 0 0

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。,ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。它包含一个简单的原语集,提供Java和C的接口。ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在$zookeeper_home\src\recipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本。,上面是百度百科对Zookeeper的解释,实际上,Zookeeper就是一个第三方的存储软件,它是一个独立的项目,相当于一个上帝视角,站在上帝的角度为我们的业务系统提供数据存储(比如注册中心和配置中心的功能),已经动态监听的功能(当zk上的数据发生变化,它会通过watch机制告诉我们的业务系统)。,通过上面的介绍,我相信大家应该能对Zookeeper(后面统一称为zk)有个大概的认识,那我们接着来聊一聊它作为一个上帝,要提供哪些核心功能:,OK,以上就是zk要实现的核心功能,围绕着这三个核心功能,我们再去分析原理,推导核心流程,这样我相信大家就不会觉得在学习过程中一头雾水了。,一步步来,我们现在认识zk是个什么玩意儿了,然后再浅尝辄止认识认识它的整体结构,最后这篇文章我们再搭建一下zk的服务玩一下它的api。那本文就算达到目的了。当我们熟悉了它的使用,再去掌握它的原理,那这块技术才算拿下。,zookeeper 提供的名称空间非常类似于标准文件系统,key-value 的形式存储。名称 key 由斜线 / 分割的一系列路径元素,zookeeper 名称空间中的每个节点都是由一个路径标识。,20230306095550f8f9c2e764735e66a55725734c629461170c6c334,节点除了存储数据内容以外,还存储了数据节点本身的一些状态信息,通过get命令可以获得状态信息的详细内容,如图所示。,20230306015354e175ff86033e7e29a3d325cb7fa04960ef83a1980,版本-保证分布式数据原子性。zookeeper为数据节点引入了版本的概念,每个数据节点都有三类版本信息,对数据节点任何更新操作都会引起版本号的变化,版本有点和我们经常使用的乐观锁类似。这里有两个概念说一下,一个是乐观锁,一个是悲观锁。,悲观锁:是数据库中一种非常典型且非常严格的并发控制策略。假如一个事务A正在对数据进行处理,那么在整个处理过程中,都会将数据处于锁定状态,在这期间其他事务无法对数据进行更新操作。,乐观锁:乐观锁和悲观锁正好想法,它假定多个事务在处理过程中不会彼此影响,因此在事务处理过程中不需要进行加锁处理,如果多个事务对同一数据做更改,那么在更新请求提交之前,每个事务都会首先检查当前事务读取数据后,是否有其他事务对数据进行了修改。如果有修改,则回滚事务再回到zookeeper,version属性就是用来实现乐观锁机制的“写入校验”。,zookeeper提供了分布式数据的发布/订阅功能,zookeeper允许客户端向服务端注册一个watcher监听,当服务端的一些指定事件触发了watcher,那么服务端就会向客户端发送一个事件通知。zookeeper提供以下几种命令来对指定节点设置监听。,如图所示,表示Zookeeper的session会话状态机制。,20230306015354e11f070199d8aadd59a304a3d9941f294e42c9600,这里主要介绍两种部署方式,一种是基于Windows的单机版,一种是基于Centos7的集群部署,下载:,官网下载地址:https://archive.apache.org/dist/zookeeper/zookeeper-3.4.13/。,20230306015354b4cfffd64bae3fcc3df0335a6486695417e70c199,安装步骤:,20230306095656b696da968e965837822050ca11186a59953fcc637,20230306015355c230e4f42828b2c2375047b7dd76e40c294a91597,修改主机名:,配置名字解析IP:分别修改三台服务器的的/etc/hosts文件,添加如下映射:,重启:reboot。,免密登录:生成秘钥:(jt执行)。,执行ssh-keygen,一直按默认提示点击生成RSA密钥信息。,202303060955520159a7d92181d8ee92819068caca91b87efc2d216,分发密钥至各机器节点。,2023030601535642dbb340557c07306988996580e78c980a6427803,修改管理节点上的 ~/.ssh/config (当前用户目录下的.ssh/config)文件, 简化SSH远程连接时的输入信息:,管理节点是会有root和cuser多个用户, ssh远程连接默认会以当前用户身份进行登陆, 如果我们是root身份进行远程连接, 还是需要输入密码,我们可以修改配置 使用root远程连接时也不用输入密码。,切换root身份, su root。,编辑config:,添加如下内容:(这里的配置一定要注意前面的空格,否则会报错)。,修改文件权限:,如果没有权限的话:,禁用SELINUX:,互相免密。,在其他两台服务器上重复上面的操作。,三台服务器都要操作:,防火墙关闭:,解压:,更改文件夹名称:,拷贝配置文件:,tickTime:基本事件单元,这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,每隔tickTime时间就会发送一个心跳;最小 的session过期时间为2倍tickTime。,dataDir:存储内存中数据库快照的位置,除非另有说明,否则指向数据库更新的事务日志。注意:应该谨慎的选择日志存放的位置,使用专用的日志存储设备能够大大提高系统的性能,如果将日志存储在比较繁忙的存储设备上,那么将会很大程度上影像系统性能。,client:监听客户端连接的端口。,initLimit:允许follower连接并同步到Leader的初始化连接时间,以tickTime为单位。当初始化连接时间超过该值,则表示连接失败。,syncLimit:表示Leader与Follower之间发送消息时,请求和应答时间长度。如果follower在设置时间内不能与leader通信,那么此follower将会被丢弃。,server.A=B:C:D。,A:其中 A 是一个数字,表示这个是服务器的编号。,B:是这个服务器的 ip 地址。,C:Zookeeper服务器之间的通信端口。,D:Leader选举的端口。,我们需要修改的第一个是 dataDir ,在指定的位置处创建好目录。,第二个需要新增的是 server.A=B:C:D 配置,其中 A 对应下面我们即将介绍的myid 文件。B是集群的各个IP地址,C:D 是端口配置。,创建dataDir目录,这个目录的地址要跟zoo.cfg里面配的地址一致。,mkdir data。,在dataDir目录下创建myid文件。,vi myid:,然后在该文件中写入服务器编号,jt2服务器写0。,配置环境变量。,vi /etc/profile:,执行:source /etc/profile。,启动服务。,zk.sh:,该模式运行的zookeeper。,增加一个节点192.168.8.77(jt5)。,在该节点的zoo.cfg中加入下面的配置。,最后一个配置 server.3=jt5:2888:3888:observer ,需要在所有节点都增加。,20230306015357985b78a2958caa1c6055468c4a41160f0ffede635,然后针对各个目录这里我来解释一下,先了解下 为下一章了解源码做个准备:,导入到ideal中。,在zookeeper-server的resources目录下添加git.properties文件。,然后通过maven编译。,20230306015357e32e8e3273d703dd423641f6016dd86fc74211985,复制配置文件。,20230306015357f86fbcc56f87e3f40ad41495fec390bca3a853589,修改zookeeper-server的pom文件。,20230306015358a679e06723e496ef1872358aa23cb39e583bf7591,修改启动参数。,20230306095553813621521a5c64d435d538fd1fc06dd8b4a90b127,VM options中是conf中log4j.properties文件的全部经。,然后启动ZookeeperServerMain。,源码的启动流程这里简单说一下。,启动ZookeeperServerMain的main方法:,NIOServerCnxnFactory.startup。,在单机的基础之上增加启动类。,2023030601535911a6c42311c5b76bf273359b140be5fcd4964f340,2023030609555467f3e2d47a54854bb91048f7f655172a73cab2470,20230306015400e5f397f52f31b0173486539219020545e151fd236,在conf目录下增加配置文件zoo1.cfg、zoo2.cfg、zoo3.cfg,配置如下:,建立zkdata1、zkdata2、zkdata3目录,并增加相应文件。,202303060955548729a8f70c0fdd76ee58152801b9ca64861f63466,启动QuorumPeerMain1、QuorumPeerMain2、QuorumPeerMain3。,因为我的myid的目录是带有中文的,所以会报错。,2023030601540119bde00108e6f7924923275871d46b4775c32d285

© 版权声明

相关文章