负载均衡
注意
wmproxy 目前仍处于 RC (Release Candidate) 阶段。您可以尝试用它来实现您的需求,但是现在目前来说不是非常的稳定,并未进行过超级充分的测试,暂时尽量不要用于生产环境。
为什么需要负载均衡
负载均衡是一种技术,用于将多个请求分发到多个服务器或计算机节点,以便平衡负载并提高系统性能和可靠性。以下是一些为什么需要负载均衡的原因:
- 扩展性:通过负载均衡,可以水平扩展系统的处理能力,即通过增加服务器数量来提高系统的吞吐量。
- 高可用性:负载均衡可以确保系统的可靠性,因为如果某个服务器出现故障,请求可以自动转发到其他可用的服务器。
- 性能优化:通过负载均衡,可以将请求均匀地分配给服务器,避免某个服务器过载,从而优化系统性能。
- 容错:如果某个服务器出现故障,负载均衡可以将其从服务器组中移除,从而避免故障扩散。
- 可管理性:通过负载均衡,可以集中管理多个服务器,以便进行统一的配置、监控和日志管理。
- 安全性:通过负载均衡,可以在多个服务器之间实施安全策略,例如防火墙规则、SSL加密等,以提高系统的安全性。
- 成本效益:负载均衡可以在多个服务器之间分配请求,从而减少单台服务器的成本和能源消耗。
总之,负载均衡可以提高系统的性能、可靠性和安全性,并且可以降低成本和提高管理效率。因此,在现代的分布式系统和云计算环境中,负载均衡是一项非常重要的技术。
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