Nginx 高级篇

Nginx 高级篇

一、 负载均衡

1、 负载均衡概述

负载均衡(Load Balance),它在网络现有结构之上可以提供一种廉价、有效、透明的方法来扩展网络设备和服器的带宽,并可以在一定程度上增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性等。用官网说,它充当着网络流中“交通指挥官”的角色,“站在”服务器前处理所有服务器端和客户端之间的请求,从而最大度地提高响应速率和容量利用率,同时确保任何服务器都没有超负荷工作。如果单个服务器出现故障,负载均衡方法会将流量重定向到其余的集群服务器,以保证服务的稳定性。当新的服务器添加到服务器组后,也可通过负均衡的方法使其开始自动处理客户端发来的请求。

负载均衡的作用

  • 解决服务器高并发的压力,提高应用程序的处理性能
  • 提供故障转移,实现高可用
  • 通过添加或减少服务器数量,增强网站的可扩展性
  • 在负载均衡器上进行过滤,可以提高系统的安全性

2、 处理方式

2.1 用户手动选择

这种方式比原始,主要实现的方式就是在网站主页上面提供不同线路、不同服务连接方式,让用户来选择自己访问的具体服务器,来实现负载均衡。

如,蓝奏云

2.2 DNS 轮询

DNS:域名系统服务协议是一种分布式网络目录服务,主要有用于域名与 IP 地址的相互转换

大多数域名注册商都支持对同一个主机名添加多条 A 记录,这就是 DNS 轮询,DNS 服务器将解析请求按照 A 记录的顺序,随机分配到不同的 IP 上,这样就能完成简单的负载均衡。DNS 轮询的成本非常低,在一些不重要的服务器,被经常使用。

使用 DNS 来实现轮询,不需要投入过多的成本,虽然 DNS 轮询成本低廉,但是 DNS 负载均衡存在明显的缺点:

  1. 可靠性低

    各大宽带接入商会将众多的 DNS 存放在缓存中,以节省访问时间,导致 DNS 不会实时更新。

    Windows 刷新 DNS 的命令:ipconfig/flushdns

  2. 负载均衡不均衡

    其会导致某几台服务器负荷很低,而另外几台服务器负荷很高,处理请求的速度慢,配置高的服务器分配到的请求少,而配置低的服务器分配到的请求多。

2.3 四 / 七层负载均衡

OSI,开放式系统互联模型,这个是有国际标准化 ISO 指定的一个不基于具体机型、操作系统或公式的网络体系结构。该模型将网络通信的工作分为七层。

  • 四层负载均衡:OSI 七层模型中的传输层,主要是基于 IP + PORT 的负载均衡
  • 七层负载均衡:在音乐层,主要是基于虚拟的 URL 或主机 IP 的负载均衡

3、 七层负载均衡

Nginx 要实现七层负载均衡需要用到 proxy_pass 代理模块配置。Nginx 默认安装支持这个模块,我们不需要再做任何处理。Nginx 的负载均衡是在 Nginx 的反向代理的基础上把用户的请求根据指定的算法分发到一组【upstream 虚拟服务池】

3.1 七层负载均衡指令
3.1.1 upstream

该指令是用来定义一组服务器,它们可以是监听不同端口的服务器,并且也可以是同时监听 TCP 和 Unix Socket 的服务器。服务器可以指定不同的权重,默认为 1。

语法 默认值 位置
upstream name {…} - http
3.1.2 server

该指令是用来指定后端服务器的名称和一些参数,可以使用域名、IP、端口或者 Unix Socket。

语法 默认值 位置
server name [paramerters] - upstream
3.2 实现流程

使用示例:

server {
	listen		9001;
    server_name 	localhost;
    default_type 	text/html;
    location / {
    	return 200 "port=9001";
    }
}
server {
	listen		9002;
    server_name 	localhost;
    default_type 	text/html;
    location / {
    	return 200 "port=9002";
    }
}
upstream backend {
	server localhost:9001;
    server localhost:9002;
}
server {
	listen  	80;
    server_name localhost;
    location /	{
    	proxy_pass http://backend;  # backend 为服务组的名称
    }
}
3.3 负载均衡的状态

代理服务器在负责负载均衡调度中的状态有以下几个:

状态 描述
down 当前 server 暂时不参与负载均衡
backup 预留的备份服务器
max_fails 允许请求失败的次数
fail_timeout 经过 max_fails 失败后,服务暂停时间
max_conns 限制最大的接收数
3.3.1 down

将服务器标记为永久不可用,那么该服务器将不参与负载均衡

upstream backend {
	server localhost:9001 down;
    server localhost:9002;
}
server {
	listen  	80;
    server_name localhost;
    location /	{
    	proxy_pass http://backend;  # backend 为服务组的名称
    }
}

该状态一般会对需要停机维护的服务器进行设置。

3.3.2 backup

将该服务器标记为备份服务器,当主服务器不可用时,将用来传递请求。

upstream backend {
	server localhost:9001 backup;  # 备份服务器
    server localhost:9002 down;  
    server localhost:9003;  # 主服务器
}
server {
	listen  	80;
    server_name localhost;
    location /	{
    	proxy_pass http://backend;  # backend 为服务组的名称
    }
}

此时需要将 9003 端口的访问禁止调来模拟唯一能对外提供访问的服务宕机以后,backup 的备份服务器就要开始对外提供服务,此时为了测试验证,我们需要使用防火墙来进行拦截。

这时,我们需要使用 ufw 工具来对防火墙进行控制:

sudo apt install ufw  # 安装 ufw
ufw enadble  # 开启防火墙
ufw deny 9003/tcp  # 关闭 9003 端口
ufw allow 9001:9002/tcp  # 允许开启 9001 和 9002
ufw allow http  # 开放http

这里我使用的是 ubuntu 系统

3.3.3 max_conns

max_conns=number:其用来设置代理服务器同时活动链接的最大数量,默认为 0 ,表示不限制,使用该配置可以根据后端服务器处理请求的并发量来进行设置,防止后端服务器被压垮。

3.3.4 max_fails & fail_timeout

max_fails=numbe

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SteveKenny

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值