1. 场景描述
前端时间只简单介绍了下 springcloud 的高可用方案(springcloud 高可用方案), 今天详细介绍下如何实施 springcloud 的高可用部署.
2. 解决方案
2.1 架构方案
2.1.1 架构图
2.1.2 访问地址
(1)Gateway 访问地址:
http://10.192.168.11:9000/client/
(2)Client 地址:
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 地址:
http://10.192.168.12:8761/,http://10.192.168.13:8761/
2.1.3 方案说明
(1)从 springcloud 架构中, 可以了解到, 注册中心和网关会成为单点故障率比较高的点, 有可能会成为瓶颈.
(2)高可用方案大概思路是: 部署多个注册中心和多个应用, 实现单点故障后自动切换, 无须人工干预.(网关高可用最后有说明)
2.2 注册中心部署
需修改配置文件: application.YAML.
2.2.1 注册中心配置
(1)注册中心 1(10.192.168.12)
- 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)
- spring:
- application:
- name: registry
- server:
- port: 8761
- eureka:
- client:
- register-with-eureka: false
- service-url:
- defaultZone: http://10.192.168.12:8761/eureka
2.2.2 说明
重点是 defaultZone 这个配置, 注册中心 1 要作为客户端配置注册中心 2 的服务地址, 注册中心 2 要作为客户端配置注册中心 1 的服务地址, 这样就实现了互为注册, 并且还有最重要的一点, 注册的客户端也会在注册中心之间相互同步.
2.3 应用部署
2.3.1 应用配置文件
需修改配置文件: application.YAML
- 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 这项配置, 这里要写成两个注册中心的地址, 以逗号分开, 这样一台出现单点故障的话, 另一台还能正常访问, 并且故障注册中心恢复后, 会自动从另一台注册中心同步注册客户端信息.
2.3.2 应用部署
(1)将注册服务客户端在多台服务器部署, 同一台服务器的话, 以端口号区分下, 只部署一台的话, 可以使用默认端口号.
(2)本项目是使用了在 10.192.168.14 和 10.192.168.15 服务器上都部署了两个应用实例.
其中项目配置文件 application.YAML 如上, 重点说明:
- spring:
- application:
- name: client
其中: client 是注册的名称, 部署的实例都要是这个, 路由会根据名称来查找应用, 例如本项目部署了 4 个应用实例, 默认实行轮询访问的方式.
2.4 高可用访问
访问地址(路由地址):
http://10.192.168.11:9000/client/
请求会在四个应用实例 (9001-9004) 之间进行轮询访问, 这样就实现了注册中心与应用客户端的高可用.
2.5 关于网关高可用
关于网关的高可用, 我们没有实际部署, 不过可以参看 greenplum 的高可用方案(Greenplum 高可用真的高吗?), 结合 keepalived 来实现网关的高可用, 参考架构图:
I'm 软件老王, 如果觉得还可以的话, 关注下呗! 如有不准确或疑问的地方, 可通过讨论区, QQ 沟通, 多谢!
来源: https://www.cnblogs.com/ruanjianlaowang/p/11211052.html