spring-cloud-Hoxton.SR6 (springBoot2.2.x-2.3.x)学习篇(四)注册中心-Zookeeper

spring-cloud-Hoxton.SR6 (springBoot2.2.x-2.3.x)学习篇(四)注册中心-Zookeeper

Zookeeper介绍

​ Zookeeper是一个高性能,分布式的,开源分布式应用协调服务。它提供了简单原始的功能,分布式应用可以基于它实现更高级的服务,比如同步,配置管理,集群管理,名空间。它被设计为易于编程,使用文件系统目录树作为数据模型。

Zookepper安装

(1)win、Linux 安装

# 官网下载 zookeeper 

戳我进Zookeeper 官网

spring-cloud-Hoxton.SR6 (springBoot2.2.x-2.3.x)学习篇(四)注册中心-Zookeeper_第1张图片

# 选择版本下载即可

spring-cloud-Hoxton.SR6 (springBoot2.2.x-2.3.x)学习篇(四)注册中心-Zookeeper_第2张图片

spring-cloud-Hoxton.SR6 (springBoot2.2.x-2.3.x)学习篇(四)注册中心-Zookeeper_第3张图片

# 解压运行
	# config 目录下的  zoo_sample.cfg 更改为 zoo.cfg
	# win 则运行 bin 目录下的 zkServer.cmd
	# Linux 则运行 bin目录下的 zkServer.sh

image-20200823145632986

image-20200823145957578

(2)docker安装

本次zookepper 基于 docker 安装,目前是单机版安装 ,集群安装的话,后续随着学习的深入更新吧!本次仅仅是demo 搭建,简单使用了解下!

spring-cloud-Hoxton.SR6 (springBoot2.2.x-2.3.x)学习篇(四)注册中心-Zookeeper_第4张图片

安装运行 一步到胃

docker run -d \
-p 2181:2181 \
-v /leiledeve/zookeeper/data/:/data/ \
--name=zookeeper  \
--privileged zookeeper
--privileged  容器里的内核参数 让docker应用容器获取到宿主机的root权限

spring-cloud-Hoxton.SR6 (springBoot2.2.x-2.3.x)学习篇(四)注册中心-Zookeeper_第5张图片

image-20200822155718227

官网中,还提供了 为集群 zookeeper 搭建方式

何为为集群 (一个服务器上搭建 zk 集群)

通过docker compose 安装

version: '3.1'

services:
  zoo1:
    image: zookeeper
    restart: always
    hostname: zoo1
    ports:
      - 2181:2181
    environment:
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=0.0.0.0:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181

  zoo2:
    image: zookeeper
    restart: always
    hostname: zoo2
    ports:
      - 2182:2181
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=zoo3:2888:3888;2181

  zoo3:
    image: zookeeper
    restart: always
    hostname: zoo3
    ports:
      - 2183:2181
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181

那么安装和启动了的呢,和Consul 一样,是zk 的服务端,我们微服务想要使用其作为我们的注册中心的话呢,需要在注册到其中

下边呢,开始搭建一个我们自己的 zk 客户端 即一个普通的的微服务项目,注册到zk服务端

Zookepper 客户端(springcloud)搭建

  • 创建项目

    spring-cloud-Hoxton.SR6 (springBoot2.2.x-2.3.x)学习篇(四)注册中心-Zookeeper_第6张图片

  • 引入依赖

    版本问题呢,还是按开始学习的来吧,Boot 2.2.5 cloud Hontix.SR6

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
            </dependency>
    

    因为需要启动服务,所以也需要服务器支持, tomcat jetty undertow等,当然,我们引入web 依赖就行了

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
  • yml 配置

    spring-cloud-Hoxton.SR6 (springBoot2.2.x-2.3.x)学习篇(四)注册中心-Zookeeper_第7张图片

    我们之前在服务器上使用 docker 安装了zk ,其将其通信端口暴露了出来,则在项目链接使用服务器ip 端口即可

    server:
      port: 9001
    spring:
      application:
        # 自定义的一个微服务服务名
        name: zookeeper-client-demo
      cloud:
        zookeeper:
          # zookeeper 连接地址  ip:端口
          connect-string: xxx:2181
    

    因为其有很多默认配置,所以呢我们配置一些重要信息即可

    spring-cloud-Hoxton.SR6 (springBoot2.2.x-2.3.x)学习篇(四)注册中心-Zookeeper_第8张图片

  • 注解启用zk

    spring-cloud-Hoxton.SR6 (springBoot2.2.x-2.3.x)学习篇(四)注册中心-Zookeeper_第9张图片

