0
点赞
收藏
分享

微信扫一扫

Nginx 四层负载均衡算法和配置实验

Nginx 四层负载均衡算法和配置实验_nginx

Nginx在1.9.0版本开始支持tcp模式的负载均衡,在1.9.13版本开始支持udp协议的负载,udp主要用于DNS的域名解析,其配置方式和指令和http代理类似

基于模块ngx_stream_proxy_module实现tcp负载

基于模块ngx_stream_upstream_module实现后端服务器分组转发、权重分配、状态监测、调度算法等高级功能

tcp负载均衡配置参数

vim /etc/nginx/nginx.conf 

stream { #定义stream相关的服务;Context:main
upstream backend { #定义后端服务器
hash $remote_addr consistent; #定义调度算法
server backend1.example.com:12345 weight=5; #定义具体server
server 127.0.0.1:12345 max_fails=3 fail_timeout=30s;
server unix:/tmp/backend3;
}
upstream dns { #定义后端服务器
server 10.0.0.1:53535; #定义具体server
server dns.example.com:53;
}
server { #定义server
listen 12345; #监听IP:PORT
proxy_connect_timeout 1s; #连接超时时间
proxy_timeout 3s; #转发超时时间
proxy_pass backend; #转发到具体服务器组
}
server {
listen 127.0.0.1:53 udp reuseport;
proxy_timeout 20s;
proxy_pass dns;
}
}

调度算法

1. weight轮询(默认)

接收到的请求按照顺序逐一分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响,而LVS重大功能性缺失就是没有健康性检查。nginx如何判断后端服务器是否正常?它采取了懒惰的TCP请求进行判断,即有用户请求的时候建立TCP连接,如果失败则连接转向健康的后端服务器

2. ip_hash

每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。

3. fair

智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。但是需要注意的是nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块

4. url_hash

按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在nginx作为静态服务器的情况下提高缓存效率。同样要注意nginx默认不支持这种调度算法,要使用的话需要安装nginx的hash软件包

实验拓扑

负载均衡实例: web1和web2轮询

Nginx 四层负载均衡算法和配置实验_nginx_02

#172.16.10.8服务器配置
yum install httpd -y;systemctl enable --now httpd
echo this is server 172.16.10.8 > /var/www/html/index.html
systemctl restart httpd

#172.16.10.9服务器配置
yum install httpd -y;systemctl enable --now httpd
echo this is server 172.16.10.9 > /var/www/html/index.html
systemctl restart httpd
#172.16.10.21nginx服务器预配置
vim /etc/nginx/conf.d/pc.conf
server {
listen 80;
server_name pc.linweiwei.com;
root /etc/nginx/html/pc;
proxy_cache off;
#proxy_cache_key $request_uri;
proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid 200 302 301 10m;
proxy_cache_valid any 5m; #必须指定哪些响应码的缓存
proxy_set_header X-Real-IP $remote_addr;
add_header X-Via $server_addr; #当前nginx主机的IP
add_header X-Cache $upstream_cache_status; #是否缓存命中
add_header X-Accel $server_name; #客户访问的FQDN
location / {
root /etc/nginx/html/pc;
proxy_pass http://webservers/; #代理网页指向webservers,与nginx.conf定义一致
}
location ~*\.(jpe?g|png|bmp|gif)$ {
proxy_pass http://172.16.10.9;
}
}

vim /etc/nginx/nginx.conf

Nginx 四层负载均衡算法和配置实验_nginx_03

测试结果,轮询算法成功

Nginx 四层负载均衡算法和配置实验_nginx_04

举报

相关推荐

0 条评论