1. 程式人生 > >springcloud系列12——Eureka的高可用

springcloud系列12——Eureka的高可用

Eureka Server的高可用是通過各個Eureka Server作為服務向其他Eureka Server註冊,來實現服務列表的同步,達到高可用的效果。

預設情況下,每個Eureka伺服器也是Eureka客戶端,並且需要(至少一個)服務URL來定位對等端。


我們對以前的Eureka Server工程做修改,在application.yml配置如下:

---
server:
  port: 8761
spring:
  profiles: peer1
eureka:
  instance:
    hostname: peer1
  client:
    serviceUrl:
      defaultZone: http://peer2:8762/eureka/,http://peer3:8763/eureka/
---
server: port: 8762 spring: profiles: peer2 eureka: instance: hostname: peer2 client: serviceUrl: defaultZone: http://peer1:8761/eureka/,http://peer3:8763/eureka/ --- server: port: 8763 spring: profiles: peer3 eureka: instance: hostname: peer3 client: serviceUrl: defaultZone: http://peer1:8761/eureka/,http://peer2:8762/eureka/

這裡是本地測試,所以3個Eureka Server的配置都寫在一個配置檔案。
修改hosts檔案:127.0.0.1 peer1 peer2 peer3,peer1,peer2,peer3都對映到127.0.0.1。
在啟動時指定profile,idea的配置如下:

依次啟動peer1,peer2,peer3。
觀察peer1,peer2的日誌都有報錯。peer1報錯是因為peer2和peer3服務沒有啟動,導致沒法將自己註冊到peer2和peer3。peer2報錯是因為peer3沒有啟動,peer3啟動正常,無錯誤。
檢視peer1

檢視peer2

檢視peer3


可以看到:
* 1.每個Eureka Server都是其他Eureka Server的一個服務;
* 2.每個Eureka Server都是相互同步的。

其他服務提供者的application.yml修改:

eureka:
  client:
    serviceUrl:
      defaultZone: http://peer1:8761/eureka,http://peer1:8762/eureka,http://peer1:8763/eureka

建議把每個Eureka Server地址都寫上。只寫其中一個啟動也是沒問題的。但是,如果只寫peer1的地址,那麼該服務掛掉,且peer1也掛掉,將導致服務不能註冊。