【Spring Cloud系统】- 轻量级高可用工具Keepalive详解

【Spring Cloud系统】- 轻量级高可用工具Keepalive详解

文章目录

  • [【Spring Cloud系统】- 轻量级高可用工具Keepalive详解](#【Spring Cloud系统】- 轻量级高可用工具Keepalive详解)
    • 一、概述
    • 二、Keepalive分类
      • [2.1 TCP的keepalive](#2.1 TCP的keepalive)
      • [2.2 HTTP的keep-alive](#2.2 HTTP的keep-alive)
      • [2.3 TCP的 KeepAlive 和 HTTP的 Keep-Alive区别](#2.3 TCP的 KeepAlive 和 HTTP的 Keep-Alive区别)
    • 三、nginx的keepalive配置
      • [3.1 nginx保持keepalive需做那些事情](#3.1 nginx保持keepalive需做那些事情)
      • [3.2 nginx的文件配置](#3.2 nginx的文件配置)

一、概述

Keepalive是Linux下一个轻量级高可用解决方案。高可用(High Avaliability简称HA)就是主机的冗余和接管。

基本功能:心跳检测、资源接管、检测集群中的服务,在集群结点共享IP地址的所有者。

Keepalive主要是通过路由冗余来实现高可用功能,配置简单,只需要一个配置文件即可完成。

Keepalive起初是为 LVS(Liunx Virtual Server虚拟的服务器集群负载均衡系统)设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模型的第三、第四层、第五层交换机制检测每个服务节点的状态,如果某个服务器节点出现异常,或者工作出现故障,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是自动完成的,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点。

二、Keepalive分类

KeepAlive 分为TCP的 KeepAlive 和 HTTP的 Keep-Alive,两者是完全不同的概念,不能混为一谈。

2.1 TCP的keepalive

  • 侧重在保持客户端和服务端的连接,一方会不定期发送心跳包给另一方,当一方挂掉的时候,没有挂掉的一方会定时发送几次心跳包,如果间隔发送几次,对方都返回的是RST,而不是ACK,那么就释放当前链接。
  • TCP的keepalive 就是查看客户端和服务端是否都在线,当有一方不在线的时候就释放连接。防止连接一直没有释放,造成服务器资源浪费。

2.2 HTTP的keep-alive

普通的http连接是客户端连接上服务端,然后结束请求后,由客户端或者服务端进行http连接的关闭。下次再发送请求的时候,客户端再发起一个连接,传送数据,关闭连接。这个流程反复,但是一旦客户端发送connection:keep-alive头给服务端,且服务端也接受这个keep-alive的话,两边对上暗号,这个连接就可以复用了,一个http处理完之后,另外一个http数据直接从这个连接走了。

HTTP的Keep-alive的作用: 减少新建和断开TCP连接的消耗。

2.3 TCP的 KeepAlive 和 HTTP的 Keep-Alive区别

HTTP的Keep-Alive意图在于短时间内连接复用,希望可以短时间内在同一个连接上进行多次请求/响应。

TCP的KeepAlive机制意图在于保活、心跳,检测连接错误。当一个TCP连接两端长时间没有数据传输时(通常默认配置是2小时),发送keepalive探针,探测链接是否存活。

三、nginx的keepalive配置

3.1 nginx保持keepalive需做那些事情

  1. client到nginx的连接是长连接
  2. nginx到server的连接是长连接

3.2 nginx的文件配置

  1. 配置TCP层keepalive探活机制的三个参数:

    c 复制代码
    #情况1:
    http {
    server {
        listen 127.0.0.1:3306 so_keepalive=on;#开启keepalive探活,探测策略走系统默认
        }
    }
    #情况2:
    http {
        server {
            listen 127.0.0.1:3306 so_keepalive=7m:75s:9;#把空闲时长从系统默认的5分钟改为了7分钟
        }
    }

    其中so_keepalive有如下选择配置:

    c 复制代码
    so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]
    *   on: 开启,探测参数更加系统默认值
    *   off: 关闭
    *   keepidle: 连接空闲等待时间 
    *   keepintvl: 发送探测报文间隔时间
    *   keepcent: 探测报文重试次数

    如果nginx未设置so_keepalive配置,则走系统默认的探活策略

  2. nginx与客户端(一般为浏览器、APP等)保持的长连接进行限制管理:

    c 复制代码
    http {
        keepalive_timeout  120s 120s;
        keepalive_requests 100;
    }
    c 复制代码
    keepalive_timeout timeout [header_timeout];

    第一个参数:客户端连接在服务器端空闲状态下保持的超时值(默认75s);值为0会禁用keep-alive,也就是说默认不启用长连接;第二个参数:响应的header域中设置"Keep-Alive: timeout=time";告知浏览器对长连接的维持时间;

    c 复制代码
    keepalive_requests number;

    keepalive_requests:默认100,某个长连接连续处理请求次数限制,超过次数则该长连接被关闭;如果需要释放某个连接占用的内存,必须关闭该链接,内存不大的情况下,不建议开大该配置;在QPS较高的场景,则有必要加大这个参数;

  3. nginx与上游server保持长连接

    C 复制代码
    http {
        upstream  BACKEND {
            server 127.0.0.1:8000;
            server 127.0.0.1:8001;
            server 127.0.0.1:8002;
            keepalive 300; //空闲连接数   
            keepalive_timeout  120s;//与上游空闲时间
            keepalive_requests 100;//与上游请求处理最大次数
        }
        server{
            listen 8080;
            location /{
                proxy_pass http://BACKEND;
                proxy_http_version 1.1;
                proxu_set_header Connection "";
            }
        }
    }

    keepalive:限制nginx某个worker最多空闲连接数,此处不会限制worker与上游服务长连接的总数;

    keepalive_timeout:nginx与上游长连接最大空闲时间,默认值为60s;

    keepalive_requests:nginx与上游长连接最大交互请求的次数,默认值为100;

相关推荐
javachen__3 分钟前
SpringBoot整合P6Spy实现全链路SQL监控
spring boot·后端·sql
uzong6 小时前
技术故障复盘模版
后端
GetcharZp6 小时前
基于 Dify + 通义千问的多模态大模型 搭建发票识别 Agent
后端·llm·agent
桦说编程6 小时前
Java 中如何创建不可变类型
java·后端·函数式编程
IT毕设实战小研6 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
wyiyiyi7 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
甄超锋8 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat
阿华的代码王国8 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
Jimmy8 小时前
AI 代理是什么,其有助于我们实现更智能编程
前端·后端·ai编程
AntBlack8 小时前
不当韭菜V1.1 :增强能力 ,辅助构建自己的交易规则
后端·python·pyqt