七层负载均衡:
- 位于应用层,与用户直接打交道,关心协议、域名
- 主要用于处理http、https等协议开头的请求
- 位置:http块内
- 支持域名、IP、unix套接字
nginx中七层负载均衡支持对应模块 ngx_http_upstream_module ,该模块默认已经引入,可以直接使用;
四种负载均衡策略:
- 加权轮询(
weight=number):默认策略,默认weight=1:按顺序分发请求 - 自定义hash(hash key):根据hash值分发请求,不受加权轮询影响
- ip地址hash(ip_hash):根据客户端ip计算hash值,并根据该hash值分发请求,不受加权轮询影响
- 最少连接数(least_conn):将请求分发给连接数最少的后台服务器,受加权轮询影响(如果多台服务器符合要求,按加权轮询分发请求)
加权轮询(
weight=number):当服务器有性能差异时,可设置不同权重,调整请求分发比例;
例如:对于server A weight=3,server B weight=1,当有4个请求过来时,分发给 A 3个请求,分发给 B 1个请求 ;
upstream backend {
#域名形式,max_conns=100:同时处理请求最大数100,默认为0,不限制
server localhost weight=3 max_conns=100;
#ip形式,max_fails=3 fail_timeout=10:10秒内请求失败次数达到3次,10秒期间服务器不可用,10秒过后可重新访问
server 192.168.242.200:8080 weight=2 max_fails=3 fail_timeout=10;
#备份服务器,当所有服务器都不可用时,启用该服务器处理请求(不可与hash、ip_hash负载均衡策略一起用)
server 127.0.0.1:9090 backup;
#下线,标记该服务器不可用,一般用于停机维护
server 127.0.0.1:8081 down;
}
server {
listen 8888;
server_name localhost;
location / {proxy_pass http://backend;
}
}
自定义hash(hash key):
一个请求的hash值不变,则该请求会一直发往一个服务器;
upstream backend {
#根据请求url哈希分发请求,权重不再生效
hash $request_uri;
#域名形式,max_conns=100:同时处理请求最大数100,默认为0,不限制
server localhost weight=3 max_conns=100;
#ip形式,max_fails=3 fail_timeout=10:10秒内请求失败次数达到3次,10秒期间服务器不可用,10秒过后可重新访问
server 192.168.242.200:8080 weight=2 max_fails=3 fail_timeout=10;
#备份服务器,当所有服务器都不可用时,启用该服务器处理请求(不可与hash、ip_hash负载均衡策略一起用)
#server 127.0.0.1:9090 backup;
#下线,标记该服务器不可用,一般用于停机维护
server 127.0.0.1:8081 down;
}
server {
listen 8888;
server_name localhost;
location / {proxy_pass http://backend;
}
}
ip地址hash(ip_hash):
ip不变哈希值不变,一个ip的请求会一直发往一个服务器
upstream backend {
#根据客户端ip地址哈希分发请求,权重不再生效
ip_hash;
#域名形式,max_conns=100:同时处理请求最大数100,默认为0,不限制
server localhost weight=3 max_conns=100;
#ip形式,max_fails=3 fail_timeout=10:10秒内请求失败次数达到3次,10秒期间服务器不可用,10秒过后可重新访问
server 192.168.242.200:8080 weight=2 max_fails=3 fail_timeout=10;
#备份服务器,当所有服务器都不可用时,启用该服务器处理请求(不可与hash、ip_hash负载均衡策略一起用)
#server 127.0.0.1:9090 backup;
#下线,标记该服务器不可用,一般用于停机维护
server 127.0.0.1:8081 down;
}
server {
listen 8888;
server_name localhost;
location / {proxy_pass http://backend;
}
}
最少连接数(least_conn):
将请求分发给连接数最少的后台服务器,受加权轮询影响(如果多台服务器符合要求,按加权轮询分发请求)
upstream backend {
#将请求发往当前连接数最少的服务器
least_conn;
#域名形式,max_conns=100:同时处理请求最大数100,默认为0,不限制
server localhost weight=3 max_conns=100;
#ip形式,max_fails=3 fail_timeout=10:10秒内请求失败次数达到3次,10秒期间服务器不可用,10秒过后可重新访问
server 192.168.242.200:8080 weight=2 max_fails=3 fail_timeout=10;
#备份服务器,当所有服务器都不可用时,启用该服务器处理请求(不可与hash、ip_hash负载均衡策略一起用)
server 127.0.0.1:9090 backup;
#下线,标记该服务器不可用,一般用于停机维护
server 127.0.0.1:8081 down;
}
server {
listen 8888;
server_name localhost;
location / {proxy_pass http://backend;
}
}
四层负载均衡:
- 位于传输层,TCP、UDP,端到端
- 不关心协议,直接传输数据包,主要用于处理数据库等 ip:port 请求
- 位置:与http块同级
- 支持ip,不支持域名
nginx默认不支持,需要添加模块 ngx_stream_core_module ,通过添加配置参数 --with-stream 添加该模块;
负载均衡策略类似七层负载均衡:
只关心 IP 和 PORT
stream {
upstream mysql_backend {
server 192.168.242.10:3306;
server 192.168.242.11:3306;
}
server {
listen 3306;
proxy_pass mysql_backend;
}
}
使用:mysql -h nginx服务器ip -P 3306 -u root -p

1万+

被折叠的 条评论
为什么被折叠?



