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

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: 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实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
1月前
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
68 3
|
2月前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2
|
1月前
|
消息中间件 监控 Ubuntu
大数据-54 Kafka 安装配置 环境变量配置 启动服务 Ubuntu配置 ZooKeeper
大数据-54 Kafka 安装配置 环境变量配置 启动服务 Ubuntu配置 ZooKeeper
75 3
大数据-54 Kafka 安装配置 环境变量配置 启动服务 Ubuntu配置 ZooKeeper
|
1月前
|
监控 Dubbo Java
dubbo学习三:springboot整合dubbo+zookeeper,并使用dubbo管理界面监控服务是否注册到zookeeper上。
这篇文章详细介绍了如何将Spring Boot与Dubbo和Zookeeper整合,并通过Dubbo管理界面监控服务注册情况。
80 0
dubbo学习三:springboot整合dubbo+zookeeper,并使用dubbo管理界面监控服务是否注册到zookeeper上。
|
1月前
|
分布式计算 NoSQL Java
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
43 2
|
1月前
|
分布式计算 Hadoop
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
47 1
|
2月前
|
数据采集 分布式计算 MaxCompute
MaxCompute 分布式计算框架 MaxFrame 服务正式商业化公告
MaxCompute 分布式计算框架 MaxFrame 服务于北京时间2024年09月27日正式商业化!
84 3
|
2月前
|
Java 网络安全
zookeeper的环境搭建和配置
本文介绍了如何在多台节点上搭建和配置Zookeeper环境。内容包括Zookeeper的下载、解压、环境变量配置、配置文件修改、zkdata目录创建、myid文件设置,以及将Zookeeper及其配置文件复制到其他节点。还提供了运行测试的命令,包括启动、状态检查和停止Zookeeper服务。
zookeeper的环境搭建和配置
|
1月前
|
存储 SQL 消息中间件
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
47 0
|
1月前
|
NoSQL Java Redis
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
Redis分布式锁在高并发场景下是重要的技术手段,但其实现过程中常遇到五大深坑:**原子性问题**、**连接耗尽问题**、**锁过期问题**、**锁失效问题**以及**锁分段问题**。这些问题不仅影响系统的稳定性和性能,还可能导致数据不一致。尼恩在实际项目中总结了这些坑,并提供了详细的解决方案,包括使用Lua脚本保证原子性、设置合理的锁过期时间和使用看门狗机制、以及通过锁分段提升性能。这些经验和技巧对面试和实际开发都有很大帮助,值得深入学习和实践。
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?

热门文章

最新文章