keepalive +nginx 详细搭建过程

405 阅读3分钟
  1. Keepalive 的定义

    • Keepalive 是一种网络功能,旨在允许在TCP连接中保持持久的连接状态,从而允许客户端和服务器在单个连接上进行多次请求和响应,而不是每次请求都建立新的连接。
  2. Nginx 中的 Keepalive

    • Nginx 支持 HTTP 层的 keep-alive(通过 Connection: keep-alive 头部),这允许客户端和 Nginx 服务器之间的连接在多个请求之间保持打开状态。
    • Nginx 还支持 TCP 层的 keepalive(不同于 HTTP keep-alive),它允许在 TCP 连接空闲时发送和接收保活包(probe packets)来检查连接是否仍然活动,防止连接因空闲而意外关闭。
  3. Nginx 中 Keepalive 的配置

    • 对于 HTTP keep-alive,Nginx 提供了以下相关指令:

      • keepalive_timeout:设置非活动连接的超时时间,超过这个时间连接将被关闭。默认值通常为 75 秒。
      • keepalive_requests:设置一个连接上允许的最大请求数。默认值为 100。
      • keepalive_disable:可以选择性地禁用对某些客户端或请求类型的 keep-alive。
    • 对于 TCP keepalive,Nginx 提供了 so_keepalive 指令,但这通常用于操作系统级别的 TCP 配置,而不是直接在 Nginx 配置文件中设置。

  4. Keepalive 并不能直接控制 Nginx

    • 虽然 keepalive 机制对 Nginx 的性能和效率有很大影响,但它并不能直接控制 Nginx 的整体操作。Nginx 的操作、功能和配置主要由其配置文件和其他模块来控制。
    • Keepalive 只是影响连接管理的一种方式,通过减少建立和关闭连接的开销来提高性能。
  5. 总结

    • Keepalive 是一种网络通信机制,用于优化连接管理和提高性能。
    • 在 Nginx 中,可以通过配置 HTTP keep-alive 和 TCP keepalive 来调整连接的行为。
    • 然而,keepalive 并不能直接控制 Nginx 的整体操作,它只是 Nginx 配置和性能优化中的一个方面。

实验

  • 方案规划
    • nginx负载均衡服务器主 192.168.10.1
    • nginx负载均衡服务器从 192.168.10.10
    • 真实服务器1 192.168.10.20
    • 真实服务器2 192.168.10.30
    • VIP 192.168.19.188 Screenshot 2024-06-19 140834.png

安装软件

**rs1 rs2 **

systemctl stop firewalld
setenforce 0
yum  install httpd  -y
echo  7-3 > /var/www/html/index.html
systemctl start httpd



systemctl stop firewalld
setenforce 0
yum  install httpd  -y
echo  7-4 > /var/www/html/index.html
systemctl start httpd
#curl 验证服务有没有起

代理服务器

systemctl stop firewalld
setenforce 0
yum install  epel-release.noarch -y 
yum install  -y  nginx
systemctl start nginx

yum install keepalived   -y

配置 nginx反向代理负载均衡

vim /etc/nginx/nginx.conf

image.png

两台一样的配置 ,分别验证nginx负载均衡

image.png

image.png

配置 keepalived

脚本模块 image.png

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_01
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script check_down {
	script "/etc/keepaliver/ng.sh"
	interval 1
	weight -30
	fall 3
	rise 2
	timeout 2
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.188
    }
    track_script {
        check_down
    }

}

建脚本 vim /etc/keepalive/ng.sh image.png

从服务器的配置

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_02  #改名字
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script check_down {
	script "/etc/keepaliver/ng.sh"
	interval 1
	weight -30
	fall 3
	rise 2
	timeout 2
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 80    #权重要设置80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.188
    }
    track_script {
        check_down
    }

}
从上也加上脚本
加上执行权限
chmod +x /etc/keepalived/ng.sh

验证

关掉主的nginx服务 先ip a看VIP网卡会不会跳到从上

image.png

systemctl stop nginx

image.png

再用客户机访问 看能否正常访问到页面

image.png

tcpdump -i ens33 -nn host 224.0.0.18 在客户端抓包 image.png