第七篇: 高可用的服務註冊中心
第一篇: 服務的註冊與發現(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
此時的架構圖: