前端時間只簡單介紹了下springcloud的高可用方案(springcloud高可用方案),今天詳細介紹下如何實施springcloud的高可用部署。html
(1)Gateway訪問地址:前端
http://10.192.168.11:9000/client/
複製代碼
(2)Client地址:spring
http://10.192.168.14:9001,http://10.192.168.14:9002/,http://10.192.168.15:9003/,http://10.192.168.15:9004/
複製代碼
(3)Eureka地址:bash
http://10.192.168.12:8761/,http://10.192.168.13:8761/
複製代碼
(1)從springcloud架構中,能夠了解到,註冊中心和網關會成爲單點故障率比較高的點,有可能會成爲瓶頸。服務器
(2)高可用方案大概思路是:部署多個註冊中心和多個應用,實現單點故障後自動切換,無須人工干預。(網關高可用最後有說明)架構
需修改配置文件:application.yml。app
(1)註冊中心1(10.192.168.12)fetch
spring:
application:
name: registry
server:
port: 8761
eureka:
client:
register-with-eureka: false
service-url:
defaultZone: http://10.192.168.13:8761/eureka
複製代碼
(2)註冊中心2(10.192.168.13)url
spring:
application:
name: registry
server:
port: 8761
eureka:
client:
register-with-eureka: false
service-url:
defaultZone: http://10.192.168.12:8761/eureka
複製代碼
重點是defaultZone這個配置,註冊中心1要做爲客戶端配置註冊中心2的服務地址,註冊中心2要做爲客戶端配置註冊中心1的服務地址,這樣就實現了互爲註冊,而且還有最重要的一點,註冊的客戶端也會在註冊中心之間相互同步。spa
需修改配置文件:application.yml
eureka:
client:
service-url:
defaultZone: http://10.66.211.12:8761/eureka/,http://10.66.211.13:8761/eureka/
healthcheck:
enabled: true
instance:
lease-expiration-duration-in-seconds: 30
lease-renewal-interval-in-seconds: 10
registry-fetch-interval-seconds: 5
server:
port: 9001
spring:
application:
name: client
複製代碼
說明:
重點仍是defaultZone這項配置,這裏要寫成兩個註冊中心的地址,以逗號分開,這樣一臺出現單點故障的話,另外一臺還能正常訪問,而且故障註冊中心恢復後,會自動從另外一臺註冊中心同步註冊客戶端信息。
(1)將註冊服務客戶端在多臺服務器部署,同一臺服務器的話,以端口號區分下,只部署一臺的話,能夠使用默認端口號。
(2)本項目是使用了在10.192.168.14和10.192.168.15服務器上都部署了兩個應用實例。
其中項目配置文件application.yml如上,重點說明:
spring:
application:
name: client
複製代碼
其中:client是註冊的名稱,部署的實例都要是這個,路由會根據名稱來查找應用,例如本項目部署了4個應用實例,默認實行輪詢訪問的方式。
訪問地址(路由地址):
http://10.192.168.11:9000/client/
複製代碼
請求會在四個應用實例(9001-9004)之間進行輪詢訪問,這樣就實現了註冊中心與應用客戶端的高可用。
關於網關的高可用,咱們沒有實際部署,不過能夠參看greenplum的高可用方案(Greenplum高可用真的高嗎?),結合keepalived來實現網關的高可用,參考架構圖:
I'm 「軟件老王」,若是以爲還能夠的話,關注下唄!後續更新秒知!若有補充,歡迎留言或同名公衆號交流,多謝!