目 錄
1. 高可用EureKa注冊中心示意圖
2. Eureka實例相互注冊配置
3. 微服務注冊到Eureka配置
4. 啟動步驟及配置成功檢查
5. 說明事項
1. 高可用EureKa注冊中心示意圖
Spring Cloud的Eureka Server的高可用實際上就是將自己作為服務向其他服注冊中心注冊自己,形成一組互相注冊的服務注冊中心,以實現服務清單的互相同步,達到高可用的效果。
如下圖,Eureka server 1, Eureka server 2相互感應,當有服務注冊時,多個Eureka-server是對等的,它們都存有相同的信息,這就是通過服務器的冗余來增加可靠性,當有一台服務器宕機了,服務並不會終止,因為另一台服務存有相同的數據。
2. Eureka實例相互注冊配置
Eureka通過運行多個實例,使其更具有高可用性,這是它默認的屬性,需要做的就是給對等的實例一個合法的關聯serviceUrl,分別配置Eureka多個實例的application.yml 使其相互注冊。
比如有兩個eureka服務,分別部署在兩台服務器上。
第1個Eureka 配置文件application.yml如下:
第2個Eureka 配置文件application.yml如下:
項目中Eureka配置非常簡單,分別部署在兩台機器上,只須按如下配置每個Eureka並修改defaultZone中的server1-IP 和 server2-IP ,根據實際情況改為服務器具體的IP即可。
配置完上述步驟,兩個Eureka服務相互注冊,即可啟用Eureka的HA屬性。
3. 微服務注冊到Eureka配置
比如,tpp-acc注冊到Eureka
配置文件中,eureka.client.serviceUrl.defaultZone 增加以上多個Eureka對應的URL:
4. 啟動步驟及配置成功檢查
先啟動Eureka1Application,Eureka2Application,然后啟動其他的微服務
每個注冊中心的available-replicas都出現另外的注冊中心的服務,則說明搭建成功。
例如:
我本機分別啟動了三個Eureka實例,由於我本地是單機環境,分別通過機器IP、127.0.0.1和localhost作為三個Eureka的hostname,如下:
每個注冊中心的available-replicas都出現其他兩個注冊中心的服務,說明搭建成功。
如下圖,其中http://localhost:8763/ 可以看到其他8761 8762兩個服務。
另外,啟動example-service:8080進行注冊,在每個注冊中心都能看到相同的服務已注冊。
當關掉其中一台Eureka服務時,則出現在unavailable-replicas中,如下圖。
5. 說明事項
Eureka互相注冊要求各個Eureka實例的eureka.instance.hostname不同,如果相同,則會被Eureka標記為unavailable-replicas。
把eureka.instance.hostname取了${spring.cloud.client.ipAddress}的值,這個值取的是當前啟動Eureka的機器的IP,這樣雖然配置一樣但卻自動區分了每台機器的Eureka,這時我們再取prefer-ip-address: true,就可以確保機器優先使用IP而不是到hosts解析域名。