ZooKeeper应用---分布式配置更新

本文介绍了基于Zookeeper的分布式配置更新实验,包括Zookeeper集群的搭建、客户端代码编写和实验验证。实验展示了如何利用Zookeeper的监听和回调机制实现实时数据更新,以及在节点创建、变更、删除时的处理逻辑。
摘要由CSDN通过智能技术生成

本文是听了老师讲的zookeeper课程之后的课下实验,文章是原创的,思想是抄袭的

目录

基本概念

实验描述

实验步骤

建立zookeeper集群

准备jdk和zookeeper

准备Dockerfile

准备source.list文件

准备集群配置文件 zoo.cfg 

编译docker镜像

启动集群

编写client代码

验证实验设想

Dockerfile

maven编译

运行项目


基本概念

  • zookeeper监听机制,客户端在调用 getData 和 exists 方法时可以指定监听watcher,用于后续该数据发生变化自动感知当前数据的状态
  • zookeeper回调机制,当需要异步操作数据时可以指定回调方法callback,类似响应式编程
  • 响应式编程:程序员不需要按照应用的处理逻辑去组织代码,而是规定什么事件发生后做什么事情(逻辑帝?代码的上帝?哈哈哈,我也不知道怎么形容,老师说的。。。

实验描述

实验原理很简单

client每次启动后发起向zookeeper的连接,并且去获取位于 /testConf/AppConf 路径下的节点,而 AppConf 节点中保存的是client运行所需要的数据,这里假设都是简单的字符串。

然后大致可以分为这么几种情况:

  • client初次启动时,需要的节点不存在,这时client应该阻塞等待需要的数据被创建
  • client运行过程中,节点的数据发生变更,client需要实时获取最新的数据
  • client运行过程中,节点被删除,client需要被阻塞,等待数据恢复
  • client阻塞等待数据时,节点被创建,client立即获得数据并开始运行业务代码

实验步骤

大致步骤如下:

  • 建立zookeeper集群
  • 编写client代码
  • 验证实验设想

建立zookeeper集群

需要3台或者4台机器来构建zookeeper集群,由于我本地是 M1 架构的 Mac笔记本,所以选择使用 docker 构建实验环境

准备jdk和zookeeper

从oracle官网下载 jdk1.8 以及从 apache 官网下载 zookeeper-3.7.0,老师讲课的时候用的是 zookeeper-3.4.6,不过我去官网没找到老师的版本,就使用了 3.7,目录结构如下:

准备Dockerfile

FROM ubuntu:18.04

COPY ./jdk1.8.0_321 /usr/local/jdk1.8.0_321
COPY ./apache-zookeeper-3.7.0-bin /opt/zookeeper-3.7.0
COPY ./zoo.cfg /opt/zookeeper-3.7.0/conf/zoo.cfg

RUN echo export ZOOKEEPER_HOME=/opt/zookeeper-3.7.0 >> /root/.bashrc \
 && echo export PATH=$PATH:$ZOOKEEPER_HOME/bin >> /root/.bashrc \
 && echo export PATH=$PATH:/usr/local/jdk1.8.0_321/bin/ >> /root/.bashrc \
 && . /root/.bashrc

RUN mkdir -p /var/zookeeper/ \
 && echo 1 > /var/zookeeper/myid

COPY ./sources.list.bionic /etc/apt/sources.list
RUN apt-get update && apt-get install -y \
        libssl-dev \
        iputils-ping \
        vim \
        net-tools \
        lsof \
        procps

直接使用官方 ubuntu:18.04 的基础镜像,为了在容器中安装软件,需要先提供一份国内的软件源

准备source.list文件

# 默认注释了源码仓库,如有需要可自行取消注释
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic main restricted universe multiverse
# deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic main main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse
# deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse
# deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse
# deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-proposed main restricted universe multiverse
# deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-proposed main restricted universe multiverse

这里要注意一下,这个文件是针对 ARM 架构(M1) 的 ubuntu容器,其他架构可以去这里找:

ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirrorubuntu 使用帮助 | 镜像站使用帮助 | 清华大学开源软件镜像站,致力于为国内和校内用户提供高质量的开源软件镜像、Linux 镜像源服务,帮助用户更方便地获取开源软件。本镜像站由清华大学 TUNA 协会负责运行维护。https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/

准备集群配置文件 zoo.cfg 

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/var/zookeeper/
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

## Metrics Providers
#
# https://prometheus.io Metrics Exporter
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true

server.1=zk01:2888:3888
server.2=zk02:2888:3888
server.3=zk03:2888:3888
server.4=zk04:2888:3888

这里主要注意两个配置:dataDir 和 最后四行

dataDir 是配置集群节点的数据目录 zookeeper 启动时会在这个目录里找 myid 的文件,这个文件里面只有一个数字,代表当前节点的id,这个id也会影响选主时的节点之间优先级,如果 id 重复了,后面启动的节点是起不来的,Dockerfile 里面为了方便给每个节点都分配了1的id,所以在集群节点启动前,要手动去修改一下myid文件里的值。

集群节点配置:最后四行是集群节点配置,格式是 

        server.{集群节点id}={节点ip}:{数据同步端口}:{选主投票端口}

这里指定数据同步走 2888 端口,选主通信走 3888 端口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值