使用Nginx实现负载均衡

文章目录

  • 一、引言
  • 二、负载均衡原理
    • [2.1 负载均衡定义](#2.1 负载均衡定义)
    • [2.2 负载均衡算法](#2.2 负载均衡算法)
      • [2.2.1 轮询算法](#2.2.1 轮询算法)
      • [2.2.2 权重算法](#2.2.2 权重算法)
      • [2.2.3 最少连接算法](#2.2.3 最少连接算法)
      • [2.2.4 IP哈希算法](#2.2.4 IP哈希算法)
  • 三、Nginx实现负载均衡
    • [3.1 Upstream模块](#3.1 Upstream模块)
      • [3.1.1 后端服务器配置](#3.1.1 后端服务器配置)
      • [3.1.2 负载均衡策略](#3.1.2 负载均衡策略)
    • [3.2 Location模块反向代理](#3.2 Location模块反向代理)
    • [3.3 动静分离部署](#3.3 动静分离部署)
    • [3.4 会话保持方法](#3.4 会话保持方法)
      • [3.4.1 cookie](#3.4.1 cookie)
      • [3.4.2 ip_hash](#3.4.2 ip_hash)
  • 四、Nginx高可用集群
    • [4.1 主备模式及配置](#4.1 主备模式及配置)
    • [4.2 keepalived实现高可用](#4.2 keepalived实现高可用)
  • 五、总结

一、引言

本文将详细介绍使用Nginx实现负载均衡的方法。

二、负载均衡原理

2.1 负载均衡定义

负载均衡(Load Balancing)是将传入的请求流量分发到多个后端服务器的技术,以达到消除单点故障、提高可用性、增加扩展性等目的。

2.2 负载均衡算法

负载均衡需要根据算法来决定如何将请求分发到后端服务器。常见的负载均衡算法包括:

2.2.1 轮询算法

按时间顺序依次将请求发送到不同的后端服务器。

bash 复制代码
upstream backend {
  server server1;
  server server2;
}

2.2.2 权重算法

根据服务器的处理能力设置权重,向性能强的服务器分发更多请求。

bash 复制代码
upstream backend {
  server server1 weight=3; 
  server server2 weight=7;
}

2.2.3 最少连接算法

优先将请求发到当前连接数最少的后端服务器。

bash 复制代码
upstream backend {
  least_conn;
  server server1;
  server server2;  
}

2.2.4 IP哈希算法

根据客户端IP的哈希结果分配到固定的后端服务器,可以解决会话问题。

bash 复制代码
upstream backend {
  ip_hash;
  server server1;
  server server2;  
}

三、Nginx实现负载均衡

3.1 Upstream模块

Upstream模块定义了一组后端服务器,实现客户端请求到后端服务器的负载均衡。

3.1.1 后端服务器配置

bash 复制代码
upstream backend {
  server 192.168.1.100;
  server 192.168.1.101; 
}

3.1.2 负载均衡策略

Nginx支持round-robin、weight、least_conn、ip_hash等策略。

bash 复制代码
upstream backend {
  least_conn;
  server server1 weight=5;
  server server2; 
}

3.2 Location模块反向代理

Location模块配置反向代理到定义的Upstream。

bash 复制代码
location / {
  proxy_pass http://backend; 
}

3.3 动静分离部署

将动态请求和静态请求分发到不同的后端服务器。

bash 复制代码
upstream dynamic {
  server 192.168.1.102;
}

upstream static {
  server 192.168.1.103; 
}

location /static/ {
  proxy_pass http://static;
}

location / {
  proxy_pass http://dynamic;
}

3.4 会话保持方法

upstream backend {

server server1;

server server2;

sticky cookie srv_id expires=1h domain=.example.com path=/;

}

3.4.2 ip_hash

upstream backend {

ip_hash;

server server1;

server server2;

}

四、Nginx高可用集群

4.1 主备模式及配置

主备模式是一种常见的高可用部署方案,通过将主服务器和备份服务器配对,实现在主服务器不可用时,备份服务器能够快速接管服务并保证服务的不间断。

在Nginx中,可以使用主备模式来实现高可用。具体的配置步骤如下:

  1. 配置主服务器:

    • 在主服务器上安装和配置Nginx。
    • 编辑Nginx配置文件,设置主服务器的监听端口和其他相关配置。
    • 启动主服务器。
  2. 配置备份服务器:

    • 在备份服务器上安装和配置Nginx,版本和配置要与主服务器保持一致。
    • 编辑Nginx配置文件,设置备份服务器的监听端口和其他相关配置。
    • 在配置文件中使用backup关键字标记该服务器为备份服务器。
    • 设置proxy_pass指令,将请求代理到主服务器。
    • 启动备份服务器。
  3. 启动keepalived服务:

    • 安装keepalived工具。
    • 编辑keepalived配置文件,配置虚拟IP地址和监控脚本等参数。
    • 启动keepalived服务。

通过以上配置,当主服务器出现故障或不可用时,keepalived会检测到,并自动将虚拟IP地址漂移到备份服务器,备份服务器接管服务,保证服务的不间断。

4.2 keepalived实现高可用

keepalived是一个用于实现高可用性的软件,它能够进行健康检查和故障漂移。在Nginx部署中,可以使用keepalived配合主备模式来实现Nginx的高可用。

具体的配置步骤如下:

  1. 安装和配置keepalived:

    • 在主服务器和备份服务器上安装keepalived工具。
    • 编辑keepalived配置文件,设置虚拟IP地址、监控脚本、优先级等参数。
  2. 健康检查:

    • keepalived会定期执行配置的监控脚本,检查主服务器的运行状态。
    • 如果监控脚本返回失败,keepalived会将主服务器标记为不可用状态。
  3. 故障漂移:

    • 当主服务器被标记为不可用状态时,keepalived会触发故障漂移。
    • 故障漂移过程中,虚拟IP地址会被迁移到备份服务器上。
    • 备份服务器接管服务,继续提供服务。

通过以上配置,当主服务器出现故障或不可用时,keepalived会自动将虚拟IP地址漂移到备份服务器上,从而实现Nginx的高可用性。

总结:

通过主备模式和keepalived,可以实现Nginx的高可用性。主备模式确保主服务器和备份服务器能够互为备份,一旦主服务器不可用,备份服务器能够快速接管服务。keepalived则负责监测服务器的运行状态,并在必要时进行故障漂移,保证服务的连续性。这样的架构能够提高系统的可靠性和可用性,减少因单点故障而导致的服务中断。

五、总结

通过Nginx的Upstream和Location模块可以实现负载均衡,结合动静分离、会话保持、高可用集群,可以构建稳定可靠的负载均衡系统。

相关推荐
乘云数字DATABUFF2 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
荣--4 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森4 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜5 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB6 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode7 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220708 天前
如何搭建本地yum源(上)
运维
ping某9 天前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
大树8811 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠11 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql