• Eureka集群搭建


     

    Eureka

     

    高可用集群配置

    当注册中心扛不住高并发的时候,这时候 要用集群来扛;  

    我们再新建两个module  microservice-eureka-server-2002  microservice-eureka-server-2003  

    pom.xml

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- 修改后立即生效,热部署 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>springloaded</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
    </dependencies>
    

    EurekaServerApplication_2002,EurekaServerApplication_2003复制修改下

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

    3、前面单机的时候 eureka注册中心实例名称 是localhost,现在是集群,不能三个实例都是localhost,这里复杂的办法是搞三个虚拟机,麻烦,这里有简单办法,直接配置本机hosts,来实现本机域名映射;

    找到 C:WindowsSystem32driversetc  打开hosts,加配置 

    127.0.0.1  eureka2001.lingerqi.com
    127.0.0.1  eureka2002.lingerqi.com
    127.0.0.1  eureka2003.lingerqi.com
    

      

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

    2001修改:

    server:
      port: 2001
      context-path: /
    
    eureka:
      instance:
        # 单机 hostname: localhost #eureka注册中心实例名称
        hostname: eureka2001.lingerqi.com # 集群
      client:
        register-with-eureka: false     #false 由于该应用为注册中心,所以设置为false,代表不向注册中心注册自己。
        fetch-registry: false     #false 由于注册中心的职责就是维护服务实例,它并不需要去检索服务,所以也设置为false
        service-url:
          defaultZone: http://eureka2002.lingerqi.com:2002/eureka/,http://eureka2003.lingerqi.com:2003/eureka/ # 集群
    

      2002修改

    server:
      port: 2002
      context-path: /
    eureka:
      instance:
        # 单机 hostname: localhost #eureka注册中心实例名称
        hostname: eureka2002.lingerqi.com # 集群
      client:
        register-with-eureka: false     #false 由于该应用为注册中心,所以设置为false,代表不向注册中心注册自己。
        fetch-registry: false     #false 由于注册中心的职责就是维护服务实例,它并不需要去检索服务,所以也设置为false
        service-url:
          defaultZone: http://eureka2001.lingerqi.com:2001/eureka/,http://eureka2003.lingerqi.com:2003/eureka/ # 集群
    

      

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

    eureka:
      instance:
        #eureka客户端主机实例名称
        hostname: localhost
        #客户端服务名
        appname: microservice-student
        #客户端实例名称
        instance-id: microservice-student:1001
        #显示IP
        prefer-ip-address: true
      client:
        service-url:
          # 单机 defaultZone: http://localhost:2001/eureka   #把服务注册到eureka注册中心
          defaultZone: http://eureka2001.lingerqi.com:2001/eureka/,http://eureka2002.lingerqi.com:2002/eureka/,http://eureka2003.lingerqi.com:2003/eureka/
    

      

    最后我们测试下:

    启动三个注册中心,以及服务提供者项目;

     

    然后浏览器地址栏输入:

    http://eureka2001.lingerqi.com:2001/

    http://eureka2002.lingerqi.com:2002/

    http://eureka2003.lingerqi.com:2003/

     

     

    上面eureka服务搭建,除了yml文件不一样,其他文件都一样,那么我们有什么办法能够将多个eureka服务集合到一个工程中去呢?

    创建一个microservice-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.2.1.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.lingerqi</groupId>
        <artifactId>microservice-eureka-server</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>microservice-eureka-server</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.junit.vintage</groupId>
                        <artifactId>junit-vintage-engine</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-netflix-eureka-server</artifactId>
                <version>RELEASE</version>
                <scope>compile</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    

     

     重新配置applilcatoin.yml:

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

    启动类MicroserviceEurekaServerApplication

    @EnableEurekaServer
    @SpringBootApplication
    public class MicroserviceEurekaServerApplication {
    
        public static void main(String[] args) {
           
    

      

     Eureka自我保护机制

     

    开发环境,我们经常会遇到这个红色的警告;

    当我们长时间为访问服务以及变更服务实例名称的时候,就会出现这个红色警告;

     

    默认情况,如果服务注册中心再一段时间内没有接收到某个微服务实例的心跳,服务注册中心会注销该实例(默认90秒)。

     

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

    通过“自我保护模式”,使Eureka集群更加的健壮和稳定;

     

     

     

  • 相关阅读:
    广域网(ppp协议、HDLC协议)
    0120. Triangle (M)
    0589. N-ary Tree Preorder Traversal (E)
    0377. Combination Sum IV (M)
    1074. Number of Submatrices That Sum to Target (H)
    1209. Remove All Adjacent Duplicates in String II (M)
    0509. Fibonacci Number (E)
    0086. Partition List (M)
    0667. Beautiful Arrangement II (M)
    1302. Deepest Leaves Sum (M)
  • 原文地址:https://www.cnblogs.com/omji0030/p/11991648.html
Copyright © 2020-2023  润新知