Linux Nginx负载均衡——Nginx upstream配置、负载均衡算法、配置实例、配置7层协议及4层协议方法
Nginx负载均衡
Nginx负载均衡的作用
如1台Nginx服务器给2台web服务器做代理,负载均衡算法采用轮询方式,当一台web服务器出现故障造成不能访问,Nginx服务器分发请求依然会发送到故障服务器;若响应时间过长,会导致客户端的页面一直在等待响应, 会严重影响到用户体验。
如图:
如web2发生意外,Nginx首先会去web1请求,若Nginx在配置不当会导致继续分发请求到web2,然后等待web2响应,直到响应时间超时,才会重新分发请求web1;响应时间过长,用户等待时间越长。
Nginx upstream配置
upstream 配置:是配置一组被代理的服务器地址,然后配置负载均衡的算法。(这里的被代理服务器地址有2种写法)
upstream vccloud { server 192.168.1.129:80; server 192.168.1.130:80;}server { listen 80; server_name localhost; location / { proxy_pass http://vccloud; }}
Nginx 负载均衡算法
upstream 支持4种负载均衡调度算法:
1、轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器;
2、ip_hash:每个请求按访问IP的hash结果分配,同一个IP客户端固定访问一个后端服务器。可以保证来自同一ip请求被发送到固定的机器上,可以解决session(会话控制)问题。
3、url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器。
4、fair:这是为更加智能的负载均衡算法。fail算法可以依据页面大小和加载时间长短智能地进行负载均衡,即根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身不支持 fair,使用需要下载配置Nginx的 upstream_fair模块。
Nginx 配置实例
1、热备:如在只有2台服务器情况下,当一台服务器发生事故时,启用第二台服务器给提供服务。服务器处理请求的顺序:web A挂掉、web B顶上(backup热备)
upstream myweb { server 192.168.1.129:80; server 92.168.1.130:80 backup; #热备 }
2、轮询:Nginx默认就是轮询其权重都默认为1(占比),服务器处理请求的顺序:ABABABABAB….
upstream myweb { server 192.168.1.129:80; server 192.168.1.130:80; }
3、加权轮询:不同服务器会涉及到性能差异,根据配置的权重的大小而分发给不同服务器不同数量的请求。不设置则默认为1。下面服务器的请求顺序为:ABBABBABBABBABB….
upstream myweb { server 192.168.1.129:80 weight=1; server 192.168.1.130:80 weight=2;}
4、ip_hash:Nginx会让相同的客户端ip请求相同的服务器。
upstream myweb { ip_hash; server 192.168.1.129:80; server 192.168.1.130:80; }
5、nginx负载均衡配置状态参数
down,当前的server暂时不参与负载均衡。
backup,预留的备份机器。当其他的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。
max_fails,允许请求失败的次数,默认为1,超过最大次数,返回错误。
fail_timeout,在经历了max_fails(最大请求失败次数)次失败后,暂停服务的时间单位(若干)秒。max_fails可以和fail_timeout一起使用。
upstream myweb { server 192.168.1.129:80 weight=2 max_fails=2 fail_timeout=2; server 192.168.1.130:80 weight=1 max_fails=2 fail_timeout=1; }
Nginx配置7层协议及4层协议方法
(1)OSI 7层协议
OSI(Open System Interconnection)是一个开放性的通行系统互连参考模型,它是一个定义的非常好的协议规范,共包含七层协议。
参考图
(2)TCP/IP 4层协议
TCP/IP是一个协议族,TCP/IP协议包括TCP、IP、UDP、ICMP、RIP、TELNETFTP、SMTP、ARP、TFTP等许多协议,这些协议一起称为TCP/IP协议。
从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层、网络层、传输层、应用层。
(3)协议配置
在nginx做负载均衡,负载多个服务,部分服务或是需要7层、或是4层,(也就是说7层和4层可配置在同一个配置文件中)
准备三台机器:
代理服务IP:10.0.105.201 --配置本地host解析域名;
后端服务器IP:nginx-a :10.0.105.199、nginx-b:10.0.105.202
配置代理服务器的nginx配置文件
worker_processes 4;worker_rlimit_nofile 102400;events { worker_connections 1024;}http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; keepalive_timeout 65; gzip on; upstream vcweb { ip_hash; server 10.0.105.199:80 weight=2 max_fails=2 fail_timeout=2s; server 10.0.105.202:80 weight=2 max_fails=2 fail_timeout=2s; } server { listen 80; server_name www.vccloud.com; charset utf-8; #access_log logs/host.access.log main; location / { proxy_pass http://vcweb; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }}
浏览器测试访问:http://www.vccloud.com/
10.0.105.202 10.0.105.199服务器yum安装的创建新的配置文件:
[root@nginx-server ~]# cd /etc/nginx/conf.d/[root@nginx-server conf.d]# cp default.conf test.conf[root@nginx-server conf.d]# cat test.confserver { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; }}[root@nginx-server ~]# nginx -s reload
Nginx的1.9.0版本增加了一个 stream 模块,用来实现四层协议(网络层和传输层)的转发、代理、负载均衡等。stream模块的用法跟http的用法类似,允许配置一组TCP或者UDP等协议的监听,然后通过proxy_pass来转发请求,通过upstream添加多个后端服务,实现负载均衡。
#4层tcp负载stream { upstream vcweb { hash $remote_addr consistent; server 172.17.14.2:8080; server 172.17.14.3:8080; } server { listen 80; proxy_connect_timeout 10s; proxy_timeout 30s; proxy_pass vcweb; }}
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
API接口请求方式GET与POST的区别和应用
API接口请求方式GET与POST的区别和应用 一、请求方式GET与POST的区别: 1.GET请求的数据会附在URL之后,以?分割URL和传输数据,参数之间以&相连, POST把提交的数据则放置在是HTTP包的包体中。 2.GET的长度受限于url的长度,而url的长度限制是特定的浏览器和服务器设置的,理论上GET的长度可以无限长。 POST是没有大小限制的,HTTP协议规范也没有进行大小限制,起限制作用的是服务器的处理程序的处理能力 3.GET请求没有POST请求安全 私密性的信息请求使用post。 查询信息和可以想要通过url分享的信息使用get。 4.在ASP中,服务端获取GET请求参数用Request.QueryString,获取POST请求参数用Request.Form。 二、请求方式GET与POST的应用: API接口在车牌号查车辆信息应用 接口简介:通过车牌号核查车辆行驶证信息。 子接口: 接口地址:https://登录后显示/api/111/251(支持:http/https) 返回格式:json,xml 请求方式:GET,POST POST 请求需要设置He...
- 下一篇
智能会话机器人:SaaS 平台的设计与思考
1. 前言 随着自然语言处理和智能语音识别技术的发展,智能会话机器人开始部分替代人工客服。 网上关于NLP算法的文章有很多,但关于 Chatbot 架构的却很少,关于 Chatbot SaaS 平台架构的则更少。我是一名对机器学习感兴趣的程序员,更关注如何设计实现一个架构良好的 Chatbot SaaS 平台,因此写下了这篇文章。 2. Chatbot架构 2.1. 智能会话机器人的分类 智能会话机器人按照对话轮次来划分,可以分为单轮对话机器人和多轮对话机器人;按照知识领域来划分,可以分为限定域机器人和开放域机器人;按照任务类型来划分,可以分为任务型机器人、问答型机器人、闲聊型机器人和融合型机器人。 任务型:根据用户给出的信息完成指定的任务。一般限定于某个垂直领域,常采用多轮对话的形式。如订餐、订票等服务。 问答型:为用户提出的事实型、布尔型、计算型、推理型等类型的问题自动给出答案,进一步还可以再划分为常见问题解答(FAQ)和知识图谱问答(KBQA),一般限定于某个特定知识领域。 闲聊型:与用户进行开放式聊天,满足用户的情感陪护需求。一般不限定话题范围,但有可能偏向于某个领域。 融合型...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2全家桶,快速入门学习开发网站教程
- Docker安装Oracle12C,快速搭建Oracle学习环境