spring-boot - 带有 3 个 springboot 应用程序的 Ha Proxy
问题描述
我有 3 个 Spring Boot 应用程序,每个应用程序都在不同的端口上运行。有人可以指导我如何设置 Ha Proxy 来演示 3 个应用程序之间的负载平衡(可以创建多个实例)。Spring Boot 中是否有任何集成 Ha Proxy 的功能?我必须在 Ha Proxy 的配置文件中更改哪些内容?
解决方案
实际上,有几种方法可以实现这一点。但是,我认为 Spring Boot 中没有任何东西可以与 HAProxy 集成,因为它们两个是不同的进程,并且它们两个独立工作并且没有任何关联,因为您可能知道 Spring Boot 的作用。HAProxy 是一个负载均衡器,也是分布在多个服务器上的 TCP 和 HTTP 进程的代理服务器。
这解释了你问题的第一部分。
现在实际上,您如何实现这一点完全取决于您要如何设置它。
像您一样将单个应用程序作为服务运行,并根据 url 将流量路由到每个应用程序。
另一种方法是在单个 tomcat 上部署单个应用程序并借助应用程序属性中的上下文路径,您可以将流量从外部世界路由到 tomcat,而 tomcat 会处理所有事情。
可能还有其他方法可以做到这一点,将来有人可以添加到这个答案中。但无论哪种方式,您都需要使用代理服务器来执行此操作,它可以是 HAProxy、Nginx 或任何适合目的的东西。
因此,采用您的方法,假设您在端口 8081、8082、8083 上运行应用程序。您的 HAProxy 设置应如下所示。
frontend www_http
mode http
bind *:80
bind *:443 ssl crt /etc/ssl/certs/mycompany.pem
# passing on that browser is using https
reqadd X-Forwarded-Proto:\ https
# for Clickjacking
rspadd X-Frame-Options:\ SAMEORIGIN
# prevent browser from using non-secure
rspadd Strict-Transport-Security:\ max-age=15768000
redirect scheme https code 301 if !{ ssl_fc }
stats enable
stats refresh 30s
stats show-node
stats realm Haproxy\ Statistics
stats uri /haproxy?stats
acl app1 hdr(host) -i app1.mycompany.com
acl app2 hdr(host) -i app2.mycompany.com
acl app3 hdr(host) -i app3.mycompany.com
# Just incase if you are using path instead of subdomain. But it's commented.
# acl app1 url_beg /app1
# acl app2 url_beg /app2
# acl app3 url_beg /app3
use_backend app_1_backend if app1
use_backend app_2_backend if app2
use_backend app_3_backend if app3
# backend for app 1
backend app_1_backend
timeout client 300000
timeout server 300000
redirect scheme https if !{ ssl_fc }
server app-1 127.0.0.1:8081 check
http-response set-header X-TS-Server-ID %s
# backend for app 2
backend app_2_backend
timeout client 300000
timeout server 300000
redirect scheme https if !{ ssl_fc }
server app-2 127.0.0.1:8082 check
http-response set-header X-TS-Server-ID %s
# backend for app 3
backend app_3_backend
timeout client 300000
timeout server 300000
redirect scheme https if !{ ssl_fc }
server app-3 127.0.0.1:8083 check
http-response set-header X-TS-Server-ID %s
这是一些基本设置,但您可以添加选项并根据需要更改所有内容。
希望这可以帮助。
推荐阅读
- javascript - javascript中require()函数的问题
- java - 具有多个线程的 Kafka Producer - Java
- kubernetes - 同一命名空间中的两个 Kubernetes 部署无法通信
- aws-sam - API 网关通过 SAM 直接连接到 SNS
- neo4j - EXISTS 带有动态标签的密码查询
- javascript - 我如何粗略地匹配 Javascript 中的两个字符串?
- java - 如何从 JobService 中调用 fusedLocationClient.getLastLocation()?
- python - 比较数据框中特定列行的长度,python
- jquery - onchange 事件未在 flatpickr() 输入上唤醒
- javascript - 将文本包装在一个
标签,当每个字母在 react.js 中都是单独的(用于动画目的)时