ZooKeeper集群搭建、事务日志与快照

ZooKeeper集群搭建


准备虚拟机

          准备三台虚拟机,我的是三台Centos7,为了方便ZooKeeper的Leader选举,节点要是奇数台。关闭防火墙(也可以选择开放ZooKeeper端口,为了简单,直接关闭)。
在这里插入图片描述
          记录三台虚拟机ip地址。



安装jdk并配置环境变量

下载jdk包,此处是jdk8,将其放到自己想要的目录下,并解压。
在这里插入图片描述
配置环境变量:

        vim /etc/profile

编辑如下:
在这里插入图片描述
然后

      source /etc/profile

如下则配置成功:
在这里插入图片描述

下载并配置ZooKeeper

          下载地址:http://zookeeper.apache.org/releases.html

          将下载包放到自己想要的目录下,同级目录创建data目录和dataLog目录,一个存放事务日志,一个存放快照,tar -zxvf命令解压conf目录zoo_simple.cnf文件并改名zoo.cnf文件,编辑zoo.cnf
在这里插入图片描述
在这里插入图片描述
          编辑如下:
在这里插入图片描述
在data目录下新建myid文件,并输入机器号进去:

在这里插入图片描述

另外三台机器均如此操作,将myid机器号分别设为2和3,启动三台机器:
在这里插入图片描述
启动后查看状态,可以看到myid最大的最终选举成为了leader:
在这里插入图片描述

若无法正常启动,可查看 zookeeper_home/logs/ 下的文件。



测试

          创建test节点,另外两个节点获取test的值,测试效果如下:
在这里插入图片描述



事务日志与快照


          ZooKeeper集群中的每个服务器节点每次接收到写操作请求时,都会先将这次请求发送给leader,leader将这次写操作转换为带有状态的事务,然后leader会对这次写操作广播出去以便进行协调。当协调通过(大多数节点允许这次写)后,leader通知所有的服务器节点,让它们将这次写操作应用到内存数据库中,并将其记录到事务日志中。

          当事务日志记录的次数达到一定数量后(默认10W次),就会将内存数据库序列化一次,使其持久化保存到磁盘上,序列化后的文件称为"快照文件"。每次拍快照都会生成新的事务日志。

          有了事务日志和快照,就可以让任意节点恢复到任意时间点(只要没有清理事务日志和快照)。

          在没有dataLogDir配置项的时候,zookeeper默认将事务日志文件和快照日志文件都存储在dataDir对应的目录下。建议将事务日志(dataLogDir)与快照日志(dataLog)单独配置,因为当zookeeper集群进行频繁的数据读写操作是,会产生大量的事务日志信息,将两类日志分开存储会提高系统性能。

          在ZooKeeper集群启动后,当第一个客户端连接到某个服务器节点时,会创建一个会话,这个会话也是事务,于是创建第一个事务日志,一般名为log.100000001,这里的100000001是这次会话的事务id(zxid)。之后的事务都将写入到这个文件中,直到拍下一个快照。

在这里插入图片描述

          zookeeper快照文件的命名规则为snapshot.zxid,其中zxid表示zookeeper触发快照的那个瞬间,提交的最后一个事务的ID。

          zookeeper事务日志为二进制文件,不能通过vim等工具直接访问,需要用到ZooKeeper的lib下的三个jar包,命令如下:

  java -classpath :./zookeeper-3.6.0.jar:./slf4j-api-1.7.25.jar:./zookeeper-jute-3.6.0.jar org.apache.zookeeper.server.LogFormatter /usr/software/dataLog/version-2/log.100000001 

查看结果如图:

在这里插入图片描述
  
          在zookeeper 3.4.0以后,zookeeper提供了自动清理snapshot和事务日志功能,通过配置zoo.cfg下的autopurge.snapRetainCount和autopurge.purgeInterval这两个参数实现日志文件的定时清理。

          autopurge.snapRetainCount这个参数指定了需要保留的文件数目,默认保留3个;

          autopurge.purgeInterval这个参数指定了清理频率,单位是小时,需要填写一个1或者更大的数据,默认0表示不开启自动清理功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值