当前位置:   article > 正文

《springcloud学习》六 eureka2.0 高可用集群环境搭建

eureka2.0

1.疑问

        1.1为什么需要搭建eureka2.0 HA集群环境?

            因为在微服务架构中,注册中心是核心,所有的服务都需要通过注册中心来进行交互,如果是单机版环境,注册中心一挂,会导致整个微服务环境不可用。

        1.2  eureka2.0 HA环境怎么样才算HA?

             一般来说,搭建环境最好是奇数台,所以,至少是3台(个人建议,当然2台也可以)。

        1.3  eureka HA使用的是什么原理?

              使用的是相互注册原理。从而实现数据的相互注册。

2.eureka HA集群环境搭建

        springcloud_eureka          服务注册    8100

        springcloud_eureka_ha    服务注册    9100

        eureka  HA集群环境建议3台

      父模块pom.xml

         

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <parent>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-parent</artifactId>
  9. <version>2.0.4.RELEASE</version>
  10. <relativePath/> <!-- lookup parent from repository -->
  11. </parent>
  12. <groupId>com.fqyd</groupId>
  13. <artifactId>springcloud</artifactId>
  14. <version>1.0-SNAPSHOT</version>
  15. <properties>
  16. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  17. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  18. <java.version>1.8</java.version>
  19. <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
  20. </properties>
  21. <modules>
  22. <module>springcloud_eureka</module>
  23. <module>springcloud_eureka_ha</module>
  24. <module>springcloud_product</module>
  25. <module>springcloud_product_member</module>
  26. <module>springcloud_consumer</module>
  27. </modules>
  28. <dependencies>
  29. <dependency>
  30. <groupId>org.springframework.boot</groupId>
  31. <artifactId>spring-boot-starter-web</artifactId>
  32. </dependency>
  33. <dependency>
  34. <groupId>org.springframework.boot</groupId>
  35. <artifactId>spring-boot-starter-test</artifactId>
  36. <scope>test</scope>
  37. </dependency>
  38. </dependencies>
  39. <!-- Spring Cloud 管理依赖 -->
  40. <dependencyManagement>
  41. <dependencies>
  42. <dependency>
  43. <groupId>org.springframework.cloud</groupId>
  44. <artifactId>spring-cloud-dependencies</artifactId>
  45. <version>${spring-cloud.version}</version>
  46. <type>pom</type>
  47. <scope>import</scope>
  48. </dependency>
  49. </dependencies>
  50. </dependencyManagement>
  51. <build>
  52. <plugins>
  53. <plugin>
  54. <groupId>org.springframework.boot</groupId>
  55. <artifactId>spring-boot-maven-plugin</artifactId>
  56. </plugin>
  57. </plugins>
  58. </build>
  59. </project>

      2.1 springcloud_eureka

               2.1.1  pom.xml

                              

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>com.fqyd</groupId>
  7. <artifactId>springcloud</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. <relativePath>../pom.xml</relativePath>
  10. </parent>
  11. <groupId>com.fqyd</groupId>
  12. <artifactId>springcloud_eureka</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>springcloud_eureka</name>
  15. <description>Demo project for Spring Boot</description>
  16. <properties>
  17. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  18. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  19. <java.version>1.8</java.version>
  20. </properties>
  21. <dependencies>
  22. <dependency>
  23. <groupId>org.springframework.cloud</groupId>
  24. <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  25. </dependency>
  26. </dependencies>
  27. </project>

              2.1.2  application.yml     

  1. ####服务器端口号
  2. server:
  3. port: 8100
  4. ##定义服务名称
  5. spring:
  6. application:
  7. name: fqyd-eureka
  8. eureka:
  9. instance:
  10. ####服务注册ip
  11. hostname: 127.0.0.1
  12. client:
  13. ###因为本身是注册中心,是否需要将自己注册给自己的注册中心(集群的时候需要设置成true)
  14. registerWithEureka: true
  15. ###因为本身是注册中心,不需要去检索服务
  16. fetchRegistry: true
  17. ###注册地址
  18. serviceUrl:
  19. defaultZone: http://${eureka.instance.hostname}:9100/eureka/

