前言
之前一篇文章文章《服務註冊與發現---eureka》介紹了單點EurekaServer。但是實際環境中,這種單點的的模式可能會有很多隱形的問題。比如EurekaServer發生當機,或者某些意外情況發生,很可能影響其他服務之間的呼叫,嚴重影響到整個系統的可用性,所以,一般會部署一個高可用的EurekaServer叢集。
本文簡單介紹EurekaServer高可用簡單搭建。
配置本地環境
由於本地環境是單臺電腦來配置高可用,所以需要修改一下電腦的host檔案,本文簡單說一下mac修改host檔案,其他系統電腦可以自行百度一下,都很簡單。
1.進入/private/etc資料夾內
2.開啟host檔案
3.檔案內加入以下兩行
127.0.0.1 server1
127.0.0.1 server2
複製程式碼
本機完整host檔案如下:
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
127.0.0.1 server1
127.0.0.1 server2
複製程式碼
新建專案
配置好了host檔案之後,新建一個專案,與之前新建eurekaserver完全一致,不過配置檔案進行了一下簡單的修改(只有配置檔案進行了修改),先看一下單機模式下的配置:
server.port=8761
eureka.instance.hostname=localhost
eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
##禁止自己向自己註冊
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
複製程式碼
從配置上可以看到,上面最後兩行配置是讓註冊中心不註冊自己,而其實eurekaserver就是將自己也當成服務,向其他註冊中心註冊自己。
新建專案springcloud_eureka_server1(8761),除了配置其餘沒有任何不同,這裡就不一一展示了,配置檔案程式碼如下:
server.port=8761
eureka.instance.hostname=server1
eureka.client.service-url.defaultZone=http://server2:8762/eureka/
spring.application.name=server1
複製程式碼
新建專案springcloud_eureka_server2(8762),配置檔案程式碼如下:
server.port=8762
eureka.instance.hostname=server2
eureka.client.service-url.defaultZone=http://server1:8761/eureka/
spring.application.name=server2
複製程式碼
以上程式碼不難理解,springcloud_eureka_server1(8761)將自己註冊到server2的eureka上,springcloud_eureka_server2(8762)註冊到server1的eureka上。
這時檢視一下eureka管理頁面,如下圖:
觀察頁面可以看到server1含有了server2的節點,server2有了server1的節點。
應用註冊到高可用EurekaServer上
修改之前專案springcloud_eureka_client(8761)配置檔案如下:
##埠號
server.port=8763
spring.application.name=eureka_client
eureka.client.service-url.defaultZone=http://server1:8761/eureka/,http://server2:8762/eureka/
複製程式碼
檢視一下eureka管理頁面,如下:
此時就算斷開server1,因為springcloud_eureka_client(8763)也像server2註冊了,因此其他server2上的服務依然可以訪問springcloud_eureka_client(8763),從而實現了EurekaServer的高可用。
其他測試
我們在做一下修改,springcloud_eureka_client(8763)專案配置檔案中只配置一個eurekaserver,程式碼如下:
##埠號
server.port=8763
spring.application.name=eureka_client
eureka.client.service-url.defaultZone=http://server1:8761/eureka/
複製程式碼
eureka管理頁面也是同樣的展示了和配置兩個服務一樣的效果,因為多個eureka之間的資料會同步,但是建議在客戶端像第一種方式那樣配置。
原始碼下載 :大老楊碼雲
個人網站:www.dalaoyang.cn