那么,我怎么怎么看我们的服务是否注册到了ZK 上呢?

  1. 编写项目调用服务看是否可以调通

  2. zk 管理查看

    • 下载ZooKeeper管理工具 例如ZooInspector

    • 下载 解压 jar 运行 连接即可

    • 下载地址https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip

    • 运行zookeeper-dev-ZooInspector.jar

    • spring-cloud-Hoxton.SR6 (springBoot2.2.x-2.3.x)学习篇(四)注册中心-Zookeeper_第10张图片

      spring-cloud-Hoxton.SR6 (springBoot2.2.x-2.3.x)学习篇(四)注册中心-Zookeeper_第11张图片

    • idea zk 插件

      spring-cloud-Hoxton.SR6 (springBoot2.2.x-2.3.x)学习篇(四)注册中心-Zookeeper_第12张图片


ZK注册中心下微服务通信调用

(1)改造上方搭建springcloud 项目

  • 项目更名

    spring-cloud-Hoxton.SR6 (springBoot2.2.x-2.3.x)学习篇(四)注册中心-Zookeeper_第13张图片

  • 引入Openfeign 调用依赖并开启
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
            </dependency>
    

    spring-cloud-Hoxton.SR6 (springBoot2.2.x-2.3.x)学习篇(四)注册中心-Zookeeper_第14张图片

  • 创建 web 接口 模拟微服务调用

    spring-cloud-Hoxton.SR6 (springBoot2.2.x-2.3.x)学习篇(四)注册中心-Zookeeper_第15张图片

    spring-cloud-Hoxton.SR6 (springBoot2.2.x-2.3.x)学习篇(四)注册中心-Zookeeper_第16张图片

(2)搭建登录服务

  • 创项目,引依赖
  • yml配置
    server:
      port: 9002
    spring:
      application:
        # 自定义的一个微服务服务名
        name: app-login
      cloud:
        zookeeper:
          # zookeeper 连接地址  ip:端口
          connect-string: localhost:2181
          discovery:
            enabled: true
            register: true
    
  • 创建登录接口

    spring-cloud-Hoxton.SR6 (springBoot2.2.x-2.3.x)学习篇(四)注册中心-Zookeeper_第17张图片

  • 启动运行,zk管理工具查看

    spring-cloud-Hoxton.SR6 (springBoot2.2.x-2.3.x)学习篇(四)注册中心-Zookeeper_第18张图片

  • 调用测试

    流程说明: 前端访问用户登录服务 localhost:9001/user/login进行登录,看是否能拿到 登录成功,9002返回对象

    spring-cloud-Hoxton.SR6 (springBoot2.2.x-2.3.x)学习篇(四)注册中心-Zookeeper_第19张图片

spring-cloud-Hoxton.SR6 (springBoot2.2.x-2.3.x)学习篇(四)注册中心-Zookeeper_第20张图片

可以看到 9001 发起的登录服务,返回对象有了 9002填充的登录时间,说明 9001 用户服务调用到了9002登录服务,其通过zk 注册表找到了对应的服务!测试成功!


微服务的CAP定理

# 1.CAP定理

- CAP定理:CAP定理又称CAP原则,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。
	`一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
	`可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)
	`分区容忍性(P),就是高可用性,一个节点崩了,并不影响其它的节点(100个节点,挂了几个,不影响服务,越多机器越好)

Eureka、Zookeeper、Consul区别

# 2.Eureka特点  
- Eureka中没有使用任何的数据强一致性算法保证不同集群间的Server的数据一致,仅通过数据拷贝的方式争取注册中心数据的最终一致性,虽然放弃数据强一致性但是换来了Server的可用性,降低了注册的代价,提高了集群运行的健壮性。

# 3.Consul特点
- 基于Raft算法,Consul提供强一致性的注册中心服务,但是由于Leader节点承担了所有的处理工作,势必加大了注册和发现的代价,降低了服务的可用性。通过Gossip协议,Consul可以很好地监控Consul集群的运行,同时可以方便通知各类事件,如Leader选择发生、Server地址变更等。

# 4.zookeeper特点
- 基于Zab协议,Zookeeper可以用于构建具备数据强一致性的服务注册与发现中心,而与此相对地牺牲了服务的可用性和提高了注册需要的时间。

spring-cloud-Hoxton.SR6 (springBoot2.2.x-2.3.x)学习篇(四)注册中心-Zookeeper_第21张图片


以上呢,便是对三个注册中心 Eureka、Consul、Zookeeper 的简单使用!Nacos 的话呢,放在Spirngcloud alibaba中一起学习吧,暂时不更!

后续开始springcloud 的其余组件的学习了,例如,网关断路器配置中心链路追踪、以及上述简单使用了的 微服务的几种调用方式


zk demo 源码

你可能感兴趣的:(springcloud,zookeeper,分布式,docker,cloud)