# guage-springboot-zookeeper **Repository Path**: yangdechao_admin/guage-springboot-zookeeper ## Basic Information - **Project Name**: guage-springboot-zookeeper - **Description**: Zookeeper是一个应用于分布式应用程序的开源的分布式服务。分布式应用可以在Zookeeper基础之上构建同步服务、 配置维护、组合管理和命名服务。Zookeeper很容易使用,使用类似于文件操作系统的目录结构树来维护元数据。Zookeeper服务端的运行要依赖JDK,客户端API包含Java和C。 - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-10-11 - **Last Updated**: 2021-10-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: SpringBoot, zookeeper ## README # guage-springboot-zookeeper #### 前言 最近参与的某银行的核心分布式下移项目中,整个项目利用了分布式相关的各类技术,尤其是在微服务拆分方面,各类服务器的注册信息都注册了到了zookeeper中,该springboot项目将整合zookeeper到springboot项目中,利用java直接操作zookeeper进行各类操作。 #### 介绍 Zookeeper是一个应用于分布式应用程序的开源的分布式服务。分布式应用可以在Zookeeper基础之上构建同步服务、 配置维护、组合管理和命名服务。Zookeeper很容易使用,使用类似于文件操作系统的目录结构树来维护元数据。Zookeeper服务端的运行要依赖JDK,客户端API包含Java和C。 #### 软件架构 软件架构说明 #### 安装教程 安装Zookeeper 官网下载地址:http://archive.apache.org/dist/zookeeper/ 本课程使用的Zookeeper版本为3.4.6 zookeeper-3.4.6.tar 链接:https://pan.baidu.com/s/1aFhIJz6nRXtFXv3dfu6JIQ 提取码:1234 下载完成后可以获得名称为zookeeper-3.4.6.tar.gz的压缩文件。 安装步骤:(建议安装到自己 服务器或虚拟机上 这样日后学习的时候比较方便 ) 第一步:安装 jdk(略 ) 这个你自己在网上找资料进行安装 使用 java -version 查询当前机器 JDK版本号 第二步:把 zookeeper 的压缩包(zookeeper-3.4.6.tar.gz)上传到 linux 系统的 /root下面 第三步:解压缩压缩包 `tar -zxvf zookeeper-3.4.6.tar.gz` 第四步:进入zookeeper-3.4.6目录,创建data目录 `mkdir -p /root/zookeeper-3.4.6/data` 第五步:进入conf目录 ,把zoo_sample.cfg 改名为zoo.cfg ``` cd /root/zookeeper-3.4.6/conf mv zoo_sample.cfg zoo.cfg ``` 第六步:打开zoo.cfg文件, 修改data属性:dataDir=/root/zookeeper-3.4.6/data (对应你上面创建的data) `vi zoo.cfg` 第7步管理Zookeeper服务 进入Zookeeper的bin目录, `cd /root/zookeeper-3.4.6/bin` #启动服务命令 (1) `./zkServer.sh start` #停止服务命令 `./zkServer.sh stop` #重启服务命令 `./zkServer.sh restart ` #查看服务状态 (2) `./zkServer.sh status` 以上就是 Zookeeper注册中心服务 的搭建 使用Docker安装Zookeeper 1,下载Zookeeper镜像, docker没有 3.4.6版本的我们只能下载3.4.9 不要下载最新版本会出问题的 `docker pull zookeeper:3.4.9` 2,启动容器并添加映射 `docker run -d --name zookeeper --restart=always -p 2181:2181 zookeeper:3.4.9` 3,查看容器是否启动 ``` docker ps docker logs zookeeper (查看日志) ``` 4, 进入容器的配置文件位置 ``` docker exec -it zookeeper /bin/bash cd /conf/ vi zoo.cfg (修改 dataDir=/data 可能默认就是/data) admin.serverPort=8089 mkdir -p /data (创建dataDir的data 目录) ``` 5, 管理Zookeeper服务 进入Zookeeper的bin目录, (在创建容器的时候就已经启动了 所以不要启动了) `cd /zookeeper-3.4.9/bin` #启动服务命令 `./zkServer.sh start` #停止服务命令 `./zkServer.sh stop` #查看服务状态 (1) `./zkServer.sh status` #重启 `./zkServer.sh restart` # 查看zookeeper 日志 `./zkServer.sh start-foreground` 以上就是 Zookeeper注册中心服务 的搭建 查看节点注册情况 ``` cd /zookeeper-3.4.9/bin ./zkCli.sh ``` `然后 ls /dubbo 就能看的我们提供的服务的包路径` 比如: [com.example.service.UserService] 使用Docker安装Zookeeper集群 超级简单的 只需要在其他服务器上在安装二个 Zookeeper 就行了 因为最低三台才能集群否则 No server failure will be tolerated. You need at least 3 servers 导致你一直启动不成功 我们在虚拟机上 使用docker 来演示 –network host: 使用主机上的网络配置,如果不用这种模式,而用默认的bridge模式,会导致容器跨主机间通信失败 没条件的在多个虚拟机上安装也行 序号 服务与端口 1 192.168.66.67 2 192.168.66.68 3 192.168.66.69 创建挂载 `mkdir -p /root/zookeeper/conf /root/zookeeper/data` 1 在conf创建配置文件 `vi /root/zookeeper/conf/zoo.cfg` ``` clientPort=2181 dataDir=/data dataLogDir=/data/log tickTime=3000 initLimit=5 syncLimit=2 autopurge.snapRetainCount=3 autopurge.purgeInterval=0 maxClientCnxns=60 server.111=192.168.66.67:2888:3888 server.222=192.168.66.68:2888:3888 server.333=192.168.66.69:2888:3888 ``` autopurge.snapRetainCount 对应你集群的数量 然后在每个节点的 dataDir指定的目录下 创建myid文件 ``` cd /root/zookeeper/data touch myid && echo 111 > myid ``` 注意 这个数字111 必须对应zoo.cfg的配置文件的 server.111 也就是 192.168.66.67这台主机 要是数字222的话,就是要在192.168.66.68 这台主机上编辑myid文件 … `touch myid && echo 222 > myid ` 192.168.66.69 `touch myid && echo 333 > myid ` 拉取镜像 `docker pull zookeeper:3.4.9` 创建容器 ``` docker run --network host \ -v /root/zookeeper/data:/data \ -v /root/zookeeper/conf:/conf \ --restart=always \ --privileged=true \ --name zookeeper -d zookeeper:3.4.9 ``` 查看 `docker logs zookeeper` 这里注意必须全部的节点都搭建完成后 而且都能通过命令进入到容器里 `docker exec -it zookeeper /bin/bas` 否则只要有一个节点没有成功那么 检测运行状态状态 就会出现 JMX enabled by default Using config: /opt/zookeeper/zookeeper-3.4.5/bin/../conf/zoo.cfg Error contacting service. It is probably not running. 如果以上都没问题 那么 稍等一会 1分钟 (让服务之间进行通信) 然后 随便进入一个容器里 检查zookeeper运行情况 进入容器 ``` docker exec -it zookeeper /bin/bash cd /zookeeper-3.4.9/bin ./zkServer.sh status ``` 如果是主节点 那么会显示 leader 子节点会显示 follower 这个由Zookeeper自行选择 如果显示 standalone 那么就代表你集群没搭建成功 开放 每个节点的 2181 2888 3888 端口 或者直接将 防火墙给关了 (重要) 以上配置完了 关闭Zookeeper 然后从新启动 容器的话重启容器 端口说明: 1、2181:对cline端提供服务 2、3888:用来选举leader的端口 3、2888:集群内机器通讯使用(Leader监听此端口) 如果一直出现 Error contacting service. It is probably not running. 检测 myid 有没有顺序配置错误 检测挂载的 zoo.cfg文件内容有没有复制的时候漏掉什么东西 搭建zookeeper集群后DubboAdmin客户端 到底连接谁? 这个也很好理解 集群分为主节点和 子节点 我们DubboAdmin客户端 连接zookeeper的主节点( leader) 就行 下 创建myid文件** ``` cd /root/zookeeper/data touch myid && echo 111 > myid ``` 注意 这个数字111 必须对应zoo.cfg的配置文件的 server.111 也就是 192.168.66.67这台主机 要是数字222的话,就是要在192.168.66.68 这台主机上编辑myid文件 … ``` touch myid && echo 222 > myid 192.168.66.69 touch myid && echo 333 > myid ``` 拉取镜像 `docker pull zookeeper:3.4.9` 创建容器 ``` docker run --network host \ -v /root/zookeeper/data:/data \ -v /root/zookeeper/conf:/conf \ --restart=always \ --privileged=true \ --name zookeeper -d zookeeper:3.4.9 ``` 查看 docker logs zookeeper 这里注意必须全部的节点都搭建完成后 而且都能通过命令进入到容器里 docker exec -it zookeeper /bin/bas 1 否则只要有一个节点没有成功那么 检测运行状态状态 就会出现 JMX enabled by default Using config: /opt/zookeeper/zookeeper-3.4.5/bin/../conf/zoo.cfg Error contacting service. It is probably not running. 如果以上都没问题 那么 稍等一会 1分钟 (让服务之间进行通信) 然后 随便进入一个容器里 检查zookeeper运行情况 进入容器 ``` docker exec -it zookeeper /bin/bash cd /zookeeper-3.4.9/bin ./zkServer.sh status ``` 如果是主节点 那么会显示 leader 子节点会显示 follower 这个由Zookeeper自行选择 如果显示 standalone 那么就代表你集群没搭建成功 开放 每个节点的 2181 2888 3888 端口 或者直接将 防火墙给关了 (重要) 以上配置完了 关闭Zookeeper 然后从新启动 容器的话重启容器 端口说明: 1、2181:对cline端提供服务 2、3888:用来选举leader的端口 3、2888:集群内机器通讯使用(Leader监听此端口) 如果一直出现 Error contacting service. It is probably not running. 检测 myid 有没有顺序配置错误 检测挂载的 zoo.cfg文件内容有没有复制的时候漏掉什么东西 搭建zookeeper集群后DubboAdmin客户端 到底连接谁? 这个也很好理解 集群分为主节点和 子节点 我们DubboAdmin客户端 连接zookeeper的主节点( leader) 就行