> 文章列表 > 两台nginx做负载均衡

两台nginx做负载均衡

两台nginx做负载均衡

什么是负载均衡

负载均衡(Load Balancing)是指将任务或流量分摊到多个设备上执行,从而减轻单一设备的压力和提高整体性能。即把大量请求、数据或任务划分为多个子集,分配给多个服务器或计算机处理,实现资源共享和协同工作。

为什么需要负载均衡

随着互联网规模的不断扩大和网络应用的不断增加,单台服务器往往难以承受大并发访问带来的压力,甚至可能发生宕机或崩溃的情况,造成服务不可用或损失。而负载均衡可以将流量或任务分散到多台服务器上,使它们均衡处理,提高整体性能,增强系统可靠性、可用性和可扩展性。

nginx的负载均衡实现方式

nginx是一款轻量级、高效、稳定的Web服务器和反向代理,具有快速处理静态页面和负载均衡的特点。nginx支持一下常见的负载均衡方式:

  • 轮询(round-robin):默认的负载均衡策略,将请求轮流分配给不同的服务器,平均分担负载。
  • IP哈希(ip-hash):通过客户端请求IP地址,将请求分配给同一台服务器处理,保证同一客户端的请求始终由同一台服务器处理。
  • 最小连接(least-connections):将请求分配给当前连接数最少的服务器,尽量平衡连接数,避免某些服务器负载过重。

配置nginx的负载均衡

为了实现nginx的负载均衡,需要在nginx.conf文件中配置upstream模块和server模块。upstream模块定义了一组后端服务器,server模块定义了反向代理服务器和代理的服务端口。

upstream backend {    server 192.168.1.10:80 weight=3;    server 192.168.1.11:80;    server 192.168.1.12:80;}server {    listen 80;    server_name example.com;    location / {        proxy_pass http://backend;        proxy_set_header Host $host;        proxy_set_header X-Real-IP $remote_addr;    }}

上述配置定义了三个后端服务器,其中第一个服务器的权重是3,表示该服务器处理请求的比例是其他服务器的3倍,可以根据实际情况进行配置。在server模块中,使用proxy_pass指令将请求代理到backend组中的服务器,使用proxy_set_header指令设置请求头信息。

两台nginx做负载均衡的配置

为了实现高可用和容错,可以将负载均衡器和后端服务器分别部署在不同的机器上,并使用keepalived实现双机热备。下面是两台nginx做负载均衡的配置:

# nginx1配置upstream backend {    server 192.168.1.10:80 weight=3;    server 192.168.1.11:80;    server 192.168.1.12:80;}server {    listen 192.168.1.100:80;    server_name example.com;    location / {        proxy_pass http://backend;        proxy_set_header Host $host;        proxy_set_header X-Real-IP $remote_addr;    }}# nginx2配置upstream backend {    server 192.168.1.10:80 weight=3;    server 192.168.1.11:80;    server 192.168.1.12:80;}server {    listen 192.168.1.100:80;    server_name example.com;    location / {        proxy_pass http://backend;        proxy_set_header Host $host;        proxy_set_header X-Real-IP $remote_addr;    }}

上述配置中,两台nginx的配置基本相同,区别在于listen指令绑定的IP地址是虚拟IP地址,这个IP地址通过keepalived自动切换到活动nginx节点上,从而实现高可用和容错。