精华内容
下载资源
问答
  • 微服务系统中从原则上要杜绝一切单点服务,包括注册中心,配置中心,网关服务和业务服务,要使整个系统是一个高可用的状态。 其它中间件系统比如Redis,Mq,Mongodb,ElasticSearch以及DB等系统,原则上也要杜绝单点...

    概念

    生产环境中注册中心服务一定要集群,不能是单点,不然注册中心服务出现故障后,整个微服务系统都将不可用。
    微服务系统中从原则上要杜绝一切单点服务,包括注册中心,配置中心,网关服务和业务服务,要使整个系统是一个高可用的状态。
    其它中间件系统比如Redis,Mq,Mongodb,ElasticSearch以及DB等系统,原则上也要杜绝单点,除了分片集群外,还需要有主从集群来保证系统的高可用。
    eureka server服务是对等节点,不是主从节点,集群不必非要是奇数

    在这里插入图片描述

    注册中心服务eureka server

    先创建一个注册中心服务:
    1,创建一个maven项目scd-eureka-server-cluster
    项目名称可以按需自定义
    2,引入pom依赖

    <?xml version="1.0"?>
    <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    	<modelVersion>4.0.0</modelVersion>
    	<parent>
    		<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-parent -->
    		<groupId>org.springframework.cloud</groupId>
    		<artifactId>spring-cloud-starter-parent</artifactId>
    		<version>Greenwich.RELEASE</version>
    	</parent>
    	
    	<groupId>com.scd</groupId>
    	<artifactId>scd-eureka-server-cluster</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	
    	<name>scd-eureka-server-cluster</name>
    	<url>http://maven.apache.org</url>
    	
    	<properties>
    		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    	</properties>
    	
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    		</dependency>
    	</dependencies>
    	
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
    			</plugin>
    		</plugins>
    	</build>
    	
    </project>
    
    
    • parent指定为spring-cloud-starter-parent,可以自动管理springBoot和其它依赖的version
    • 注册中心服务需要引入spring-cloud-starter-netflix-eureka-server
    • spring-boot-maven-plugin为springboot项目的打包plugin

    3,启动类上加@EnableEurekaServer注解

    @SpringBootApplication
    @EnableEurekaServer
    public class Application {
    
    	public static void main(String[] args) {
    		SpringApplication.run(Application.class, args);
    	}
    
    }
    

    4,yml配置
    集群中不同的注册中心服务实例(服务实例是指服务启动后的实例,一个服务可以起N个实例),要互相知道对方的存在,以便启动后互相通信,互相同步注册列表。
    spring boot项目启动的时候可以通过java命令指定–spring.profiles.active=xxx来使用不同的profile,启动后会加载application.yml和application-xxx.yml两个配置文件的属性。所以集群中不同服务实例共同的配置写在application.yml中,不同的配置分别写在各自的application-xxx.yml中即可。
    我们用两个实例来演示如何配置注册中心的集群,这两个实例启动在同一个主机上,使用不同的端口

    共同的配置写在application.yml中

    spring:
      application:
        name: scd-eureka-server-cluster
    

    第一个实例的配置文件:application-server1.yml,使用50000端口

    #---------------------------------------------------------------------    
    server:
      port: 50000
    #---------------------------------------------------------------------
    eureka:
      instance:
        prefer-ip-address: false
        status-page-url-path: /actuator/info
        health-check-url-path: /actuator/health
        hostname: scd-eureka-server-cluster1
      client:
        register-with-eureka: true #把本服务也注册到注册中心,从注册中心的服务列表中可以看到本服务
        fetch-registry: false #从注册中心拉取服务列表,由于是本服务是注册中心,所以不需要,其它业务服务都需要是true
        service-url:
          defaultZone: http://scd-eureka-server-cluster2:50001/eureka/
    
    • prefer-ip-address:注册中心集群服务要设置为false,否则无法集群,会成为一个unavailable-replicas
    • hostname: 写的是本实例的hostname,eureka要求不同实例的hostname一定要不同,否则无法集群
    • service-url.defaultZone: 写的是另外实例的eureka服务地址,如果有多个中间用,分割,例http://cluster1:50001/eureka/,http://cluster2:50002/eureka/

    第二个实例的配置文件:application-server2.yml,使用50001端口

    server:
      port: 50001
    #---------------------------------------------------------------------
    eureka:
      instance:
        prefer-ip-address: false
        status-page-url-path: /actuator/info
        health-check-url-path: /actuator/health
        hostname: scd-eureka-server-cluster2
      client:
        register-with-eureka: true #把本服务也注册到注册中心,从注册中心的服务列表中可以看到本服务
        fetch-registry: false #从注册中心拉取服务列表,由于是本服务是注册中心,所以不需要,其它业务服务都需要是true
        service-url:
          defaultZone: http://scd-eureka-server-cluster1:50000/eureka/
    
    • 和server1类似

    完整示例代码可以参照:https://gitee.com/ifrozen/spring-cloud-demo/tree/master/demo-4

    5,配置hosts文件
    上面的配置中设置了scd-eureka-server-cluster1和scd-eureka-server-cluster2两个hostname,需要在C:\Windows\System32\drivers\etc\hosts文件中增加配置:

    127.0.0.1 scd-eureka-server-cluster1
    127.0.0.1 scd-eureka-server-cluster2
    

    6,启动注册中心集群

    1,通过maven命令【mvn package】打包注册中心服务:

    C:\workspace\spring-cloud-demo\demo-4\scd-eureka-server-cluster>mvn  package
    [INFO] Scanning for projects...
    [WARNING]
    [WARNING] Some problems were encountered while building the effective model for com.scd:scd-eureka-server-cluster:jar:0.0.1-SNAPSHOT
    [WARNING] 'parent.relativePath' of POM com.scd:scd-eureka-server-cluster:0.0.1-SNAPSHOT (C:\workspace\spring-cloud-demo\demo-4\scd-eureka-server-clust
    er\pom.xml) points at com.scd:demo-4 instead of org.springframework.cloud:spring-cloud-starter-parent, please verify your project structure @ line 5,
    column 10
    [WARNING]
    [WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
    [WARNING]
    [WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
    [WARNING]
    [INFO]
    [INFO] -----------------< com.scd:scd-eureka-server-cluster >------------------
    [INFO] Building scd-eureka-server-cluster 0.0.1-SNAPSHOT
    [INFO] --------------------------------[ jar ]---------------------------------
    [INFO]
    [INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ scd-eureka-server-cluster ---
    [INFO] Using 'UTF-8' encoding to copy filtered resources.
    [INFO] Copying 3 resources
    [INFO] Copying 0 resource
    [INFO]
    [INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ scd-eureka-server-cluster ---
    [INFO] Changes detected - recompiling the module!
    [INFO] Compiling 1 source file to C:\workspace\spring-cloud-demo\demo-4\scd-eureka-server-cluster\target\classes
    [INFO]
    [INFO] --- maven-resources-plugin:3.1.0:testResources (default-testResources) @ scd-eureka-server-cluster ---
    [INFO] Using 'UTF-8' encoding to copy filtered resources.
    [INFO] skip non existing resourceDirectory C:\workspace\spring-cloud-demo\demo-4\scd-eureka-server-cluster\src\test\resources
    [INFO]
    [INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ scd-eureka-server-cluster ---
    [INFO] Changes detected - recompiling the module!
    [INFO] Compiling 1 source file to C:\workspace\spring-cloud-demo\demo-4\scd-eureka-server-cluster\target\test-classes
    [INFO]
    [INFO] --- maven-surefire-plugin:2.22.1:test (default-test) @ scd-eureka-server-cluster ---
    [INFO]
    [INFO] -------------------------------------------------------
    [INFO]  T E S T S
    [INFO] -------------------------------------------------------
    [INFO] Running com.scd.AppTest
    [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.021 s - in com.scd.AppTest
    [INFO]
    [INFO] Results:
    [INFO]
    [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
    [INFO]
    [INFO]
    [INFO] --- maven-jar-plugin:3.1.1:jar (default-jar) @ scd-eureka-server-cluster ---
    [INFO] Building jar: C:\workspace\spring-cloud-demo\demo-4\scd-eureka-server-cluster\target\scd-eureka-server-cluster-0.0.1-SNAPSHOT.jar
    [INFO]
    [INFO] --- spring-boot-maven-plugin:2.1.2.RELEASE:repackage (repackage) @ scd-eureka-server-cluster ---
    [INFO] Replacing main artifact with repackaged archive
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 4.288 s
    [INFO] Finished at: 2019-04-02T11:02:27+08:00
    [INFO] ------------------------------------------------------------------------
    

    2,通过java命令【java -jar scd-eureka-server-cluster-0.0.1-SNAPSHOT.jar --spring.profiles.active=server1】启动实例1
    在这里插入图片描述
    启动后,会有报错信息输出,这是因为另一个实例2还没启动,可以暂时忽略这个报错信息
    访问 http://localhost:50000/ ,查看注册中心
    在这里插入图片描述
    可以看到有一个Replicas副本scd-eureka-server-cluster2,但是还处于不可用(unavailable-replicas)状态

    3,通过java命令【java -jar scd-eureka-server-cluster-0.0.1-SNAPSHOT.jar --spring.profiles.active=server2】启动实例2
    启动时无报错信息,启动后再访问 http://localhost:50000/ ,查看注册中心
    在这里插入图片描述
    可以看到Replicas副本scd-eureka-server-cluster2,已经处于可用(available-replicas)状态了

    访问实例2 http://localhost:50001/ ,查看注册中心
    在这里插入图片描述
    可以看到一个Replicas副本scd-eureka-server-cluster1,也处于可用(available-replicas)状态

    如果在实验的时候,Replicas副本处于unavailable-replicas状态了,可以查看下是不是一下原因导致的:

    • hostname指定为了localhost
    • prefer-ip-address指定为了true
    • 不同实例的hostname指定为了同一个值

    7,eureka 客户端
    注册中心集群后,其它服务只需要把多个注册中心url配置上即可:

    eureka:
      instance:
        prefer-ip-address: true
        status-page-url-path: /actuator/info
        health-check-url-path: /actuator/health
        hostname: localhost
      client:
        register-with-eureka: true #把本服务也注册到注册中心,从注册中心的服务列表中可以看到本服务
        fetch-registry: true #从注册中心拉取服务列表
        service-url:
          defaultZone: http://scd-eureka-server-cluster1:50000/eureka/,http://scd-eureka-server-cluster2:50001/eureka/
    
    • eureka.client.service-url.defaultZone中把多个注册中心url配置上即可,中间用,分割
    展开全文
  • 需要创建2个eureka server应用, 1.1 创建eureka-server-ha-peer1-demo 1.引入pom <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-...

    1.服务端

    需要创建2个eureka server应用,

    1.1 创建eureka-server-ha-peer1-demo

    1.引入pom

    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>

    2.主类上添加注解@EnableEurekaServer

    3. application.yml配置

    server:
      port: 9093
    ## 定义 应用名称
    spring:
      application:
        name: eureka-server-ha-peer1
    
    ## 公用 Eureka 配置
    ### 向注册中心注册
    eureka:
      client:
        register-with-eureka: true
        ### 向获取注册信息(服务、实例信息)
        fetch-registry: true
        serviceUrl:
          defaultZone: http://${eureka.instance.hostname}:9094/eureka
      instance:
        hostname: peer2
    
    
    #关闭管理端actuator的安全,即/env /health端口完全开放
    #management.security.enabled 在spring-boot2.0时过时,使用如下配置代替
    management:
      endpoints:
        web:
          exposure:
            include: "*"
    

    peer2表示另一台eureka server服务器的地址,如果是windows 系统,可通过修改C:\Windows\System32\drivers\etc下的hosts文件,将peer2指向本地:

    127.0.0.1	peer1
    127.0.0.1	peer2

    1.2 创建eureka-server-ha-peer2-demo

    此应用配置和peer1相同,只是将其defaultZone属性指向peer1的地址即可,再改下端口和应用名

    server:
      port: 9094
    ## 定义 应用名称
    spring:
      application:
        name: eureka-server-ha-peer2
    
    ## 公用 Eureka 配置
    ### 向注册中心注册
    eureka:
      client:
        register-with-eureka: true
        ### 向获取注册信息(服务、实例信息)
        fetch-registry: true
        serviceUrl:
          defaultZone: http://${eureka.instance.hostname}:9093/eureka
      instance:
        hostname: peer1
    
    
    #关闭管理端actuator的安全,即/env /health端口完全开放
    #management.security.enabled 在spring-boot2.0时过时,使用如下配置代替
    management:
      endpoints:
        web:
          exposure:
            include: "*"
    

    1.3 启动

    访问http://localhost:9093,需要等待一会儿,让两个注册中心相互发现注册,如果项目刚启动,就访问url,那么有可能只有其中一个注册中心有实例,另一个直接都没有。当访问出现以下情况,表示成功。

    2 客户端

    2.1 创建eureka-client-ha-demo

    1. 引入依赖

    <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>

    2. 主类上添加注解@EnableDiscoveryClient

    3. 配置application.yml

    server:
      port: 8083
    spring:
      application:
        name: eureka-client-ha
    
    eureka:
      client:
        serviceUrl:
          #配置多个eureka注册中心
          defaultZone: http://localhost:9094/eureka/,http://localhost:9093/eureka/
    #关闭管理端actuator的安全,即/env /health端口完全开放
    #management.security.enabled 在spring-boot2.0时过时,使用如下配置代替
    management:
      endpoints:
        web:
          exposure:
            include: "*"

    2.2 重新启动这3个应用并访问

    访问注册中心:http://localhost:9093/http://localhost:9094/,发现两个注册中心均注册了eureka-client-ha的服务,表示没有问题

     2.3 附加

    当eureka 注册服务器之间没有互相注册的情况下,即他们的defaultZone都只指向自己的情况下,
    如果 Eureka 客户端应⽤配置多个 Eureka 注册服务器,那么默认情况只有第⼀台可⽤的服务器,存
    在注册信息。如果 第⼀台可⽤的 Eureka 服务器 Down 掉了,那么 Eureka 客户端应⽤将会选择下
    ⼀台可⽤的 Eureka 服务器。
    当eureka 注册服务器之间互相注册了,即他们的defaultZone指向了其他的注册服务器,那么eureka 注册服务器之间会同步数据,即该客户端在每个注册中心都会存在

     

    展开全文
  • 主要介绍了Springcloud eureka搭建高可用集群过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 近来本地搭建eureka集群环境遇到诸多问题,为了巩固学的东西,在此记录下这些解决方案,话不多说,上代码。 1.首先是pom.xml文件,主要是spring-boot-starter-web ,spring-cloud-starter-netflix-eureka-server ...

    近来本地搭建eureka的集群环境遇到诸多问题,为了巩固学的东西,在此记录下这些解决方案,话不多说,上代码。

    1.首先是pom.xml文件,主要是 spring-boot-starter-web ,spring-cloud-starter-netflix-eureka-server

    <?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.7.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.gongdafang</groupId>
        <artifactId>serverdemo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>serverdemo</name>
        <description>Demo project for Spring Boot</description>
        <properties>
            <java.version>1.8</java.version>
            <spring-cloud.version>Greenwich.SR2</spring-cloud.version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            </dependency>
            <!--<dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-security</artifactId>
            </dependency>-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    </project>
    View Code

    2.我使用了yaml文件,因为它结构清晰易懂,配置内容字符量比properties文件少,主要还是因为可以一个文件多个环境配置

    #集群配置
    spring:
      profiles:
        active: peer3
    ---
    server:
      port: 8081
    
    spring:
      profiles: peer1
      application:
        name: z1-eureka
    eureka:
      client:
        serviceUrl:
          defaultZone: http://peer2:8082/eureka/,http://peer3:8081/eureka/
      instance:
        hostname: peer1
    
    ---
    server:
      port: 8082
    
    spring:
      profiles: peer2
      application:
        name: z2-eureka
    
    eureka:
      client:
        serviceUrl:
          defaultZone: http://peer1:8081/eureka/,http://peer3:8083/eureka/
      instance:
        hostname: peer2
    
    ---
    server:
      port: 8083
    
    spring:
      profiles: peer3
      application:
        name: z3-eureka
    
    eureka:
      client:
        serviceUrl:
          defaultZone: http://peer1:8081/eureka/,http://peer2:8082/eureka/
      instance:
        hostname: peer3
    View Code

    3.运行main 

     

     

     

    4.上面的三步骤已经将本地集群设置基本完成了,但是光写完代码,运行有问题那也是很头疼的一件事啦,嘿嘿,现在就总结下我遇到过的问题和解决方案吧

    1. WARN 2364 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_Z2-EUREKA/windows10.microdone.cn:z2-eureka:8082 - registration failed Cannot execute request on any known server

    com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server

     

    2. There was a problem with the instance info replicator

    com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server

      

    ① 因为本地设置了多个server端(如peer1,peer2),而instance.hostname是唯一标识 ,此时需要配一下本地的host文件。Windows的host在/etc/host,mac的在/private/etc

    我是用windows为例。cmd里敲notepad "%systemroot%/system32/drivers/etc/hosts" 回车

     

     

     ②在idea中多次启动同一个项目,启动设置修改

    ③对于idea运行时需要设定指定参数,如图,当运行不同节点时,需要指定对应节点   --spring.profiles.active=peer1

     

     

     

     

     

     

     5.以上是我用idea出现的问题,注意如果运行非最后一个server端时,服务会启动成功但是还是报错(如下出错),是因为他注册的某个服务还未启动导致,可以不用管,等所有服务都注册成功后,服务会自动注册成功的,贴上运行成功的页面吧

    ERROR 5796 --- [tbeatExecutor-0] c.n.d.s.t.d.RedirectingEurekaHttpClient : Request execution error. endpoint=DefaultEndpoint{ serviceUrl='http://peer2:8082/eureka/}
    
    com.sun.jersey.api.client.ClientHandlerException: org.apache.http.NoHttpResponseException: peer2:8082 failed to respond
    

     

     

    6.除了使用编程工具运行项目外,还可采用控制台命令的形式

    ① 切换目录到你的项目根目录然后运行 mvn install生产jar包

    也可以用 idea打包

     

    控制台切换到你的jar 包 位置 java -jar 你的jar包 .jar    针对集群环境命令  java -jar 你的jar包 .jar --spring.profiles.active=xxx

     ②第二种方法,可以直接 切换目录到你的项目根目录,然后运行 mvn spring-boot:run

     

    以上是我搭建环境时遇到的问题,百度搭建环境的相关步骤,没有一个完整的步骤,有丢丢费脑子,哈哈哈。不过还是有学习收获的。除了使用idea,使用eclipse的同学在运行时,是需要配置运行服务端设置的,可以借鉴文档https://www.cnblogs.com/syuf/p/9561798.html,写的还是挺具体的.

     

    版权声明:本文为博主原创文章,如需转发请注明来源

    转载于:https://www.cnblogs.com/gyf178/p/11484073.html

    展开全文
  • Eureka高可用集群配置 当注册中心扛不住并发的时候,就需要用集群来扛,在前面的基础上再新建两个简单的springboot模块(microservice-eureka-server-2002、microservice-eureka-server-2003) 1、统一三个...

    Eureka高可用集群配置

    当注册中心扛不住高并发的时候,就需要用集群来扛,在前面的基础上再新建两个简单的springboot模块(microservice-eureka-server-2002、microservice-eureka-server-2003)

    1、统一三个模块的pom依赖

    2、在2002跟2003的主启动类MicroserviceEurekaServer2002Application,MicroserviceEurekaServer2003Application加上@EnableEurekaServer注解

    3、前面没有配置集群的时候,Eureka注册中心实例的名称是localhost,但现在是集群,不能三个实例都是localhost,这里复杂的办法是搞三个虚拟机,但比较麻烦,这里有简单的办法,直接配置本机hosts文件来实现本机域名映射;找到电脑上的hosts文件,添加配置:

    127.0.0.1  eureka2001.test.com
    127.0.0.1  eureka2002.test.com
    127.0.0.1  eureka2003.test.com

    4、修改三个项目的application.yml文件,主要是修改hostname和defaultZone

    2001修改成:

    server:
      port: 2001
      context-path: /
    
    eureka:
      instance:
        hostname: eureka2001.test.com
      client:
        register-with-eureka: false
        service-url:
          defaultZone: http://eureka2002.test.com:2002/eureka/,http://eureka2003.test.com:2003/eureka/

    2002修改成:

    server:
      port: 2002
      context-path: /
      
    eureka:
      instance:
        hostname: eureka2002.test.com
      client:
        register-with-eureka: false
        service-url:
          defaultZone: http://eureka2001.test.com:2001/eureka/,http://eureka2003.test.com:2003/eureka/

    2003修改成:

    server:
      port: 2003
      context-path: /
      
    eureka:
      instance:
        hostname: eureka2003.test.com # 集群
      client:
        register-with-eureka: false
        service-url:
          defaultZone: http://eureka2001.test.com:2001/eureka/,http://eureka2002.test.com:2002/eureka/

    5、修改服务提供者项目的application.yml,主要修改eureka.client.service-url.defaultZone

    server:
      port: 1001
      context-path: /
    spring:
      datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost:3306/demosite1?useUnicode=true&characterEncoding=utf8
        username: root
        password: root
      jpa:
        hibernate:
          ddl-auto: update
        show-sql: true
    
    eureka:
      instance:
        #eureka客户端主机实例名称
        hostname: localhost
        #客户端服务名
        appname: microservice-student
        #客户端实例名称
        instance-id: microservice-student:1001
        #显示IP
        prefer-ip-address: true
      client:
        service-url:
          #把服务注册到eureka注册中心
          defaultZone: http://eureka2001.test.com:2001/eureka/,http://eureka2002.test.com:2002/eureka/,http://eureka2003.test.com:2003/eureka/
    info:
      groupId: com.ue.microservice
      artifactId: microservice-student-provider-1001
      version: 1.0-SNAPSHOT
      负责人: Tom
      联系电话: 123456

    最后测试下,启动三个注册中心以及服务提供者项目;然后在浏览器地址栏输入:

    http://eureka2001.test.com:2001、http://eureka2002.test.com:2002、http://eureka2003.test.com:2003

    Eureka集群骚操作

    上面的Eureka集群搭建,除了yml文件不一样,其他文件都一样,那么有什么办法能够将多个Eureka服务集合到一个工程中呢?那就是创建一个microservice-eureka-server(三合一)子工程,然后用一个启动类,跑三个不同yml配置的工程

    microservice-eureka-server子工程pom依赖:

    <?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>com.ue</groupId>
            <artifactId>microservice</artifactId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <artifactId>microservice-eureka-server</artifactId>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka-server</artifactId>
            </dependency>
            <!-- 修改后立即生效,热部署 -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>springloaded</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
            </dependency>
        </dependencies>
    </project>

    yml配置:

    ---
    server:
      port: 2001
      context-path: /
    eureka:
      instance:
        hostname: eureka2001.test.com
      client:
        register-with-eureka: false
        fetch-registry: false
        service-url:
          defaultZone: http://eureka2002.test.com:2002/eureka/,http://eureka2003.test.com:2003/eureka/
    spring:
      profiles: eureka2001
    ---
    server:
      port: 2002
      context-path: /
    eureka:
      instance:
        hostname: eureka2002.test.com
      client:
        register-with-eureka: false
        fetch-registry: false
        service-url:
          defaultZone: http://eureka2001.test.com:2001/eureka/,http://eureka2003.test.com:2003/eureka/
    spring:
      profiles: eureka2002
    ---
    server:
      port: 2003
      context-path: /
    eureka:
      instance:
        hostname: eureka2003.test.com
      client:
        register-with-eureka: false
        fetch-registry: false
        service-url:
          defaultZone: http://eureka2001.test.com:2001/eureka/,http://eureka2002.test.com:2002/eureka/
    spring:
      profiles: eureka2003

    启动类MicroserviceEurekaServerApplication.java记得要加上@EnableEurekaServer注解

    然后用这个项目的启动类配置多个Run Configuration:

    然后把配置的三个Run Configuration跑起来,效果跟普通操作的效果是一致的

    Eureka的自我保护机制

    在开发环境中,我们经常会遇到这个红色的警告;当我们长时间未访问服务以及变更服务实例名称的时候,就会出现这个红色的警告;因为默认情况,如果服务注册中心在一段时间内没有接收到某个微服务实例的心跳,那服务注册中心会注销该实例(默认90秒)

    由于正式环境,经常会有网络故障,网络延迟等问题发生,服务和注册中心无法正常通信,此时服务是正常的,不应该注销该服务,Eureka这时候就会通过“自我保护模式”来解决问题,当短时间和服务失去通信时,会保留服务信息,当恢复网络和通信时,再退出“自我保护模式”;通过“自我保护模式”,使Eureka集群更加的健壮和稳定

    综上,Eureka的自我保护特性主要用于减少在网络分区或者不稳定状况下的不一致性问题

    展开全文
  • 生产中我采用集群模式,也就是eureka高可用。 如何搭建高可用 仅仅只需eureka 注册中心互相注册互相获取信息即可 配置两个eureka 服务中心 端口分别是9001,9002 配置文件 端口为9001 的配置文件 #tomcat...
  • Eureka高可用集群 1.注册中心的重要性 在微服务中,注册中心非常核心,可以实现服务治理,如果一旦注册出现故障的时候,可能会导致整个微服务无法访问,在这时候就需要对注册中心实现高可用集群模式。 2. Eureka高...
  • 为啥用eureka集群 分布式和集群有啥区别? 搭建eureka集群 创建server端项目 pom文件配置 配置application.yml 还要注意:配置hosts文件 位置 C:\Windows\System32\drivers\etc 启动类上添加@...
  • 5.4Eureka高可用集群配置并发的情况下一个注册中心难以满足,因此一般需要集群配置多台。 我们再新建两个modulemicroservice-eureka-server-2002, microservice-eureka-server-2003,然后配置,最终的配置...
  • Eureka server高可用集群搭建的步骤: 导入依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId...
  • eureka集群高可用配置

    千次阅读 2019-05-09 23:07:48
    譬如eureka.client.register-with-eureka和fetch-registry是否要配置,配不配区别在哪里;eureka的客户端添加service-url时,是不是需要把所有的eureka的server地址都写上,还是只需要写一个server就可以了(因为...
  • 一直在网上查阅资料,配置高可用集群,看完了发现还是不明白,或者按照文章的内容一步一步去实现发现根本实现不了,真的很怀疑他们写的时候是否真的自己测试过了还是大家都是转发来转发去的,自己弄了好久,发现...
  • 承接上一章,这一章主要学习eureka高可用!为什么要搭建集群集群究竟该怎么搭建?相信读者们都有很多疑问了,接下来就一一的说一下吧 第一、Eureka高可用的作用 之所以进行eureka集群的搭建,在于我们平时的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,779
精华内容 7,911
关键字:

eureka高可用集群配置