Zookeeper实现分布式服务配置中心

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: Zookeeper实现分布式服务配置中心

1 Linux安装并启动Zookeeper

1.1 安装

下载链接:https://archive.apache.org/dist/zookeeper/

1.1.1 安装
[root@iZ1608aqb7ntn9Z tmp]# ls
apache-zookeeper-3.5.7-bin.tar.gz  hsperfdata_root
[root@iZ1608aqb7ntn9Z tmp]# tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz 
apache-zookeeper-3.5.7-bin/docs/
apache-zookeeper-3.5.7-bin/docs/skin/
apache-zookeeper-3.5.7-bin/docs/images/
......
[root@iZ1608aqb7ntn9Z tmp]# mv apache-zookeeper-3.5.7-bin /usr/local/zookeeper
[root@iZ1608aqb7ntn9Z tmp]# cd /usr/local/zookeeper
[root@iZ1608aqb7ntn9Z zookeeper]# cd conf/
[root@iZ1608aqb7ntn9Z conf]# ls
configuration.xsl  log4j.properties  zoo_sample.cfg
[root@iZ1608aqb7ntn9Z conf]# cp zoo_sample.cfg zoo.cfg
[root@iZ1608aqb7ntn9Z conf]# ls
configuration.xsl  log4j.properties  zoo.cfg  zoo_sample.cfg
[root@iZ1608aqb7ntn9Z conf]# vim zoo.cfg 
# 修改zoo.cfg配置文件 内容为:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/data
clientPort=2181
# 保存退出
[root@iZ1608aqb7ntn9Z conf]# cd ..
[root@iZ1608aqb7ntn9Z zookeeper]# mkdir data
[root@iZ1608aqb7ntn9Z zookeeper]# ls
bin  conf  data  docs  lib  LICENSE.txt  NOTICE.txt  README.md  README_packaging.txt
复制代码


1.2 启动

[root@iZ1608aqb7ntn9Z zookeeper]# cd bin/
[root@iZ1608aqb7ntn9Z bin]# ./zkServer start 
......
[root@iZ1608aqb7ntn9Z bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Error contacting service. It is probably not running.
复制代码


在上边我们发现了启动错误,查看日志,发现8080端口被占用,通过查阅Zookeeper3.5的官方文档,发现这是Zookeeper3.5的新特性:

网络异常,图片无法展示
|


所以我们需要再次修改配置文件,修改启动端口:

在配置文件中加入admin.serverPort=8888

然后再次启动,查看状态:

[root@iZ1608aqb7ntn9Z bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper3.5.7/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: standalone
复制代码


发现启动成功,接下来我们用客户端链接:

[root@iZ1608aqb7ntn9Z bin]# ./zkCli.sh 
Connecting to localhost:2181
......
WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTING) 0] ls /
[zookeeper]
复制代码

1.3 阿里云安全组放开2181端口

(略)

2 zookeeper配置

[zk: localhost:2181(CONNECTING) 0] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 4] create /config
Created /config
[zk: localhost:2181(CONNECTED) 6] create /config/hello # config后的名称要与spring.name的名称对应
Created /config/hello
[zk: localhost:2181(CONNECTED) 7] create /config/hello/student.name zs
Created /config/hello/student.name
[zk: localhost:2181(CONNECTED) 8] get /config/hello/student.name 
zs
复制代码

3 Spring Boot配置

3.1 依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
        <version>2.1.4.RELEASE</version>
        <type>pom</type>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-zookeeper-config</artifactId>
        <version>2.1.4.RELEASE</version>
        <type>pom</type>
        <scope>runtime</scope>
    </dependency>
</dependencies>
复制代码

注意:一定要注意Spring Boot和Spring Cloud的版本对应!

3.2 配置文件

application.yml

server:
  port: 0 # 表示随机端口
student:
  name: 1
复制代码

bootstrap.yml

spring:
  cloud:
    zookeeper:
      connect-string: 8.131.57.161:2181  # zk服务端地址
      enabled: true  # 启动远程配置
  application:
    name: hello
复制代码

3.3 项目代码

/**
 * @desc: 控制器
 * @author: YanMingXin
 * @create: 2021/8/20-16:31
 **/
@RestController
public class HelloController {
    @Value("${student.name}")
    private String name;
    @RequestMapping("/hello")
    public String getName() {
        return name;
    }
}
复制代码

3.4 启动测试

网络异常,图片无法展示
|

下面我们来修改下远程配置,看下是不是真的使用了zookeeper的配置文件:

[zk: localhost:2181(CONNECTED) 9] delete /config/hello/student.name 
[zk: localhost:2181(CONNECTED) 10] get /config/hello/student.name 
org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /config/hello/student.name
[zk: localhost:2181(CONNECTED) 11] create  /config/hello/student.name  ls 
Created /config/hello/student.name
[zk: localhost:2181(CONNECTED) 12] get /config/hello/student.name 
ls
复制代码

重新启动项目:


网络异常,图片无法展示
|


相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
7天前
|
消息中间件 传感器 Cloud Native
事件驱动作为分布式异步服务架构
【6月更文挑战第25天】本文介绍事件驱动架构(EDA)是异步分布式设计的关键模式,适用于高扩展性需求。EDA提升服务韧性,支持CQRS、数据通知、开放式接口和事件流处理。然而,其脆弱性包括组件控制、数据交换、逻辑关系复杂性、潜在死循环和高并发挑战。EDA在云原生环境,如Serverless,中尤其适用。
31 2
事件驱动作为分布式异步服务架构
|
11天前
|
Shell 虚拟化
分布式系统详解--框架(Zookeeper-基本shell命令)
分布式系统详解--框架(Zookeeper-基本shell命令)
13 1
|
4天前
|
缓存 NoSQL 数据库
分布式系统面试全集通第一篇(dubbo+redis+zookeeper----分布式+CAP+BASE+分布式事务+分布式锁)
分布式系统面试全集通第一篇(dubbo+redis+zookeeper----分布式+CAP+BASE+分布式事务+分布式锁)
14 0
|
4天前
|
设计模式 监控 安全
一文搞懂:zookeeper实现分布式锁安全用法
一文搞懂:zookeeper实现分布式锁安全用法
|
11天前
|
Java 网络安全
分布式系统详解--框架(Zookeeper-简介和集群搭建)
分布式系统详解--框架(Zookeeper-简介和集群搭建)
27 0
|
18天前
|
存储 监控 负载均衡
Zookeeper 详解:分布式协调服务的核心概念与实践
Zookeeper 详解:分布式协调服务的核心概念与实践
18 0
|
2月前
|
监控 负载均衡 Cloud Native
ZooKeeper分布式协调服务详解:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入剖析ZooKeeper分布式协调服务原理,涵盖核心概念如Server、Client、ZNode、ACL、Watcher,以及ZAB协议在一致性、会话管理、Leader选举中的作用。讨论ZooKeeper数据模型、操作、会话管理、集群部署与管理、性能调优和监控。同时,文章探讨了ZooKeeper在分布式锁、队列、服务注册与发现等场景的应用,并在面试方面分析了与其它服务的区别、实战挑战及解决方案。附带Java客户端实现分布式锁的代码示例,助力提升面试表现。
430 2
|
2月前
|
监控 Dubbo 前端开发
快速入门分布式系统与Dubbo+zookeeper Demo
快速入门分布式系统与Dubbo+zookeeper Demo
433 0
|
2月前
|
监控 NoSQL Java
Zookeeper分布式锁
Zookeeper分布式锁
514 1