天天看點

玩轉SpringCloud專題(五)-SpringCloud注冊中心Eureka高可用搭建(HA)

1.Eureka基礎架構

Eureka架構中的三個核心角色:

玩轉SpringCloud專題(五)-SpringCloud注冊中心Eureka高可用搭建(HA)
  • 服務注冊中心

    Eureka的服務端應用,提供服務注冊和發現功能,就是剛剛我們建立的eureka-server-7001

  • 服務提供者

    提供服務的應用,可以是SpringBoot應用,也可以是其它任意技術實作,隻要對外提供的是Rest風格服務即可。本例中就是我們實作的springcloud-demo

  • 服務消費者

    消費應用從注冊中心擷取服務清單,進而得知每個服務方的資訊,知道去哪裡調用服務方。本例中就是我們實作的springcloud-demo-consumer

2.高可用的Eureka Server

Eureka Server即服務的注冊中心,在剛才的案例中,我們隻有一個EurekaServer,事實EurekaServer也可以是一個叢集,形成高可用的Eureka中心。

Eureka Server除了單點運作之外,還可以通過運作多個執行個體,并進行互相注冊的方式來實作高可用的部署。是以我們隻需要将Eureke Server配置其他可用的 serviceUrl 就能實作高可用部署。

玩轉SpringCloud專題(五)-SpringCloud注冊中心Eureka高可用搭建(HA)
服務同步

多個Eureka Server之間也會互相注冊為服務,當服務提供者注冊到Eureka Server叢集中的某個節點時,該節點會把服務的資訊同步給叢集中的每個節點,進而實作資料同步。是以,無論用戶端通路到Eureka Server叢集中的任意一個節點,都可以擷取到完整的服務清單資訊。

動手搭建高可用的EurekaServer

我們假設要搭建兩條EurekaServer的叢集,端口分别為:7001、7002、7003

1)我們修改原來的EurekaServer配置-7001:

server:
  port: 7001 # 端口
spring:
  application:
    name: eureka-server-7001 # 應用名稱,會在Eureka中顯示

eureka:
  instance:
    hostname: eureka7001.com
  client:
    register-with-eureka: false # 是否注冊自己的資訊到EurekaServer,預設是true
    fetch-registry: false #false表示自己端就是注冊中心,我的職責就是維護服務執行個體,并不需要去檢索服務
    service-url: # EurekaServer的位址,現在是自己的位址,如果是叢集,需要加上其它Server的位址。
      defaultZone: http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka      

所謂的高可用注冊中心,其實就是把EurekaServer自己也作為一個服務進行注冊,這樣多個EurekaServer之間就能互相發現對方,進而形成叢集。是以我們做了以下修改:

把service-url的值改成了另外一台EurekaServer的位址,而不是自己

2)我們修改原來的EurekaServer配置-7002:

server:
  port: 7002 # 端口
spring:
  application:
    name: eureka-server-7002 # 應用名稱,會在Eureka中顯示
eureka:
  instance:
    hostname: eureka7002.com
  client:
    register-with-eureka: false # 是否注冊自己的資訊到EurekaServer,預設是true
    fetch-registry: false #false表示自己端就是注冊中心,我的職責就是維護服務執行個體,并不需要去檢索服務
    service-url: # EurekaServer的位址,現在是自己的位址,如果是叢集,需要加上其它Server的位址。
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7003.com:7003/eureka      

3)我們修改原來的EurekaServer配置-7003:

server:
  port: 7003 # 端口
spring:
  application:
    name: eureka-server-7003 # 應用名稱,會在Eureka中顯示
eureka:
  instance:
    hostname: eureka7003.com
  client:
    register-with-eureka: false # 是否注冊自己的資訊到EurekaServer,預設是true
    fetch-registry: false #false表示自己端就是注冊中心,我的職責就是維護服務執行個體,并不需要去檢索服務
    service-url: # EurekaServer的位址,現在是自己的位址,如果是叢集,需要加上其它Server的位址。
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka      

4)在自己的hosts中加入端口映射

127.0.0.1       eureka7001.com
127.0.0.1       eureka7002.com
127.0.0.1       eureka7003.com      
c:\windows\system32\drivers\etc\hosts
# EurekaServer位址
eureka.client.service-url.defaultZone= http:// eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka