目录

一、前言:

二、创建Eureka Server

三、调整7001端口注册中心

四、调整服务提供者的配置文件:

五、总结


一、前言:

在旧版本的时候,已经讲解过如何搭建Eureka注册中心集群,小伙伴们可以参考:进行学习。

版本说明:

SpringBoot:2.2.2.RELEASE

SpringCloud:Hoxton.SR1

本文主要搭建Spring Cloud Eureka服务注册中心(多节点),注意,本文所使用的的项目是基于上一节单节点进行搭建的。

二、创建Eureka Server

上一篇文章我们已经创建了端口号为7001的服务注册中心,这里我们再创建一个7002端口的注册中心,简单一点,组成两个节点的Eureka集群。

【a】pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springcloud2020</artifactId>
        <groupId>com.wsh.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>springcloud-eureka-server7002</artifactId>

    <dependencies>
        <!--eureka-server-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
        <!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
        <dependency>
            <groupId>com.wsh.springcloud</groupId>
            <artifactId>springcloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
        <!--boot web actuator-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--一般通用配置-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
    </dependencies>
    
</project>

【b】application.yml

server:
  port: 7002
spring:
  application:
    name: springcloud-eureka-server  #应用名称
eureka:
  instance:
    hostname: springcloud-eureka7002.com  #eureka服务端的实例名称
  client:
    fetch-registry: true    #false表示不需要去检索服务实例
    register-with-eureka: true   #false表示不向注册中心注册自己
    service-url:
      defaultZone: http://springcloud-eureka7001.com:7001/eureka/

注意点:这里instance.name尽量不要指定为localhost。

【c】启动类加上@EnableEurekaServer注解,开启Eureka服务发现的功能

package com.wsh.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

/**
 * @Description Eureka服务注册中心
 * @Date 2020/7/26 8:55
 * @Author weishihuai
 * 说明: Eureka Server的高可用实际上就是将自己做为服务向其他服务注册中心注册自己。只要有一条边将节点连接,就可以进行信息传播与同步。可以采用两两注册的方式实现集群中节点完全对等的效果,实现最高可用性集群,任何一台注册中心故障都不会影响服务的注册与发现
 */
@SpringBootApplication
//@EnableEurekaServer: 开启Eureka服务注册和发现功能(服务端)
@EnableEurekaServer
public class SpringCloudEurekaServiceApplication7002 {
    public static void main(String[] args) {
        SpringApplication.run(SpringCloudEurekaServiceApplication7002.class, args);
    }
}

【d】修改C:\Windows\System32\drivers\etc文件下的hosts文件,加入上面配置文件中的域名映射:

127.0.0.1 springcloud-eureka7001.com
127.0.0.1 springcloud-eureka7002.com

 三、调整7001端口注册中心

主要修改application.yml配置文件:

server:
  port: 7001
spring:
  application:
    name: springcloud-eureka-server  #应用名称
eureka:
  instance:
    hostname: springcloud-eureka7001.com  #eureka服务端的实例名称
  client:
    fetch-registry: true    #false表示不需要去检索服务实例
    register-with-eureka: true   #false表示不向注册中心注册自己
    service-url:
      defaultZone: http://springcloud-eureka7002.com:7002/eureka/

如上配置,可见,在7001的注册中心,指定的eureka.client.service-utl.defaultZone的地址为7002的eureka地址,在7002上面,指定的eureka.client.service-utl.defaultZone的地址为7001的eureka地址。

  • 小总结:Eureka Server集群搭建的关键点就是:Eureka两两相互注册,互相观望

四、调整服务提供者的配置文件:

server:
  port: 8001    #指定服务端口号
spring:
  application:
    name: springcloud-payment-service  #指定服务名称
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource          # 当前数据源操作类型
    driver-class-name: com.mysql.jdbc.Driver             # mysql驱动包&useSSL=false
    url: jdbc:mysql://localhost:3306/springcloud?useUnicode=true&characterEncoding=utf-8  #数据库地址
    username: root  #数据库用户名
    password: root  #数据库用户密码
mybatis:
  mapperLocations: classpath:mapper/*.xml   #mapper.xml文件扫描位置
  type-aliases-package: com.wsh.springcloud.entity    # 所有Entity别名类所在包
eureka:
  client:
    register-with-eureka: true  #注册到Eureka注册中心
    fetch-registry: true  #开启检索服务
    service-url:
#      defaultZone: http://localhost:7001/eureka/    #单机版Eureka注册中心
      defaultZone: http://springcloud-eureka7001.com:7001/eureka/,http://springcloud-eureka7002.com:7002/eureka/   #集群版Eureka注册中心

注意到,这里指定的defaultZone为:http://springcloud-eureka7001.com:7001/eureka/,http://springcloud-eureka7002.com:7002/eureka/,即同时注册到两个EurekaServer上面。当然也可以只指定注册到任意一个,因为2个注册中心组成了集群,eureka客户端通过springcloud-eureka7001.com同步给了与之互相注册的springcloud-eureka7002.com

  • 两两注册的方式可以实现集群中节点完全对等的效果,实现最高可用性集群,任何一台注册中心故障都不会影响服务的注册与发现

下面我们依次启动各个微服务,启动完成之后,浏览器访问http://springcloud-eureka7001.com:7001/http://springcloud-eureka7002.com:7002/,如下图,可以看到服务注册中心相互进行了注册,并且都在available-replicas可用分片中。

zk注册中心 nodeip_SpringCloud

zk注册中心 nodeip_SpringCloud_02

 并且我们使用postman测试,访问http://localhost:80/consumer/payment/get/3,查看返回结果:

zk注册中心 nodeip_SpringCloud_03

可见,接口正常返回数据,至此,Eureka Server集群搭建完成,有兴趣的小伙伴可以尝试停掉某个Eureka Server,然后继续请求接口,看下单个节点down掉是否会影响其他微服务正常使用。

五、总结

a. 两两注册的方式可以实现集群中节点完全对等的效果,实现最高可用性集群,任何一台注册中心故障都不会影响服务的注册与发现。

b. 首先需要注意必须开启服务注册中心的检索服务、注册自身服务的功能,否则会出现多节点的注册中心都不可用,全部服务都会出现在unavailable-replicas不可用分片中。

#要么不写,要么必须指定为true
eureka:
  client:
    fetch-registry: true #是否检索服务
    register-with-eureka: true #表示向Eureka注册自身服务

c.  spring.application.name必须相同,否则也会出现注册中心不能高可用,出现在unavailable-replicas不可用分片中。

相关项目的代码我已经放在Gitee上,有需要的小伙伴可以去拉取进行学习:https://gitee.com/weixiaohuai/springcloud_Hoxton

以上就是集群版本的Eureka服务注册中心搭建的详细过程,由于笔者水平有限,如有不对之处,还请小伙伴们指正,相互学习,一起进步。