搭建高可用的Eureka注冊中心
一、搭建高可用的Eureka的作用
當服務器因種種原因導致Eureka注冊中心(后面簡稱Eureka)服務當機(服務器跪了,異常關閉停止服務)。這樣就會影響到整個業務的流程,因為你把所有的業務都注冊到了Eureka中,當Eureka所依賴的docker(容器)當機了,這就會影響到所有在Eureka中注冊的服務全部error。因為Eureka的請求流程在上一篇中說過,當A服務向B服務發送一個請求的時候,他是不會直接請求B服務,首先A服務先會到Eureka,Eureka拿到A服務請求的api,Eureka會通過這個api會去找在Eureka中注冊的所有服務(這個過程叫做服務發現),找到服務之后,Eureka會返回給A一個服務列表(因為B服務可能會做負載均衡,就是會向Eureka注冊兩個B服務,這個過程叫做服務消費),當A服務拿到Eureka返回來的服務列表,根據自身的一些機制比如feign,ribbon等(這個后面都會講到)進行處理。
二、第一個Eureka搭建
- 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 6 <groupId>cn.ds</groupId> 7 <artifactId>eureka-server-001</artifactId> 8 <version>0.0.1-SNAPSHOT</version> 9 <packaging>jar</packaging> 10 11 <name>eureka-server-001</name> 12 <description>Eureka服務-001</description> 13 14 <parent> 15 <groupId>org.springframework.boot</groupId> 16 <artifactId>spring-boot-starter-parent</artifactId> 17 <version>2.0.3.RELEASE</version> 18 <relativePath/> <!-- lookup parent from repository --> 19 </parent> 20 21 <properties> 22 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 23 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 24 <java.version>1.8</java.version> 25 <spring-cloud.version>Finchley.RELEASE</spring-cloud.version> 26 </properties> 27 28 <dependencies> 29 <dependency> 30 <groupId>org.springframework.boot</groupId> 31 <artifactId>spring-boot-starter-web</artifactId> 32 </dependency> 33 <!-- 引入Eureka服務 --> 34 <dependency> 35 <groupId>org.springframework.cloud</groupId> 36 <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> 37 </dependency> 38 <dependency> 39 <groupId>org.springframework.boot</groupId> 40 <artifactId>spring-boot-devtools</artifactId> 41 <scope>runtime</scope> 42 </dependency> 43 <dependency> 44 <groupId>org.springframework.boot</groupId> 45 <artifactId>spring-boot-starter-test</artifactId> 46 <scope>test</scope> 47 </dependency> 48 </dependencies> 49 50 <dependencyManagement> 51 <dependencies> 52 <dependency> 53 <groupId>org.springframework.cloud</groupId> 54 <artifactId>spring-cloud-dependencies</artifactId> 55 <version>${spring-cloud.version}</version> 56 <type>pom</type> 57 <scope>import</scope> 58 </dependency> 59 </dependencies> 60 </dependencyManagement> 61 62 <build> 63 <plugins> 64 <plugin> 65 <groupId>org.springframework.boot</groupId> 66 <artifactId>spring-boot-maven-plugin</artifactId> 67 </plugin> 68 </plugins> 69 </build> 70 71 72 </project>
- application.properties配置:這里需要注意的是,IP地址不能寫localhost或者127.0.0.1,后面會說到這個IP地址該怎么配置
1 # Eureka注冊中心配置 2 # server-port:項目端口號 3 # spring-application-name:項目注冊到Eureka顯示的調用名稱,類似於域名 4 # eureka.client.register-with-erueka:是否將自己注冊到Eureka,默認為true 5 # eureka.client.fetch-registry:是否向Eureka獲取注冊信息,默認為true 6 # spring.jmx.default-domain:區分spring-boot項目 7 # eureka.instance.hostname:作為eureka-server-001服務配置中心 8 # eureka.client.service-url.defaultZone:雙節點注冊 9 server.port = 8080 10 spring.application.name = eureka-server 11 eureka.client.register-with-eureka = true 12 eureka.client.fetch-registry = true 13 spring.jmx.default-domain = erueka-server-001 14 eureka.instance.hostname = eureka-server-001 15 eureka.client.service-url.defaultZone = http://eureka-server-001:8080/eureka/,http://eureka-server-002:8081/eureka/
- springboot啟動類配置
1 package cn.yuzhenzi; 2 3 import org.springframework.boot.SpringApplication; 4 import org.springframework.boot.autoconfigure.SpringBootApplication; 5 import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 7 /** 8 * @author 玉眞子 9 * @name springboot啟動類 10 * */ 11 @SpringBootApplication 12 @EnableEurekaServer //啟動注冊中心 13 public class Application { 14 15 public static void main(String[] args) { 16 SpringApplication.run(Application.class, args); 17 } 18 }
三、第二個Eureka搭建
- 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 6 <groupId>cn.ds</groupId> 7 <artifactId>eureka-server-002</artifactId> 8 <version>0.0.1-SNAPSHOT</version> 9 <packaging>jar</packaging> 10 11 <name>eureka-server-002</name> 12 <description>Eureka服務-002</description> 13 14 <parent> 15 <groupId>org.springframework.boot</groupId> 16 <artifactId>spring-boot-starter-parent</artifactId> 17 <version>2.0.3.RELEASE</version> 18 <relativePath/> <!-- lookup parent from repository --> 19 </parent> 20 21 <properties> 22 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 23 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 24 <java.version>1.8</java.version> 25 <spring-cloud.version>Finchley.RELEASE</spring-cloud.version> 26 </properties> 27 28 <dependencies> 29 <dependency> 30 <groupId>org.springframework.boot</groupId> 31 <artifactId>spring-boot-starter-web</artifactId> 32 </dependency> 33 <!-- 引入Eureka服務 --> 34 <dependency> 35 <groupId>org.springframework.cloud</groupId> 36 <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> 37 </dependency> 38 <dependency> 39 <groupId>org.springframework.boot</groupId> 40 <artifactId>spring-boot-devtools</artifactId> 41 <scope>runtime</scope> 42 </dependency> 43 <dependency> 44 <groupId>org.springframework.boot</groupId> 45 <artifactId>spring-boot-starter-test</artifactId> 46 <scope>test</scope> 47 </dependency> 48 </dependencies> 49 50 <dependencyManagement> 51 <dependencies> 52 <dependency> 53 <groupId>org.springframework.cloud</groupId> 54 <artifactId>spring-cloud-dependencies</artifactId> 55 <version>${spring-cloud.version}</version> 56 <type>pom</type> 57 <scope>import</scope> 58 </dependency> 59 </dependencies> 60 </dependencyManagement> 61 62 <build> 63 <plugins> 64 <plugin> 65 <groupId>org.springframework.boot</groupId> 66 <artifactId>spring-boot-maven-plugin</artifactId> 67 </plugin> 68 </plugins> 69 </build> 70 71 72 </project>
- application.properties文件的配置:這里需要注意的是,IP地址不能寫localhost或者127.0.0.1,后面會說到這個IP地址該怎么配置
1 # Eureka注冊中心配置 2 # server-port:項目端口號 3 # spring-application-name:項目注冊到Eureka顯示的調用名稱,類似於域名 4 # eureka.client.register-with-erueka:是否將自己注冊到Eureka,默認為true 5 # eureka.client.fetch-registry:是否向Eureka獲取注冊信息,默認為true 6 # spring.jmx.default-domain:區分spring-boot項目 7 # eureka.instance.hostname:作為eureka-server-001服務配置中心 8 # eureka.client.service-url.defaultZone:雙節點注冊 9 server.port = 8081 10 spring.application.name = eureka-server 11 eureka.client.register-with-eureka = true 12 eureka.client.fetch-registry = true 13 spring.jmx.default-domain = eureka-server-002 14 eureka.instance.hostname = eureka-server-002 15 eureka.client.service-url.defaultZone = http://eureka-server-002:8081/eureka/,http://eureka-server-001:8080/eureka/
- springboot啟動類的配置
1 package cn.yuzhenzi; 2 3 import org.springframework.boot.SpringApplication; 4 import org.springframework.boot.autoconfigure.SpringBootApplication; 5 import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 7 /** 8 * @author 玉眞子 9 * @name springboot啟動類 10 * */ 11 @SpringBootApplication 12 @EnableEurekaServer //啟動注冊中心 13 public class Application { 14 15 public static void main(String[] args) { 16 SpringApplication.run(Application.class, args); 17 } 18 }
四、IP配置以及注意事項
- IP配置
- windows配置:/windows/system32/drivers/etc/hosts
- Linux配置:/etc/hosts
- 如圖所示:
1 # Copyright (c) 1993-2009 Microsoft Corp. 2 # 3 # This is a sample HOSTS file used by Microsoft TCP/IP for Windows. 4 # 5 # This file contains the mappings of IP addresses to host names. Each 6 # entry should be kept on an individual line. The IP address should 7 # be placed in the first column followed by the corresponding host name. 8 # The IP address and the host name should be separated by at least one 9 # space. 10 # 11 # Additionally, comments (such as these) may be inserted on individual 12 # lines or following the machine name denoted by a '#' symbol. 13 # 14 # For example: 15 # 16 # 102.54.94.97 rhino.acme.com # source server 17 # 38.25.63.10 x.acme.com # x client host 18 19 # localhost name resolution is handled within DNS itself. 20 # 127.0.0.1 localhost 21 # ::1 localhost 22 127.0.0.1 eureka-server-001 23 127.0.0.1 eureka-server-002
- windows配置:/windows/system32/drivers/etc/hosts
- 注意事項:當項目啟動時會報錯,這是正常現象,因為eureka-server-001要注冊到eureka-server-002上面,但是eureka-server-002項目還沒有啟動起來,所以會報錯
五、測試分別訪問http://localhost:8080/eureka/和http://localhost:8081/eureka/