接上節繼續,注冊中心單點肯定是不牢靠的,可以參考下面的方案做成注冊中心集群:
弄成3個節點,每個節點向其它節點注冊,這樣只要集群中有一個節點正常工作即可。為了方便在本機弄出這種效果,我們先修改下host文件
127.0.0.1 localhost server1 server2 server3
相當于給本機ip綁了3個hostname。然后在項目中,創建3個profile,參考下圖:
application.yml:
spring: application: name: eureka-server-cluster profiles: active: server1
application-server1.yml:
server: port: 8100 eureka: instance: hostname: server1 instance-id: ${spring.application.name}:${server.port} client: service-url: defaultZone: http://server2:8200/eureka,http://server3:8300/eureka
application-server2.yml:
server: port: 8200 eureka: instance: hostname: server2 instance-id: ${spring.application.name}:${server.port} client: service-url: defaultZone: http://server1:8100/eureka,http://server3:8300/eureka
application-server3.yml:
server: port: 8300 eureka: instance: hostname: server3 instance-id: ${spring.application.name}:${server.port} client: service-url: defaultZone: http://server1:8100/eureka,http://server2:8200/eureka
其它不用改,idea中啟用時,指定3個不同的profile,參考下圖:
啟用3個實例,分別應對server1,server2,server3 這三個profile后,看下UI
可以看到,每個eureka server都向其它節點注冊了。
其它服務向eureka server集群注冊時,參考下面的配置:
server: port: 8001 spring: application: name: "service-provider-demo" eureka: instance: prefer-ip-address: true client: service-url: defaultZone: http://localhost:8100/eureka/,http://localhost:8200/eureka/,http://localhost:8300/eureka/
再來看另一個問題:
注冊中心的管理界面以及服務注冊時,沒有任何認證機制,安全性比較差,如果其它服務惡意注冊一個同名服務,但是實現不同,可能就有風險了,可以參考下面的配置改進:
先添加:compile 'org.springframework.boot:spring-boot-starter-security' 依賴,然后在eureka server的application.yml中增加
security: basic: enabled: true user: name: yjmyzz #用戶名 password: 123456 #密碼
這樣就添加了1個用戶名及密碼(注:其原理就是spring-security,熟悉spring-security的朋友,也可以改成把用戶名/密碼存儲在數據庫中)
啟動后,再瀏覽eureka server就用輸入用戶名,密碼了。
然后其它服務注冊時,相應的defautZone也要改成類似:
defaultZone: http://yjmyzz:123456@server1:8100/eureka,http://yjmyzz:123456@server2:8200/eureka 這種格式。
文章列表