gost icon indicating copy to clipboard operation
gost copied to clipboard

远程端口转发不支持负载均衡

Open clcc2019 opened this issue 1 year ago • 8 comments

服务器A部署代理 服务器B,C,D,E,F部署远程端口转发到A 访问A时流量始终在B机器上

clcc2019 avatar Dec 26 '23 01:12 clcc2019

具体配置?

ginuerzh avatar Dec 26 '23 15:12 ginuerzh

具体配置?

服务端A:

./gost -L relay://:7001?bind=true

客户端B,C,D,E

./gost -L rtcp://:30901/:9090 -F relay://A_IP:7001?nodelay=true

clcc2019 avatar Dec 27 '23 11:12 clcc2019

{"handler":"rtcp","kind":"service","level":"warning","listener":"rtcp","msg":"accept: bind on :8240/tcp failed, retrying in 1s","service":"service-0","time":"2023-12-27T12:04:59.387Z"}

看起来是只能一对一转发?

clcc2019 avatar Dec 27 '23 12:12 clcc2019

rtcp是一对一的端口映射,每个端口在服务端对应的会监听一个端口,如果在B,C,D,E上使用相同的命令,只会有一个成功。 如果需要负载均衡,有以下几种方案:

  1. 客户端负载均衡:只在一台机器上运行客户端(例如B),再转发到其他机器上
gost -L rtcp://:30901/B_IP:9090,C_IP:9090,D_IP:9090,E_IP:9090 -F relay://A_IP:7001?nodelay=true
  1. 服务端负载均衡:客户端的机器分别对应到服务端不同端口上,再在服务端运行一个反向代理服务来负载均衡到这些端口。
  2. 反向代理隧道。

ginuerzh avatar Dec 27 '23 12:12 ginuerzh

rtcp是一对一的端口映射,每个端口在服务端对应的会监听一个端口,如果在B,C,D,E上使用相同的命令,只会有一个成功。 如果需要负载均衡,有以下几种方案:

  1. 客户端负载均衡:只在一台机器上运行客户端(例如B),再转发到其他机器上
gost -L rtcp://:30901/B_IP:9090,C_IP:9090,D_IP:9090,E_IP:9090 -F relay://A_IP:7001?nodelay=true
  1. 服务端负载均衡:客户端的机器分别对应到服务端不同端口上,再在服务端运行一个反向代理服务来负载均衡到这些端口。
  2. 反向代理隧道。 云原生部署反向代理隧道,如何通过直接访问svc ip来达到访问客户端的目的呢?我的客户端都是一样的服务

clcc2019 avatar Dec 28 '23 11:12 clcc2019

rtcp是一对一的端口映射,每个端口在服务端对应的会监听一个端口,如果在B,C,D,E上使用相同的命令,只会有一个成功。 如果需要负载均衡,有以下几种方案:

  1. 客户端负载均衡:只在一台机器上运行客户端(例如B),再转发到其他机器上
gost -L rtcp://:30901/B_IP:9090,C_IP:9090,D_IP:9090,E_IP:9090 -F relay://A_IP:7001?nodelay=true
  1. 服务端负载均衡:客户端的机器分别对应到服务端不同端口上,再在服务端运行一个反向代理服务来负载均衡到这些端口。
  2. 反向代理隧道。

大佬,试了下高可用反向代理隧道发现请求延迟加倍了

curl -w "\
  time_namelookup:  %{time_namelookup}s\n\
  time_connect:  %{time_connect}s\n\
  time_appconnect:  %{time_appconnect}s\n\
  time_pretransfer:  %{time_pretransfer}s\n\
  time_redirect:  %{time_redirect}s\n\
  time_starttransfer:  %{time_starttransfer}s\n\
  ----------\n\
  time_total:  %{time_total}s\n" \
  -o /dev/null -s http://公网ip:9090/ping
  time_namelookup:  0.000026s
  time_connect:  0.183284s
  time_appconnect:  0.000000s
  time_pretransfer:  0.183344s
  time_redirect:  0.000000s
  time_starttransfer:  0.366931s
  ----------
  time_total:  0.366984s

curl -w "\
  time_namelookup:  %{time_namelookup}s\n\
  time_connect:  %{time_connect}s\n\
  time_appconnect:  %{time_appconnect}s\n\
  time_pretransfer:  %{time_pretransfer}s\n\
  time_redirect:  %{time_redirect}s\n\
  time_starttransfer:  %{time_starttransfer}s\n\
  ----------\n\
  time_total:  %{time_total}s\n" \
  -o /dev/null -s http://b7de88a94729b931.gost.local/ping
  time_namelookup:  0.000280s
  time_connect:  0.270444s
  time_appconnect:  0.000000s
  time_pretransfer:  0.270531s
  time_redirect:  0.000000s
  time_starttransfer:  1.248306s
  ----------
  time_total:  1.518586s

clcc2019 avatar Dec 28 '23 12:12 clcc2019

image 隧道一段时间就不可用了,重启gost-tunnel又会恢复

clcc2019 avatar Dec 29 '23 06:12 clcc2019

如果你是直接使用文档中的配置来部署,需要修改gost-plugins的配置参数redis.expiration,这里设置的隧道有效是1个小时。

ginuerzh avatar Dec 29 '23 07:12 ginuerzh