Docker Swarm執行Spring Cloud應用(二):Eureka高可用
阿新 • • 發佈:2019-01-30
基礎服務獨立部署
把所有服務一次性部署好非常方便,但是在生產環境中使用的時候需要考慮這樣一些因素:
- 在生產環境中的基礎服務,如Eureka由於更新不頻繁,應該和頻繁更新應用服務分開部署
- 作為基礎服務的Eureka需要考慮高可用
我們可以把部署描述檔案分成兩部分,eureka.yml 用來部署作為基礎服務的Eureka Server,是包含三各節點的叢集。
eureka.yml
version: '3' services: eureka1: image: binblee/demo-eurekaserver networks: springcloud-overlay: aliases: - eureka ports: - "8761:8761" environment: - ADDITIONAL_EUREKA_SERVER_LIST=http://eureka2:8761/eureka/,http://eureka3:8761/eureka/ ... eureka2: image: binblee/demo-eurekaserver networks: springcloud-overlay: aliases: - eureka ports: - "8762:8761" environment: - ADDITIONAL_EUREKA_SERVER_LIST=http://eureka1:8761/eureka/,http://eureka3:8761/eureka/ ... eureka3: image: binblee/demo-eurekaserver networks: springcloud-overlay: aliases: - eureka ports: - "8763:8761" environment: - ADDITIONAL_EUREKA_SERVER_LIST=http://eureka1:8761/eureka/,http://eureka3:8761/eureka/ ... networks: springcloud-overlay: external: name: springcloud-overlay
Eureka部署到的網路springcloud-overlay
需要手動建立,命令如下:
docker network create -d overlay springcloud-overlay
從部署模版中可以看出這三個Eureka例項在網路上的別名(alias)都是eureka
,對於客戶端可以在配置檔案中指定這個別名即可,不必指定三個示例的名字。
application.yml
eureka.client.serviceUrl.defaultZone=http://${EUREKA_SERVER_ADDRESS}:8761/eureka/
Eureka Server的地址通過${EUREKA_SERVER_ADDRESS}
services:
web:
image: binblee/demo-web
...
environment:
- EUREKA_SERVER_ADDRESS=eureka
另外要注意的是所有依賴於Eureka的應用服務都要掛到springcloud-overlay
網路上,否則無法和Eureka Server通訊。下面是比較完整的部署描述檔案的示例:
version: '3' services: web: image: binblee/demo-web networks: - springcloud-overlay environment: - EUREKA_SERVER_ADDRESS=eureka ports: - "8080" ... bookservice: image: binblee/demo-bookservice networks: - springcloud-overlay environment: - EUREKA_SERVER_ADDRESS=eureka ... networks: springcloud-overlay: external: name: springcloud-overlay
部署這幾個服務需要3個步驟,首先建立overlay網路,然後部署Eureka,最後再部署應用服務。命令如下:
docker network create -d overlay springcloud-overlay
cd compose/
docker stack deploy -c eureka.yml
docker stack deploy -c demoweb.yml
訪問Swarm叢集中的任意節點的8761埠,可以看到Eureka例項1有兩個副本,eureka2和eureka3,2個應用服務已經註冊上去了。訪問8762和8763,可以看到另外兩個Eureka的管理介面,內容類似。
小結
本文章為大家介紹如何在Docker swarm-mode叢集部署一個Eureka叢集,並配置應用服務訪問Eureka。通過這樣的方式可以很方便地做到基礎服務和應用分開部署,並且可以保證了基礎服務的高可用。本文的示例程式碼在github上。