Hello!欢迎各位新老朋友来看小弟博客,祝大家事业顺利,财源广进!!
主题:负载均衡
第一:前言
Nginx系列导读
Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件**(IMAP/POP3)**代理服务器。官方测试nginx能够支撑5万并发连接,并且cpu、内存等资源消耗却非常低,运行非常稳定。
随手记录一下,上次有个面试官问nginx支持的协议有哪些?
HTTP/1.1 | Nginx 支持 HTTP/1.1 协议,这是目前最常用的 HTTP 协议版本。 |
HTTP/2 | Nginx 从 1.9.5 版本开始支持 HTTP/2 协议,它提供了更好的性能,包括头部压缩、多路复用等特性。 |
HTTPS | Nginx 支持通过 SSL/TLS 协议提供安全的 HTTPS 连接,用于加密客户端和服务器之间的通信。 |
FTP | Nginx 可以通过第三方模块支持 FTP 协议 |
SMTP/POP3/IMAP | Nginx 可以通过ngx_mail模块支持邮件协议,包括 SMTP(发送邮件)、POP3(接收邮件)和 IMAP(邮件访问协议) |
TCP/UDP | Nginx 可以通过其 stream 模块支持 TCP 和 UDP 协议,用于负载均衡和代理其他类型的网络服务 |
WebSocket | Nginx 支持 WebSocket 协议,这是一种在单个 TCP 连接上进行全双工通信的协议 |
gRPC | Nginx 可以通过配置支持 gRPC,这是一种由 Google 主导的高性能、通用的 RPC 框架 |
FastCGI | Nginx 支持 FastCGI 协议,这是一种常用于 Web 应用和后端脚本语言(如 PHP)之间通信的协议。 |
SCGI | Nginx 支持 SCGI(Simple Common Gateway Interface),这是一种进程间通信协议,用于 Web 服务器和应用服务器之间的通信。 |
uWSGI | Nginx 可以通过 uWSGI 协议与应用服务器通信,这通常用于 Python 应用。 |
Proxy Protocol | Nginx 支持 Proxy Protocol,这是一种用于传输客户端真实 IP 地址的协议,常用于负载均衡器和代理环境中。 |
负载均衡
什么是负载均衡,单从字面理解可以解释为N台服务器平均分担负载,不会因为某台服务器负载高宕机而出现某台服务器闲置的情况。那么负载均衡的前提就是要有多台服务器才能实现,目的是达到整个系统的高性能和高可用性。
第二:Nginx负载均衡介绍
严格地说,Nginx
仅仅是作为Nginx Proxy反向代理
使用的,因为这个反向代理功能表现的效果是负载均衡集群的效果,所以本文称之为Nginx负载均衡。那么,反向代理和负载均衡有什么区别呢?
- 普通负载均衡软件,例如大名鼎鼎的LVS,其实功能只是对请求数据包的转发(也可能会改写数据包)、传递。其中DR模式明显的特征是:从负载均衡下面的节点服务器来看,接收到的请求还是来自访问负载均衡器的客户端的真实用户。
- 而反向代理就不一样了,反向代理接收访问用户的请求后,会代理用户重新发起请求代理下的节点服务器,最后把数据返回给客户端用户,在节点服务器看来,访问的节点服务器的客户端用户就是反向代理服务器了,而非真实的网站访问用户。
- 一句话,LVS等的负载均衡是转发用户请求的数据包,而Nginx反向代理是接收用户的请求后,会代理用户重新发起请求代理下的节点服务器。
第三:Nginx负载均衡组件模块
实现Nginx负载均衡的组件主要有两个:
-
ngx_http_upstream_module
负载均衡模块,可以实现网站的负载均衡功能及节点的健康检查 -
ngx_http_proxy_module
proxy代理模块,用于把请求转发给服务器节点或upstream服务器池
2.1、upstream模块
(1)upstream模块介绍
upstream模块允许Nginx定义一组或多组节点服务器组,使用时可以通过proxy_pass代理方式把网站的请求发送到事先定义好的对应upstream组的名字上,具体写法为:
proxy_pass http://server_pools
其中server_pools就是一个upstream节点服务器组名字。
(2)upstream配置案例
范例1:基本的upstream配置案例:
upstream server_pools {
# upstream是关键字必须有,后面的server_pools是upstream集群组的名字,可自定义名称,调用时就用这个名字。
server 192.168.1.251:80 weight=5;
server 192.168.1.252:80 weight=10;
server 192.168.1.253:80 weight=15;
# server关键字是固定的,后面可以接域名或IP。如果不指定端口,默认是80端口。weight代表权重,数值越大被分配的请求越多。
}
范例2:较完整的upstream配置案例:
upstream blog__pools {