负载均衡

注意

wmproxy 目前仍处于 RC (Release Candidate) 阶段。您可以尝试用它来实现您的需求,但是现在目前来说不是非常的稳定,并未进行过超级充分的测试,暂时尽量不要用于生产环境。

为什么需要负载均衡

负载均衡是一种技术,用于将多个请求分发到多个服务器或计算机节点,以便平衡负载并提高系统性能和可靠性。以下是一些为什么需要负载均衡的原因:

  1. 扩展性:通过负载均衡,可以水平扩展系统的处理能力,即通过增加服务器数量来提高系统的吞吐量。
  2. 高可用性:负载均衡可以确保系统的可靠性,因为如果某个服务器出现故障,请求可以自动转发到其他可用的服务器。
  3. 性能优化:通过负载均衡,可以将请求均匀地分配给服务器,避免某个服务器过载,从而优化系统性能。
  4. 容错:如果某个服务器出现故障,负载均衡可以将其从服务器组中移除,从而避免故障扩散。
  5. 可管理性:通过负载均衡,可以集中管理多个服务器,以便进行统一的配置、监控和日志管理。
  6. 安全性:通过负载均衡,可以在多个服务器之间实施安全策略,例如防火墙规则、SSL加密等,以提高系统的安全性。
  7. 成本效益:负载均衡可以在多个服务器之间分配请求,从而减少单台服务器的成本和能源消耗。

总之,负载均衡可以提高系统的性能、可靠性和安全性,并且可以降低成本和提高管理效率。因此,在现代的分布式系统和云计算环境中,负载均衡是一项非常重要的技术。

wmproxy reverse-proxy

启动负载均衡服务 通过命令wmproxy reverse-proxy --help可以得到

Usage: wmproxy.exe reverse-proxy [-f=ARG] -t=ARG [-H=ARG]... [--access-log=ARG] [--tls] [--control=ARG
] [--disable-stdout] [--disable-control] [-v] [--default-level=ARG]

Available options:
    -f, --from=ARG           负载均衡来源地址
                             [default: 127.0.0.1:80]
    -t, --to=ARG             负载均衡映射地址
    -H, --header=ARG         头部信息修改如 "proxy x-forward-for {client_ip}"
        --access-log=ARG     访问日志放的位置如"logs/access.log trace"
        --tls                是否映射到https上
        --control=ARG        输入控制台的监听地址
                             [default: 127.0.0.1:8837]
        --disable-stdout     禁用默认输出
        --disable-control    禁用控制微端
    -v, --verbose            是否显示更多日志
        --default-level=ARG  设置默认等级
    -h, --help               Prints help information

需要配置从源目标到目标的信息,可以配置header等相应的信息。

wmproxy reverse-proxy -f :80 -t :8080
或者
wmproxy reverse-proxy -t :8080

即可启动负载均衡服务对其服务。即将本地80端口转发到8080的流量。

配置文件准备

服务端的配置文件reverse.toml,以下是一份比较完整的各种项目的配置,可以进行参考。


# 反向代理相关,七层协议为http及https
[http]
aa = "b"

max_read_buf = 1024000
access_log = "access main trace"
error_log = "error trace"

[http.log_format]
main = "{d(%Y-%m-%d %H:%M:%S)} {client_ip} {l} {url} path:{path} query:{query} host:{host} status: {status} {up_status} referer: {referer} user_agent: {user_agent} cookie: {cookie}"

[http.log_names]
access = "logs/access.log trace"
error = "logs/error.log"
default = "logs/default.log"

[http.limit_req_zone]
limit = "{client_ip} limit=10m rate=1000r/s"

# 反向代理中的负载均衡地址列表,按名字匹配
[[http.upstream]]
name = "server"
server = [
  { addr = "127.0.0.1:8080", fail_timeout = 30 },
  # {addr="127.0.0.1:8081"}
]

[[http.upstream]]
name = "ws"
server = [
  { addr = "127.0.0.1:8081", fail_timeout = 30 },
  # {addr="127.0.0.1:8081"}
]

# 反向代理中的具体服务,可配置多个多组
[[http.server]]
bind_addr = "0.0.0.0:82"
up_name = "soft.wm-proxy.com"
proxy_connect_timeout = "10s"
proxy_read_timeout = "10s"
proxy_write_timeout = "10s"
root = ""

# 请求头返回头相应的处理,如有proxy则为请求头处理,+表示添加,-表示删除,其它表示设置
headers = [
  "proxy x-forward-for {client_ip}",
  "+ last-modified 'from proxy'",
]
limit_req = "zone=limit brust=1"

# 按请求路径进行rule匹配,可匹配method,看具体的处理的内容如文件服务或者负载均衡
[[http.server.location]]
rate_limit = "4m/s"
rule = "/root"
file_server = { browse = true }
proxy_pass = ""

[[http.server.location]]
rule = "@ws"
is_ws = true
proxy_url = "http://ws"
headers = ["+ aaa bbb"]


[[http.server.location]]
rule = "/static"
static_response = "I'm Ok {client_ip}"

# IP的四层协议处理
[stream]

# 四层协议的负载均衡
[[stream.upstream]]
name = "server"
server = [
  { addr = "127.0.0.1:8080", fail_timeout = 30 },
  #  {addr="127.0.0.1:8081"}
]

[[stream.upstream]]
name = "ws"
server = [
  { addr = "127.0.0.1:8081", fail_timeout = 30 },
  #  {addr="127.0.0.1:8081"}
]

# 负载均衡,bind为udp则表示udp连接
[[stream.upstream]]
name = "udp"
bind = "udp"
server = [{ addr = "127.0.0.1:8089" }]

# 四层服务器,up_name映射upstream的name
[[stream.server]]
bind_addr = "0.0.0.0:83"
up_name = "server"

[[stream.server]]
bind_addr = "0.0.0.0:85"
proxy_url = "ws://127.0.0.1:8081/"
bind_mode = "tcp2ws"

# 四层服务器,udp转发
[[stream.server]]
bind_addr = "0.0.0.0:84"
bind_mode = "udp"
up_name = "udp"
timeout = "500s"

[[stream.server]]
bind_addr = "0.0.0.0:86"
up_name = "ws1"
proxy_url = "tcp://127.0.0.1:8082"
bind_mode = "ws2tcp"

根据配置启动

根据命令行启动的命令为wmproxy run,通过help可以得知:

PS C:\Users\PC> wmproxy run --hel
Usage: wmproxy.exe run -c=ARG [--pidfile=ARG] [--control=ARG] [--disable-stdout] [--disable-control]
[-v] [--default-level=ARG]

Available options:
    -c, --config=ARG         配置文件路径
        --pidfile=ARG        写入进程id文件
        --control=ARG        输入控制台的监听地址
                             [default: 127.0.0.1:8837]
        --disable-stdout     禁用默认输出
        --disable-control    禁用控制微端
    -v, --verbose            是否显示更多日志
        --default-level=ARG  设置默认等级
    -h, --help               Prints help information

我们通过wmproxy run -c reverse.toml即可以进行启动。

支持作者

如果该项目对您有用,请帮忙加个Star,Github在新窗口打开

上次更新:
贡献者: tickbh