负载均衡与健康检查

负载均衡

可以将多个相同类型的代理加入到同一个 group 中,从而实现负载均衡的能力。

目前支持的代理类型:tcp, http, tcpmux

  1. # frpc.ini
  2. [test1]
  3. type = tcp
  4. local_port = 8080
  5. remote_port = 80
  6. group = web
  7. group_key = 123
  8. [test2]
  9. type = tcp
  10. local_port = 8081
  11. remote_port = 80
  12. group = web
  13. group_key = 123

用户连接 frps 服务器的 80 端口,frps 会将接收到的用户连接随机分发给其中一个存活的 proxy。这样可以在一台 frpc 机器挂掉后仍然有其他节点能够提供服务。

tcp 类型代理要求 group_key 相同,做权限验证,且 remote_port 相同。

http 类型代理要求 group_key, custom_domainssubdomainlocations 相同。

健康检查

通过给代理配置健康检查的参数,可以在要反向代理的服务出现故障时,将这个服务从 frps 中摘除,搭配负载均衡的功能,可以用来实现高可用的架构,避免服务单点故障。

在每一个 proxy 的配置下加上 health_check_type = {type} 来启用健康检查功能。

type 目前可选 tcphttp

tcp 只要能够建立连接则认为服务正常,http 会发送一个 http 请求,服务需要返回 2xx 的状态码才会被认为正常

tcp 示例配置如下:

  1. # frpc.ini
  2. [test1]
  3. type = tcp
  4. local_port = 22
  5. remote_port = 6000
  6. # 启用健康检查,类型为 tcp
  7. health_check_type = tcp
  8. # 建立连接超时时间为 3 秒
  9. health_check_timeout_s = 3
  10. # 连续 3 次检查失败,此 proxy 会被摘除
  11. health_check_max_failed = 3
  12. # 每隔 10 秒进行一次健康检查
  13. health_check_interval_s = 10

http 示例配置如下:

  1. # frpc.ini
  2. [web]
  3. type = http
  4. local_ip = 127.0.0.1
  5. local_port = 80
  6. custom_domains = test.yourdomain.com
  7. # 启用健康检查,类型为 http
  8. health_check_type = http
  9. # 健康检查发送 http 请求的 url,后端服务需要返回 2xx 的 http 状态码
  10. health_check_url = /status
  11. health_check_interval_s = 10
  12. health_check_max_failed = 3
  13. health_check_timeout_s = 3

最后修改 March 19, 2021: update docs (f1b297a)