前文構建的都是單節點的Config Server,本節來討論如何構建高可用的Config Server集羣,包括Config Server的高可用依賴Git倉庫的高可用以及RabbitMQ的高可用。
先來討論Git倉庫的高可用。
Git倉庫的高可用
由於配置內容存儲在Git倉庫中,所以要想實現Config Server的高可用,必須有一個高可用的Git倉庫。有兩種方式可以實現Git倉庫的高可用。
- 使用第三方Git倉庫:這種方式非常簡單,可使用例如GitHub、BitBucket、Gitee、Coding等提供的倉庫託管服務,這些服務本身就已實現了高可用。
- 自建Git倉庫管理系統:使用第三方服務的方式雖然省去了很多煩惱,但是很多場景下,傾向於自建Git倉庫管理系統。此時就需要保證自建Git的高可用。
以 GitLab 爲例,讀者可參照官方文檔搭建高可用的 GitLab:
- 高可用 GitLab 複雜度分析: <https://about.gitlab.com/high-availability/>
- 高可用GitLab搭建文檔: <https://docs.gitlab.com/ce/administration/high_availability/README.html>
RabbitMQ的高可用
Spring Cloud Config使用Spring Cloud Bus實現配置批量刷新。而由於Spring Cloud Bus依賴RabbitMQ(當然也可使用其他MQ,例如Kafka或者RocketMQ),所以RabbitMQ的高可用也是必不可少的。
搭建高可用RabbitMQ的資料,讀者可詳見:<https://www.rabbitmq.com/ha.html>。由於比較簡單,筆者不做贅述。當然,也可使用雲平臺的提供的RabbitMQ服務。
Config Server自身的高可用
本節來討論如何實現Config Server自身的高可用。筆者分兩種場景進行討論。
Config Server未註冊到Eureka Server上
對於這種情況,Config Server的高可用可藉助一個負載均衡器來實現,如圖9-6所示。
如圖9-6,各個微服務將請求發送到負載均衡器,負載均衡器將請求轉發到其代理的其中一個Config Server節點。這樣,就可以實現Config Server的高可用。
Config Server註冊到Eureka Server上
這種情況下,Config Server的高可用相對簡單,只須將多個Config Server節點註冊到Eureka Server上,即可實現Config Server的高可用。架構如圖9-7所示。
本文首發
<http://www.itmuch.com/spring-cloud/finchley-23/>