1. 程式人生 > >第七篇: 高可用的服務註冊中心

第七篇: 高可用的服務註冊中心

第一篇: 服務的註冊與發現(Eureka) 介紹了服務註冊與發現,其中服務註冊中心Eureka Server,是一個例項,當成千上萬個服務向它註冊的時候,它的負載是非常高的,這在生產環境上是不太合適的,這篇文章主要介紹怎麼將Eureka Server叢集化(高可用),效果類似上一篇文章中的配置中心高可用相似。

一、準備工作

運用第一篇建立的註冊中心 leopard-eureka ,進行配置修改

在leopard-eureka工程中resources資料夾下(為了簡化,原先application.yml暫不使用),建立配置檔案 application-peer1.yml 和 application-peer2.yml,兩個檔案內容一樣:


spring:
  application:
    name: leopard-eureka
  profiles: peer1
  
server:
  port: 8761
eureka:
  instance:
    hostname: eureka-peer1
    preferIpAddress: true
    instance-id: ${spring.cloud.client.ipAddress}:${server.port}:${spring.application.name}
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://eureka-peer2:8762/eureka/
      
---

spring:
  application:
    name: leopard-eureka
  profiles: peer2
  
server:
  port: 8762
eureka:
  instance:
    hostname: eureka-peer2
    preferIpAddress: true
    instance-id: ${spring.cloud.client.ipAddress}:${server.port}:${spring.application.name}
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://eureka-peer1:8761/eureka/

之前章節介紹過引數,這裡再重新介紹以下引數:


1、fetch-registry:表示是否從eureka server獲取註冊資訊,如果是單一節點,不需要同步其他eureka server節點,則可以設定為false,但此處為叢集,應該設定為true,預設為true,可不設定。

2、register-with-eureka:表示是否將自己註冊到eureka server,因為要構建叢集環境,需要將自己註冊到及群眾,所以應該開啟。預設為true,可不顯式設定。

3、eureka.instance.instance-id必須寫在application.properties或application.yml中。不能寫在bootstrap.properties和bootstrap.yml中。可以去了解下springboot載入預設配置檔案的順序,bootstrap是在application之前的。寫在bootstrap裡的話,自定義的instance-id並不會在eureka介面生效

4、eureka.instance.prefer-ip-address 配置為 true 就可以將IP註冊到Eureka Server上,而如果不配置就是機器的主機名

這時 leopard-eureka 就已經改造完畢。

按照官方文件的指示,需要改變 etc/hosts,linux系統通過

vim /etc/hosts

win系統通過

C:\Windows\System32\drivers\etc\hosts

加上:

127.0.0.1 eureka-peer1
127.0.0.1 eureka-peer2

 

二、啟動工程

leopard-eureka 可通過配置指定檔案配置進行啟動,這裡暫時不說,直接將工程打成 jar 演示啟動。

這裡使用 maven 打成 jar,需在 leopard-eureka 的 pom.xml 加入如下配置,主要用於 maven 打包

	<build>
	    <plugins>
	        <plugin>
	            <groupId>org.springframework.boot</groupId>
	            <artifactId>spring-boot-maven-plugin</artifactId>
	            <configuration>
	                <mainClass>com.leopard.eureka.EurekaServiceApplication</mainClass> <!--主類 包含main-->
	                <layout>JAR</layout> 
	            </configuration>
	        </plugin>
	    </plugins>
	</build>

執行 命令打包到 target 目錄下

mvn clean package

啟動 jar ,win7 就開啟兩個終端,各自啟動指定不同的配置檔案

java -jar leopard-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1

java -jar leopard-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2

初步啟動時,會報一些錯誤,可忽略,待服務端都啟動完成後,恢復正常。 

正常啟動後,訪問連結:http://localhost:8761/

到這裡叢集就完成了。

leopard-eureka peer1 8761,leopard-eureka peer2 8762相互感應,當有服務註冊時,兩個Eureka-eserver是對等的,它們都存有相同的資訊,這就是通過伺服器的冗餘來增加可靠性,當有一臺伺服器宕機了,服務並不會終止,因為另一臺服務存有相同的資料。

以前其他服務註冊到服務中心時,只需增加連結服務節點即可:

eureka:
  client:
    serviceUrl:
      defaultZone: http://eureka-peer1:8761/eureka/,http://eureka-peer2:8762/eureka/

啟動之前章節的測試服務 leopard-config 和 leopard-service , 效果如下:

服務 eureka-peer1

服務 eureka-peer2

此時的架構圖:

 

文章轉載: https://blog.csdn.net/forezp/article/details/81041028