Nginx使用(一) — Nginx搭建负载均衡(ubuntu-22.04.2-live-server环境)


前言

负载均衡是一种在多个服务器之间分配工作负载的技术,通过将请求从一个集中式位置转发到多个后端服务器上,实现了资源的合理利用和请求的分担,从而提高了系统的可伸缩性、稳定性和性能。通过负载均衡,可以实现对网络流量的动态调整,使得系统能够更好地适应不断变化的用户需求和环境条件。


一、负载均衡是什么?

负载均衡是一种网络技术,旨在通过分配和管理网络流量,以确保网络服务和应用程序的高可用性、性能和稳定性。其基本原理是将来自用户的请求动态地分发到多个后端服务器或资源上,以实现对系统负载的平衡,从而提高整体的系统性能和可靠性。

在负载均衡中,负载均衡器(Load Balancer)充当了中间层,它接收来自客户端的请求,并根据预定义的负载均衡策略将这些请求分发到后端的多个服务器上。这些服务器可以是物理服务器、虚拟机或容器等,它们共同提供相同的服务或内容,负载均衡器根据实际情况动态地调整流量的分配,确保每个服务器的负载尽可能均衡。

负载均衡器通常具有以下几个核心功能和特点:

  1. 流量分发(Traffic Distribution):负载均衡器根据预定义的算法和策略,将来自客户端的请求分发到后端的多个服务器上,以实现负载的均衡分配。

  2. 健康检查(Health Checks):负载均衡器会定期检测后端服务器的健康状态,以及时发现和排除不可用或故障的服务器,确保只有健康的服务器才会接收流量。

  3. 故障转移(Failover):当某个服务器出现故障或不可用时,负载均衡器可以自动将流量重新路由到其他健康的服务器上,从而实现服务的高可用性和容错处理。

  4. 会话保持(Session Persistence):有些应用程序需要确保同一用户的请求始终被发送到同一个后端服务器上,负载均衡器可以通过会话保持技术实现这一功能。

  5. 缓存和压缩(Caching and Compression):一些负载均衡器还提供缓存和压缩功能,以减少服务器的负载并提高响应速度。

负载均衡器可以部署在物理硬件设备、虚拟机实例或作为软件应用程序运行在通用服务器上,常见的负载均衡器包括硬件负载均衡器(如F5 BIG-IP)、软件负载均衡器(如Nginx、HAProxy)和云服务提供商提供的负载均衡服务(如AWS ELB、Azure Load Balancer)。

二、使用Nginx搭建负载均衡教程

搭建步骤以及准备条件
使用Vmware创建三台Linux服务器(镜像源:ubuntu-22.04.2-live-server)

  • 场景一、vue项目部署需要用到Nginx,所以三台服务器都需要安装Nginx,一台作为负载均衡服务器,两台作为应用程序服务器(教程使用的是场景一)

  • 场景二、java项目部署用Tomcat,这里就只需要一台安装Nginx,作为负载均衡器服务使用,另外两台各应用程序服务器

      虚拟机1:192.168.2.135:80(应用程序服务器)
      虚拟机2:192.168.2.136:80(应用程序服务器)
      虚拟机3:192.168.2.137:80(负载均衡服务器)
      三台虚拟机装的nginx版本都是: nginx 1.18.0
    

如何在Docker部署安装Nginx,这里有详细介绍 安装Nginx,可根据教程把三台服务器都安装好Nginx。

1.负载均衡服务器配置代理

找到虚拟机3 nginx.conf配置文件,如果你按照以上教程安装Nginx,nginx配置文件在指定挂载目录 /home/test/nginx/conf/nginx.conf 下,修改成如下配置即可(注:修改成功后需要重启Nginx,输入 docker restart nginx)

upstream app {
    server 192.168.2.138:80;
    server 192.168.2.139:80;
}
  
server {
   listen 80;
   server_name localhost;
   location / {
       proxy_pass http://app;
       proxy_set_header Host $proxy_host;
   }
}

在这里插入图片描述
图中参数介绍

  • upstream后面的名称与proxy_pass后面的地址对应(名称可以随意写),upstream中的两个server地址就是两个应用程序服务器的地址。
  • proxy_pass:设置后端代理服务器的地址。这个地址(address)可以是一个域名或ip地址和端口,或者一个 unix-domain socket路径。
  • proxy_set_header:就是可设置请求头-并将头信息传递到服务器端。

2.测试

打开浏览器,访问负载均衡服务器代理地址(http://ip+port)。每次访问最终都是请求不同的服务器。:
在这里插入图片描述

三、负载均衡的几种常用方式

1.轮询(默认策略,nginx自带策略)

我上面的例子就是轮询的方式,它是upstream模块默认的负载均衡默认策略。会将每个请求按时间顺序分配到不同的后端服务器。

upstream app {
    server 192.168.2.138:80;
    server 192.168.2.139:80;
}
  
server {
   listen 80;
   server_name localhost;
   location / {
       proxy_pass http://app;
       proxy_set_header Host $proxy_host;
   }
}

2.weight(权重)

指定轮询的访问几率,用于后端服务器性能不均时调整访问比例。权重越高,在被访问的概率越大,如上例,分别是30%,70%。

upstream app {
    server 192.168.2.138:80 weight=7;
    server 192.168.2.139:80 weight=3;
}
  
server {
   listen 80;
   server_name localhost;
   location / {
       proxy_pass http://app;
       proxy_set_header Host $proxy_host;
   }
}

3.IP Hash(IP散列)

使用客户端的IP地址来计算一个散列值,并将请求发送到相应的服务器,确保同一客户端的请求始终发送到同一台服务器上,可以解决session不能跨服务器的问题。

upstream app {
	ip_hash;  # 启用IP散列策略
    server 192.168.2.138:80;
    server 192.168.2.139:80;
}
  
server {
   listen 80;
   server_name localhost;
   location / {
       proxy_pass http://app;
       proxy_set_header Host $proxy_host;
   }
}

4.Least Connections(最小连接数)

把请求转发给连接数较少的后端服务器。

upstream app {
    least_conn;#把请求转发给连接数比较少的服务器
    server 192.168.2.138:80;
    server 192.168.2.139:80;
}
  
server {
   listen 80;
   server_name localhost;
   location / {
       proxy_pass http://app;
       proxy_set_header Host $proxy_host;
   }
}
  • 29
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值