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

本文涉及的产品
MSE Nacos/ZooKeeper 企业版试用,1600元额度,限量50份
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,182元/月
简介: 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
复制代码

重新启动项目:


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


相关文章
|
5月前
|
安全 网络安全 数据库
YashanDB分布式节点间SSL连接配置
本文介绍YashanDB分布式节点间SSL连接配置方法,确保通信安全。需统一为整个集群配置SSL,使用相同根证书签名的服务器证书,否则可能导致连接失败或数据库无法启动。文章详细说明了使用OpenSSL生成根证书、服务器私钥、证书及DH文件的步骤,并指导如何将证书分发至各节点。最后,通过配置数据库参数(如`din_ssl_enable`)并重启集群完成设置。注意,证书过期需重新生成以保障安全性。
|
6月前
|
消息中间件 人工智能 监控
文生图架构设计原来如此简单之分布式服务
想象一下,当成千上万的用户同时要求AI画图,如何公平高效地处理这些请求?文生图/图生图大模型的架构设计看似复杂,实则遵循简单而有效的原则:合理排队、分工明确、防患未然。
224 14
文生图架构设计原来如此简单之分布式服务
|
11月前
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
391 3
|
7月前
|
SQL 数据建模 BI
【YashanDB 知识库】用 yasldr 配置 Bulkload 模式作单线程迁移 300G 的业务数据到分布式数据库,迁移任务频繁出错
问题描述 详细版本:YashanDB Server Enterprise Edition Release 23.2.4.100 x86_64 6db1237 影响范围: 离线数据迁移场景,影响业务数据入库。 外场将部分 NewCIS 的报表业务放到分布式数据库,验证 SQL 性能水平。 操作系统环境配置: 125G 内存 32C CPU 2T 的 HDD 磁盘 问题出现的步骤/操作: 1、部署崖山分布式数据库 1mm 1cn 3dn 单线启动 yasldr 数据迁移任务,设置 32 线程的 bulk load 模式 2、观察 yasldr.log 是否出现如下错
|
10月前
|
数据库
如何在Seata框架中配置分布式事务的隔离级别?
总的来说,配置分布式事务的隔离级别是实现分布式事务管理的重要环节之一,需要认真对待和仔细调整,以满足业务的需求和性能要求。你还可以进一步深入研究和实践 Seata 框架的配置和使用,以更好地应对各种分布式事务场景的挑战。
298 63
|
9月前
|
存储 SpringCloudAlibaba Java
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
|
8月前
|
消息中间件 负载均衡 Java
如何设计一个分布式配置中心?
这篇文章介绍了分布式配置中心的概念、实现原理及其在实际应用中的重要性。首先通过一个面试场景引出配置中心的设计问题,接着详细解释了为什么需要分布式配置中心,尤其是在分布式系统中统一管理配置文件的必要性。文章重点分析了Apollo这一开源配置管理中心的工作原理,包括其基础模型、架构模块以及配置发布后实时生效的设计。此外,还介绍了客户端与服务端之间的交互机制,如长轮询(Http Long Polling)和定时拉取配置的fallback机制。最后,结合实际工作经验,分享了配置中心在解决多台服务器配置同步问题上的优势,帮助读者更好地理解其应用场景和价值。
423 18
|
9月前
|
消息中间件 存储 安全
分布式系统架构3:服务容错
分布式系统因其复杂性,故障几乎是必然的。那么如何让系统在不可避免的故障中依然保持稳定?本文详细介绍了分布式架构中7种核心的服务容错策略,包括故障转移、快速失败、安全失败等,以及它们在实际业务场景中的应用。无论是支付场景的快速失败,还是日志采集的安全失败,每种策略都有自己的适用领域和优缺点。此外,文章还为技术面试提供了解题思路,助你在关键时刻脱颖而出。掌握这些策略,不仅能提升系统健壮性,还能让你的技术栈更上一层楼!快来深入学习,走向架构师之路吧!
220 12
|
10月前
|
存储 运维 NoSQL
分布式读写锁的奥义:上古世代 ZooKeeper 的进击
本文作者将介绍女娲对社区 ZooKeeper 在分布式读写锁实践细节上的思考,希望帮助大家理解分布式读写锁背后的原理。
259 11

热门文章

最新文章