【NGINX】负载均衡、动静分离、Keepalived高可用

PythonNew_Mr.Wang / 2023-09-01 / 原文

负载均衡

http {
    
    # 集群服务配置:
    
    # 指令:
    # 	  down:手动将一个服务器标记为不可用。标记为不可用的服务器将不接收任何请求。
    #	  backup:备份服务器,当主服务器不可用时,请求将被转发到备份服务器上。
    #	  weight:设置服务器的权重,可以根据服务器的性能和负载情况分配不同的权重。
    # 	  max_fails:允许最大失败次数。默认值为 1。
    # 	  fail_timeout:被标记为不可用之后,需要经过多长时间才能再次尝试使用。
    
    # 算法:
    #	  轮询	   ==>   默认方式
    #	  weight     ==>   权重方式(处理不同服务器性能或资源配置不均)
    #	  ip_hash    ==>   依据ip分配方式(要保持特定用户会话粘性)
    # 	  least_conn ==>   依据最少连接方式(请求占用时间长,请求处理时间长短不一致)
    # 	  url_hash 	 ==>   依据URL分配方式(缓存数据或需要保持特定URL会话)
    #	  fair 	     ==>   依据响应时间方式(响应时间)
    upstream backend {
        server 43.138.129.121:8001 down; 
        server 43.138.129.121:8002 max_fails=3 fail_timeout=15; 
        server 43.138.129.121:8003 weight=10;
        server 43.138.129.121:8004 weight=5;
        server 43.138.129.121:8005;
    }

    
    server {
        listen 80;
        server_name localhost bysj.club;

        location / {
            root /MINE/nginx_test/;
            index index.html;
            # proxy_pass http://backend;
        }
        
	    # 注意:如果配置了/api,那么后端需要有跟/api路径一样的请求接口;
        # 理解:
        # 	  1:前端定义了需要负载均衡的接口路径,以/api路径开头的所有后端接口;
        #     2:在nginx里面配置了location的负载均衡 ==> location /api
        #     3:配置后端分发服务  upstream backend
        location /api {
            proxy_pass http://backend;
        }
        
    }
}

动静分离(动态请求和静态请求分别交给不同的服务器处理)

# 1:配置静态文件服务器:创建一个用于存储静态文件的目录,并将其配置为Nginx的静态文件服务器。这个配置将使Nginx监听80端口,并将静态文件存储在/www/static/dist/build/h5目录中。对于所有请求,Nginx将首先尝试在静态文件目录中查找匹配的文件。
server {
    listen 80;
    server_name example.com;
    index index.html;
    root /www/static/dist/build/h5;  # 前端静态文件目录
    
    # 如果属于框架后台的静态资源文件,可以收集到一个目录后,进行静态资源指定路径访问
    location /static {
        alias /www/django_admin/static
    }
    

	# 2:配置动态请求转发,将动态请求转发给后端的应用服务器(如PHP、Python或Java应用服务器)。可以使用proxy_pass指令将动态请求转发到后端服务器,或者配置后端可能需要的静态文件访问
    location / {
        # 反向代理到后端
        # proxy_pass http://backend_server;  
        proxy_pass http://127.0.0.1:8000;  
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # 可选的额外配置
        proxy_read_timeout 120s;
        proxy_connect_timeout 120s;
        proxy_redirect off;
    }
}

Keepalived(nginx高可用性和故障转移)

Keepalived通常用于构建高可用的网络服务架构,特别是在负载均衡器和集群环境中。它可以确保在主服务器故障时,备用服务器能够接管VIP并提供服务,从而实现故障转移和保证系统的持续可用性。

Keepalived工作时的基本原理如下:

Keepalived在多个服务器上运行,每个服务器都有一个Keepalived进程。
这些Keepalived进程通过UDP或组播来进行通信,以发现其他服务器的存在并协调状态。
在服务器集群中选择其中一个服务器作为主服务器,也称为Master节点。
主服务器通过对VIP进行健康检查来确保服务是否可用,例如通过发送心跳检查或对特定端口的连接检查。
如果主服务器检测到故障或服务不可用,它会将VIP指派给备用服务器中的一个,也称为Backup节点。
备用服务器接管VIP后,它开始处理来自客户端的请求,替代了主服务器的功能。
一旦主服务器恢复正常,它会重新获得VIP的所有权,成为主节点,并恢复其原始功能。
Keepalived还提供了其他功能,如基于权重的负载均衡和故障检测。它是一个灵活且可靠的工具,可用于确保高可用性和故障转移,提供持续的服务和可靠性。