阅读 140

Zookeeper如何实现分布式服务配置中心详解

Zookeeper在实际使用场景很多,比如配置中心,分布式锁,注册中心等,下面这篇文章主要给大家介绍了关于Zookeeper如何实现分布式服务配置中心的相关资料,需要的朋友可以参考下

目录
  • 1 Linux安装并启动Zookeeper

    • 1.1 安装

      • 1.1.1 安装

    • 1.2 启动

    • 3 Spring Boot配置

      • 3.1 依赖

        • 3.2 配置文件

          • 3.3 项目代码

            • 3.4 启动测试

            • 总结

              1 Linux安装并启动Zookeeper

              1.1 安装

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

              1.1.1 安装

              1
              2
              3
              4
              5
              6
              7
              8
              9
              10
              11
              12
              13
              14
              15
              16
              17
              18
              19
              20
              21
              22
              23
              24
              25
              26
              27
              [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 启动

              1
              2
              3
              4
              5
              6
              7
              8
              [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

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

              1
              2
              3
              4
              5
              [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

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

              1
              2
              3
              4
              5
              6
              [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配置

              1
              2
              3
              4
              5
              6
              7
              8
              9
              10
              [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 依赖

              1
              2
              3
              4
              5
              6
              7
              8
              9
              10
              11
              12
              13
              14
              15
              16
              17
              18
              19
              20
              <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

              1
              2
              3
              4
              server:
                port: 0 # 表示随机端口
              student:
                name: 1

              bootstrap.yml

              1
              2
              3
              4
              5
              6
              7
              spring:
                cloud:
                  zookeeper:
                    connect-string: 8.131.57.161:2181  # zk服务端地址
                    enabled: true  # 启动远程配置
                application:
                  name: hello

              3.3 项目代码

              1
              2
              3
              4
              5
              6
              7
              8
              9
              10
              11
              12
              13
              14
              15
              16
              17
              /**
               * @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的配置文件:

              1
              2
              3
              4
              5
              6
              7
              [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

              重新启动项目:

              总结

              到此这篇关于Zookeeper如何实现分布式服务配置中心的文章就介绍到这了

              原文链接:https://blog.csdn.net/Mr_YanMingXin/article/details/119848651


              文章分类
              代码人生
              文章标签
              版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
              相关推荐