注意:1.registerWithEureka和fetchRegistry需要设置成true

           2.defaultZone: http://${eureka.instance.hostname}:9100/eureka/    9100是另一个注册中心的端口,主要是使用相互注册的原理。

           3.spring.application. name: fqyd-eureka   服务的应用名要保持一致,不然会有冲突的问题。

                    2.1.3  启动类

  1. package com.fqyd;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
  5. @SpringBootApplication
  6. @EnableEurekaServer //表示开启eureka服务
  7. public class SpringcloudEurekaApplication {
  8. public static void main(String[] args) {
  9. SpringApplication.run(SpringcloudEurekaApplication.class, args);
  10. }
  11. }

              2.2  springcloud_eureka_ha

                    2.2.1  pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>com.fqyd</groupId>
  7. <artifactId>springcloud</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. <relativePath>../pom.xml</relativePath>
  10. </parent>
  11. <groupId>com.fqyd</groupId>
  12. <artifactId>springcloud_eureka_ha</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>springcloud_eureka_ha</name>
  15. <description>Demo project for Spring Boot</description>
  16. <properties>
  17. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  18. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  19. <java.version>1.8</java.version>
  20. </properties>
  21. <dependencies>
  22. <dependency>
  23. <groupId>org.springframework.cloud</groupId>
  24. <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  25. </dependency>
  26. </dependencies>
  27. </project>

           2.2.2 application.yml

  1. ####服务器端口号
  2. server:
  3. port: 9100
  4. ##定义服务名称
  5. spring:
  6. application:
  7. name: fqyd-eureka
  8. eureka:
  9. instance:
  10. ####服务注册ip
  11. hostname: 127.0.0.1
  12. client:
  13. ###因为本身是注册中心,是否需要将自己注册给自己的注册中心(集群的时候需要设置成true)
  14. registerWithEureka: true
  15. ###因为本身是注册中心,不需要去检索服务
  16. fetchRegistry: true
  17. ###注册地址
  18. serviceUrl:
  19. defaultZone: http://${eureka.instance.hostname}:8100/eureka/

注意: defaultZone: http://${eureka.instance.hostname}:8100/eureka/    这里是8100,相互注册

                     2.2.3  启动类                             

  1. package com.fqyd.springcloud_eureka_ha;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
  5. @SpringBootApplication
  6. @EnableEurekaServer //表示开启eureka服务
  7. public class SpringcloudEurekaHaApplication {
  8. public static void main(String[] args) {
  9. SpringApplication.run(SpringcloudEurekaHaApplication.class, args);
  10. }
  11. }

3 效果

先启动8100,再启动9100,8100服务启动过程中会报如下错误,报错正常,因为8100是注册在9100上,而9100还没有启动,所以才报这个错。还有一个问题需要注意,通过http://localhost:8100/访问,启动后,立即查看, 发现只有一个服务,而9100有两个服务,需要耐心等待一小会,才能看到两个服务,这也是因为8100启动时,报错的问题,需要一段时间才能同步。

  1. com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
  2. at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:112) ~[eureka-client-1.9.2.jar:1.9.2]
  3. at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) ~[eureka-client-1.9.2.jar:1.9.2]
  4. at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59) ~[eureka-client-1.9.2.jar:1.9.2]
  5. at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) ~[eureka-client-1.9.2.jar:1.9.2]
  6. at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) ~[eureka-client-1.9.2.jar:1.9.2]
  7. at com.netflix.discovery.DiscoveryClient.register(DiscoveryClient.java:829) ~[eureka-client-1.9.2.jar:1.9.2]
  8. at com.netflix.discovery.InstanceInfoReplicator.run(InstanceInfoReplicator.java:121) ~[eureka-client-1.9.2.jar:1.9.2]
  9. at com.netflix.discovery.InstanceInfoReplicator$1.run(InstanceInfoReplicator.java:101) [eureka-client-1.9.2.jar:1.9.2]
  10. at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_101]
  11. at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_101]
  12. at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_101]
  13. at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.8.0_101]
  14. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_101]
  15. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_101]
  16. at java.lang.Thread.run(Thread.java:745) [na:1.8.0_101]

如果你热衷技术,喜欢交流,欢迎加入我们! 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/794176
推荐阅读
相关标签
  

闽ICP备14008679号