SERVER:1
server: port: 1111 eureka: instance: hostname: ${spring.cloud.client.ip-address} instance-id: ${eureka.instance.hostname}:${server.port} preferIpAddress: true #指定通過IP注冊,一般服務集群時配置,需要ip-address參數一起設置(保證hostName和ip-address一樣),以免eureka管理頁面出現不可用分片提示信息(unavailable-replicas),服務的注冊默認是通過hostName注冊的,當判斷注冊的hostName和服務 ip-address: ${EUREKA_IP:${eureka.instance.hostname}} #強制指定eureka的ip地址 client: service-url: defaultZone: http://${eureka.instance.hostname}:1112/eureka/ fetch-registry: true #集群時需要強制手動指定,fetch-registry、register-with-eureka都需要設置為true register-with-eureka: true #集群時需要強制手動指定,fetch-registry、register-with-eureka都需要設置為true
SERVER:2
server: port: 1112 eureka: instance: hostname: ${spring.cloud.client.ip-address} instance-id: ${eureka.instance.hostname}:${server.port} #eureka server管理頁面顯示的服務狀態 preferIpAddress: true #指定通過IP注冊,服務集群高可用必須配置,需要ip-address參數一起設置,以免eureka管理頁面出現不可用分片提示信息(unavailable-replicas) ip-address: ${EUREKA_IP:${eureka.instance.hostname}} #強制指定eureka的ip地址 client: service-url: defaultZone: http://${eureka.instance.hostname}:1111/eureka/ fetch-registry: true #集群時需要強制手動指定,fetch-registry、register-with-eureka都需要設置為true register-with-eureka: true #集群時需要強制手動指定,fetch-registry、register-with-eureka都需要設置為true
需要注意的是
Eureka高可用部署,啟動多個注冊中心后,節點均出現在unavailable-replicas,查閱各類資料測試,提供方案:
1.eureka.client.serviceUrl.defaultZone配置項的地址,不能使用localhost,要使用ip或域名
2.spring.application.name要一致(這個個人測試默認不配也可以)
3. fetch-registry、register-with-eureka 都需要設置為true,要不然集群服務器數據不同步,目前Spring Cloud 版本為 Finchley.RELEASE
默認情況下,eureka client使用主機名(hostName)向注冊中心注冊。
當prefer-ip-address: true時 ,client使用的是ip向服務中心注冊 ,但是默認獲取的ip是 127.0.0.1。默認情況下 當 這個獲取的ip 和 hostName 不同時 ,則產生不可用分片提示信息(unavailable-replicas),並且集群間的數據不會同步。
所以要么指定 兩個ip相同 ,就不會有提示了(指定ip-address和hostname相同)。