Keepalived + LVS 搭建高可用负载均衡及支持 Websocket 长连接

news2025/1/5 8:15:57

一、项目概述

本教程旨在助力您搭建一个基于 Keepalived 和 LVS(Linux Virtual Server)的高可用负载均衡环境,同时使其完美适配 Websocket 长连接场景,确保您的 Web 应用能够高效、稳定地运行,从容应对高并发访问,并且在服务器遭遇故障时实现自动无缝切换,为服务的连续性保驾护航。

二、环境准备

  1. 服务器规划
    • 准备至少 3 台服务器,推荐选用 CentOS 7 或以上版本的 Linux 操作系统,且在安装系统时确保已勾选基础网络工具与开发包。本教程中服务器角色及对应示例 IP 地址分配如下:
      • LVS 负载均衡器(MASTER):192.168.1.100
      • LVS 负载均衡器(BACKUP):192.168.1.101
      • Real Server 1:192.168.1.102
      • Real Server 2:192.168.1.103
      • VIP:192.168.1.200
    • 所有服务器需处于同一局域网内,务必保证相互之间能够通过 ping 命令顺畅连通,并且具备访问互联网的能力,用于后续软件安装及更新操作。
  2. 网络配置检查与调整
    • 在每台服务器上,执行 ifconfig 或 ip addr show 命令查看网卡配置信息,确保网卡正常工作且 IP 地址配置准确无误。例如,在 LVS MASTER 服务器上运行 ip addr show eth0(假设网卡名为 eth0),应得到类似如下输出:
      2: eth0: <BROADCAST,MULTICAST,UP,LOWER_RETURNS> mtu 1500 qid 10000
          link/ether 00:11:22:33:44:55
          inet 192.168.1.100/24 brd 192.168.1.255 scope global noprefixroute eth0
          valid from Sat, 01 Jan 2022 00:00:00 UTC valid until Sun, 01 Jan 2023 00:00:00 UTC
    • 若发现网络配置有误,使用 vi /etc/sysconfig/network-scripts/ifcfg-eth0(以 eth0 为例)编辑网卡配置文件,按需修改 IP 地址、子网掩码、网关等参数,修改完成后执行 systemctl restart network 重启网络服务,使新配置生效。 

三、安装软件

  1. 在 LVS 负载均衡器(MASTER 和 BACKUP)以及 Real Server 上,打开终端,通过 yum 命令安装所需软件:
    • yum install -y ipvsadm keepalived
    • ipvsadm:这是配置 LVS 规则的核心工具,利用它能够灵活地定义虚拟服务器、关联 Real Server 并指定负载均衡算法,是构建 LVS 功能体系的关键组件。
    • keepalived:一方面,它基于 VRRP(Virtual Router Redundancy Protocol)协议提供高可用保障,能将多台物理路由器虚拟化为一个 “虚拟路由器”,使得在主路由器出现故障时,备份路由器可迅速自动接管服务,有效规避单点故障风险;另一方面,它能够与 LVS 紧密协作,实现对 Real Server 的健康监测以及根据服务器状态动态调整负载均衡策略。

四、配置 Keepalived + Lvs(MASTER)节点

  1. 打开 Keepalived 的配置文件:vi /etc/keepalived/keepalived.conf,该文件是 Keepalived 的核心配置枢纽,所有与高可用、负载均衡及相关辅助功能的设定均在此文件内完成。
  2. 进行如下配置:
    global_defs {
        notification_email {
            your_email@example.com  # 务必替换为您真实有效的报警邮箱地址,其用途在于接收 Keepalived 运行过程中的异常报警信息,诸如主备切换失败、健康检查持续报错等突发状况。一旦出现问题,Keepalived 会自动向此邮箱发送详细通知邮件,以便系统管理员能够及时察觉并着手处理。
        }
        notification_email_from keepalived@localhost
        smtp_server 127.0.0.1
        smtp_connect_timeout 30
        router_id LVS1  # 路由器标识,在当前搭建的这个高可用环境所构成的 VRRP 域内,MASTER 和 BACKUP 的 router_id 必须不同,此处设定为 LVS1,它用于在 VRRP 协议数据包中标识不同的路由器实例,从而确保节点间能够准确无误地相互识别。
    }
    
    vrrp_instance VI_1 {
        state MASTER  # 明确此节点在 VRRP 实例中扮演“主”的角色,意味着在通常运行状态下,它将掌控对外提供服务的虚拟 IP(VIP),并肩负起主要的负载均衡重任。
        interface eth0  # 根据服务器实际使用的网卡名称进行修改,该参数指定 Keepalived 用于收发 VRRP 数据包的网卡接口,务必确保与所在服务器的实际网卡保持一致,否则整个系统将无法正常运转。
        virtual_router_id 51  # 虚拟路由 ID,在同一个 VRRP 域内,MASTER 和 BACKUP 的此项 ID 必须严格一致,它用于唯一标识一组虚拟路由器,取值范围通常为0 - 255,不同的 ID 代表不同的虚拟路由群组。
        priority 100  # 优先级数值,在主备节点选举过程中起着决定性作用,MASTER 的优先级必须高于 BACKUP,数值越大优先级越高,本示例中设为 100,如此一来,当主节点遭遇故障时,备份节点将依据优先级高低判断是否接管服务。
        advert_interval 1
        authentication {
            type PASS
            password 1111  # 密码,MASTER 和 BACKUP 需确保一致,其主要功能是用于 VRRP 节点间的认证,确保只有授权的节点才能参与虚拟路由器的运作,防止非法节点接入。
        }
        virtual_ipaddress {
            192.168.1.200/24  # 虚拟 IP(VIP),依据实际网络网段进行合理设置,这是面向外部客户端提供服务的统一 IP 地址,客户端将通过访问此 IP 来获取相应服务。在主节点正常运行期间,此 VIP 会绑定在主节点的网卡之上,一旦主节点发生故障,VIP 将自动无缝切换至备份节点的网卡上。
        }
    }
    
    virtual_server 192.168.1.200 80 {  # VIP 和端口,与上述设置紧密对应,在此处定义了一个虚拟服务器,明确了对外服务的 IP 地址与端口号,后续的 Real Server 将挂载在此虚拟服务器之下,依照负载均衡策略接收并处理分发而来的请求。
        lb_algo wrr  # 加权轮询调度算法,您可根据实际需求进行灵活切换,如选用 rr(轮询)、sh(源地址散列)等其他算法。wrr 算法的优势在于能够依据 Real Server 的权重值来合理分配请求,不同权重的 Real Server 获取请求的机会不尽相同,权重越大则机会越多,相较于简单的轮询算法,它能更为精准地适配不同性能的 Real Server,进而实现更为优化、合理的负载分配效果。
        lb_kind DR  # 工作模式,DR(Direct Routing)模式在性能表现上较为出色,当然您也可根据实际情况选择 NAT 等其他模式。在 DR 模式下,客户端请求的数据包将直接发送至 Real Server,而响应数据包同样会直接返回客户端,LVS 负载均衡器在此过程中仅负责高效处理请求的分发与调度工作,极大地减轻了自身负担,显著提升了整体系统性能。不过,采用 DR 模式需要对 Real Server 进行一系列特殊配置(如设置 VIP 等操作),后续步骤会详细阐述。
        persistence_timeout 3600  # 持久连接超时时间,单位为秒,考虑到 Websocket 长连接的特性,特意将此值设置得较长,您也可根据实际业务场景进行适当调整。该参数决定了源自同一源 IP 的请求在多长时间内会被持续转发至同一个 Real Server,对于 Websocket 长连接而言,充足的超时时间能够确保在连接存续期间,客户端后续发出的所有请求都能被精准导向最初建立连接的 Real Server,有效避免因负载均衡调度而意外导致连接中断的情况发生。
        persistence_granularity SOURCE_IP  # 以源 IP 实现持久连接,这一设置能够切实确保同一客户端的请求始终被定向到同一 Real Server。其原理是基于客户端的源 IP 进行哈希运算,只要源 IP 保持不变,后续所有请求都将被稳定送达最初建立连接的那台 Real Server,这对于维护 Websocket 长连接的稳定性起着举足轻重的作用。
        protocol TCP
    
        real_server 192.168.1.102 80 {  # Real Server 1 的 IP 和端口
            weight 1
            TCP_CHECK {
                connect_timeout 3
                nb_get_replies 3
                delay_loop 5
            }
        }
        real_server 192.168.1.103 80 {  # Real Server 2 的 IP 和端口
            weight 1
            TCP_CHECK {
                connect_timeout 3
                nb_get_replies 3
                delay_loop 5
            }
        }
    }
  3. 保存并退出配置文件。
  4. 开启路由转发功能:
    • 编辑 /etc/sysctl.conf 文件:vi /etc/sysctl.conf
    • 添加或确认以下内容:
      net.ipv4.ip_forward = 1
  5. 重启 Keepalived 服务:
    • 执行命令 systemctl restart keepalived,使 Keepalived 按照新配置运行,此时主节点会依据新配置尝试绑定虚拟 IP(VIP),并基于设定好的调度算法、健康检查机制等对 Real Server 进行负载均衡调度。

五、配置 Keepalived + Lvs(BACKUP)节点

  1. 同样打开 Keepalived 的配置文件:vi /etc/keepalived/keepalived.conf
  2. 修改如下内容:
    global_defs {
        notification_email {
            your_email@example.com  # 替换为真实的报警邮箱地址,作用与 MASTER 节点配置相同。
        }
        notification_email_from keepalived@localhost
        smtp_server 127.0.0.1
        smtp_connect_timeout 30
        router_id LVS2  # 更改为与 MASTER 不同的标识,此处设为 LVS2,用于清晰区分主备节点。
    }
    
    vrrp_instance VI_1 {
        state BACKUP  # 表明此节点在 VRRP 实例中的角色为“备份”,正常运行时不承担对外服务职责,处于待命状态,一旦主节点出现故障,将立即接管服务。
        interface eth0  # 根据实际网卡名修改,需与 MASTER 节点对应网卡保持一致。
        virtual_router_id 51  # 与 MASTER 一致,同属一个虚拟路由组。
        priority 99  # 低于 MASTER 的优先级,本示例中设为 99,当主节点发生故障且此备份节点在剩余备份节点中优先级最高时,将顺利接管主节点工作,成为新的主节点。
        advert_interval 1
        authentication {
            type PASS
            password 1111  # 与 MASTER 一致,用于节点间认证。
        }
        virtual_ipaddress {
            192.168.1.200/24  # 与 MASTER 一致的 VIP,当主节点故障时,此 VIP 将自动切换到该备份节点网卡上。
        }
    }
    
    virtual_server 192.168.1.200 80 {  # VIP 和端口,与上面设置对应,配置与 MASTER 节点类似,确保备份节点也能准确无误地对 Real Server 进行负载均衡调度。
        lb_algo wrr  # 加权轮询调度算法,可按需更换,如 rr(轮询)、sh(源地址散列)等。
        lb_kind DR  # 工作模式,DR 模式性能较好,也可按需选 NAT 等。
        persistence_timeout 3600  # 持久连接超时时间,单位秒,为适应 Websocket 长连接设长些,可调整。
        persistence_granularity SOURCE_IP  # 以源 IP 实现持久,确保同一客户端请求到同一 Real Server。
        protocol TCP
    
        real_server 192.168.1.102 80 {  # Real Server 1 的 IP 和端口
            weight 1
            TCP_CHECK {
                connect_timeout 3
                nb_get_replies 3
                delay_loop 5
            }
        }
        real_server 192.168.1.103 80 {  # Real Server 2 的 IP 和端口
            weight 1
            TCP_CHECK {
                connect_timeout 3
                nb_get_replies 3
                delay_loop 5
            }
        }
    }
  3. 保存并退出配置文件。
  4. 开启路由转发功能:
    • 编辑 /etc/sysctl.conf 文件:
    • 添加或确认以下内容:
      net.ipv4.ip_forward = 1
    • 执行命令使配置生效:sysctl -p
  5. 重启 Keepalived 服务:
    • 执行命令 systemctl restart keepalived,使 Keepalived 按照新配置运行,此时备份节点会依据新配置进入监听状态,时刻准备在主节点出现故障时接管服务,保障整个高可用负载均衡系统的正常运作。

六、配置 Real Server

  1. 在 Real Server(以 192.168.1.102 和 192.168.1.103 为例)上:
    • 编辑 /etc/sysctl.conf 文件:
# 防止 ARP 冲突,调整 ARP 相关内核参数
net.ipv4.arp_ignore = 1
net.ipv4.arp_announce = 2
  • net.ipv4.arp_ignore = 1:当设置为 1 时,若接收到 ARP 请求,且目标 IP 为本地配置的 VIP,此时仅当请求的源 IP 与本机某一网卡的 IP 处于同一网段时,才会响应 ARP 请求,这样能够有效规避不必要的 ARP 响应,最大程度防止 ARP 冲突的发生。
  • net.ipv4.arp_announce = 2:设置为 2 时,当本机向外发送 ARP 宣告时,将始终使用本机的真实 IP 地址,而非 VIP,以此确保 ARP 信息的准确性与一致性,避免网络中的其他设备出现混淆情况。
  • 执行命令使配置生效:sysctl -p
  • 编写设置 VIP 的脚本,如 vi /etc/init.d/lvsrs,内容如下:
#!/bin/bash
VIP=192.168.1.200
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 256.256.256.255 up
/sbin/route add -host $VIP dev lo:0
  • 该脚本的目的在于在 Real Server 的本地环回接口(0) 上设置 VIP。在 LVS 的 DR 模式下,Real Server 需要能够精准识别并妥善处理发往 VIP 的请求,将 VIP 绑定至本地环回接口,既便于统一管理,又能有效避免与真实网卡 IP 发生冲突。首先明确定义 VIP 的值,随后通过 ifconfig 命令将 VIP 绑定到 lo:0 接口,并设置相应的广播地址和子网掩码,最后利用 route 命令添加一条指向 VIP 的的路由,确保发往 VIP 的数据包能够在本地得到有效处理。
  • 赋予脚本执行权限:chmod +x /etc/init.d/lvsrs
  • 启动脚本:/etc/init.d/lvsrs start

七、测试

在客户端上

  • 使用 ping 命令测试能否连通虚拟 IP(VIP),例如在一台与搭建环境处于同一局域网且能正常访问网络的客户端机器上执行:
ping 192.168.1.200
  • 如果能收到来自 VIP 的正常响应(不断显示类似 Reply from 192.168.1.200: bytes=32 time<1ms TTL=64 的信息),则说明客户端到 VIP 的网络链路是通畅的,初步表明负载均衡前端配置没有问题。

在 LVS 负载均衡器(MASTER 和 BACKUP)上

  • 使用 ping 命令分别测试能否连通各个 Real Server 的 IP 地址,例如在 MASTER 节点上执行:
ping 192.168.1.102
ping 192.168.1.103
  • 若都能正常收到回应,表明负载均衡器与后端 Real Server 之间的网络连接正常,不存在物理层面的网络故障,这是后续负载均衡功能能正常发挥的基础条件。

验证虚拟 IP(VIP)绑定情况

  1. 在 LVS 负载均衡器(MASTER)上
    • 执行 ip addr show 命令查看网卡信息,检查 VIP 是否正确绑定在 MASTER 节点的网卡上,正常情况下应该能看到类似如下输出(假设网卡名为 eth0):
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_RETURNS> mtu 1500 qid 10000
    link/ether 00:11:22:33:44:55
    inet 192.168.1.100/24 brd 192.168.1.255 scope global noprefixroute eth0
    inet 192.168.1.200/24 brd 192.168.1.255 scope global secondary noprefixroute eth0
  • 其中 inet 192.168.1.200/24 这一行就表示 VIP 已成功绑定在该网卡上,这意味着 MASTER 节点已经做好准备利用此 VIP 接收客户端请求并进行负载均衡处理。

  1. 手动停止 MASTER 节点的 Keepalived 服务(仅用于测试 VIP 切换)
    • 在 MASTER 节点上执行 systemctl stop keepalived 命令。
    • 接着迅速在 LVS 负载均衡器(BACKUP)上再次执行 ip addr show 命令查看网卡信息,此时应该能看到 VIP 已经切换绑定到 BACKUP 节点的网卡上,类似如下输出(同样假设网卡名为 eth0):
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_RETURNS> mtu 1500 qid 10000
    link/ether 00:11:22:33:44:55
    inet 192.168.1.101/24 brd 192.168.1.255 scope global noprefixroute eth0
    inet 192.168.1.200/24 brd 192.168.1.255 scope global secondary noprefixroute eth0
  • 这就验证了 Keepalived 的高可用切换机制生效,VIP 能够在主节点故障时自动迁移到备份节点,保障服务持续可用。完成测试后,可以在 MASTER 节点上再次执行 systemctl start keepalived 恢复正常状态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2269571.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

汽车损坏识别检测数据集,使用yolo,pasical voc xml,coco json格式标注,6696张图片,可识别11种损坏类型,识别率89.7%

汽车损坏识别检测数据集&#xff0c;使用yolo&#xff0c;pasical voc xml&#xff0c;coco json格式标注&#xff0c;6696张图片&#xff0c;可识别11种损坏类型损坏&#xff1a; 前挡风玻璃&#xff08;damage-front-windscreen &#xff09; 损坏的门 &#xff08;damaged-d…

西门子1200PLC和三菱FX3系列PLC接线方法

1、西门子1200PLC接线方法。* 2、从三菱官方手册查询得知&#xff0c;S/S公共端有两种接法&#xff0c;但是为了与西门子1200接法保持一致&#xff0c;所以也建议采用S/S公共点0V的接法。 **【总结】 三菱输入端采用公共点接0V接法建议提升至公司内部标准规范&#xff1a; …

一文理清JS中获取盒子宽高各方法的差异

前言 这段时间在研究一个反爬产品&#xff0c;环境检测用到了很多个盒子宽高取值方法&#xff0c;如window.outerWidth、window.screen.availWidth&#xff0c;各个方法取值结果不大相同&#xff0c;在此记录下遇到的方法。 各宽方法区别 这里就讲解下各宽度方法的区别&…

AWVS安装使用教程

一、AWVS工具介绍及下载 AWVS工具介绍 AWVS&#xff08;Acunetix Web Vulnerability Scanner&#xff09;是一款知名的网络漏洞扫描工具&#xff0c;它通过网络爬虫测试你的web站点&#xff0c;检测流行安全漏洞&#xff0c;可以检查SQL注入漏洞&#xff0c;也可以检查跨站脚…

用Python操作字节流中的Excel文档

Python能够轻松地从字节流中加载文件&#xff0c;在不依赖于外部存储的情况下直接对其进行读取、修改等复杂操作&#xff0c;并最终将更改后的文档保存回字节串中。这种能力不仅极大地提高了数据处理的灵活性&#xff0c;还确保了数据的安全性和完整性&#xff0c;尤其是在网络…

【LeetCode】928、尽量减少恶意软件的传播 II

【LeetCode】928、尽量减少恶意软件的传播 II 文章目录 一、并查集1.1 并查集 二、多语言解法 一、并查集 1.1 并查集 先把普通点, build 并查集遍历每个源头点, 找源头点附近的点所在的集合, 传染该集合拯救节点 3.1 若该节点 所在集合, 从未被感染过, 则开始感染 3.2 若该节…

(NDSS2024)论文阅读——仅低质量的训练数据?用于检测加密恶意网络流量的稳健框架

文章基本信息 作者&#xff1a;Yuqi Qing et al. &#xff08;清华大学李琦团队&#xff09; 代码 文章 摘要 存在问题&#xff1a;收集包含足够数量的带有正确标签的加密恶意数据的训练数据集是具有挑战性的&#xff0c;当使用低质量的训练数据训练机器学习模型时&#xff…

如何将CSDN文章 导出为 PDF文件

一、首先&#xff0c;打开我们想要导出为 PDF格式的 CSDN文章&#xff0c;以下图为例。 二、按 F12 调出浏览器调式模式后&#xff0c;选择 控制台 三、在控制台处粘贴代码 代码&#xff1a; (function(){ use strict;var articleBox $("div.article_content"…

YApi接口管理平台本地搭建方法介绍

YApi是一个免费开源的API管理平台&#xff0c;开发人员可用它来管理、调试接口&#xff0c;并且提供了API文档管理和测试功能&#xff0c;具有友好的UI页面&#xff0c;本文介绍Linux环境如何安装部署YApi接口管理平台。 目录 1 环境准备2 安装部署2.1 安装nodejs2.2 安装 Mong…

案例分析-采样率对模拟链路的带宽的影响

目录 问题来源: 情况分析: 总结 问题来源: 在进行模拟带宽调整时,发现设计值 与实测值,不一样,就这一问题,进行详细分析。 情况分析: 在本项目中,采用巴特沃兹四阶滤波器,设计带宽350M,改滤波器设计可以采用fiter solution工具进行设计,实测值仅仅260M,因此针…

Huggingface Trending!可控人物图像生成统一框架Leffa,可精确控制虚拟试穿和姿势转换!

今天给大家介绍一个Huggingface上虚拟试穿的热门项目Leffa&#xff0c;Leffa是一个可控人物图像生成的统一框架&#xff0c;可以精确操纵外观&#xff08;即虚拟试穿&#xff09;和姿势&#xff08;即姿势转换&#xff09;。从效果看生成效果很不错&#xff01; 相关链接 论文&…

memcached的基本使用

memcached是一种基于键值对的内存数据库&#xff0c;一般应用于缓存数据&#xff0c;提高数据访问速度&#xff0c;减轻后端数据库压力。 安装 这里以Ubuntu为例&#xff0c;其他系统安装方法请看官方文档。 sudo apt-get update sudo apt-get install memcached启动 memca…

ROS话题通信

1 .理论模型 话题通信实现模型是比较复杂的&#xff0c;该模型如下图所示,该模型中涉及到三个角色: ROS Master (管理者)Talker (发布者)Listener (订阅者) ROS Master 负责保管 Talker 和 Listener 注册的信息&#xff0c;并匹配话题相同的 Talker 与 Listener&#xff0c;…

经验证:将数据从索尼传输到Android的 4 种方法

概括 像Android Galaxy S20 这样的新型Android智能手机很酷&#xff0c;但除了将数据从索尼传输到Android之外。众所周知&#xff0c;旧的索尼手机上存储着大量的文件&#xff0c;因此将数据从旧的索尼手机传输到新的Android手机非常重要。为了解决这个问题&#xff0c;我们做…

VITUREMEIG | AR眼镜 算力增程

根据IDC发布的《2024年第三季度美国AR/VR市场报告》显示&#xff0c;美国市场AR/VR总出货量增长10.3%。其中&#xff0c;成立于2021年的VITURE增长速度令人惊艳&#xff0c;同比暴涨452.6%&#xff0c;成为历史上增长最快的AR/VR品牌。并在美国AR领域占据了超过50%的市场份额&a…

JavaSpring AI与阿里云通义大模型的集成使用Java Data Science Library(JDSL)进行数据处理

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c; 忍不住分享一下给大家。点击跳转到网站 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把…

git reset --hard(重置到当前提交,所有未提交的更改都会被永久丢弃)

git reset --hard 是一个强大的命令&#xff0c;它会将你的工作目录、暂存区和当前分支的 HEAD 指针重置到指定的提交状态&#xff0c;所有未提交的更改都会被永久丢弃。因此&#xff0c;使用这个命令时需要非常小心。 基本用法 重置到当前提交&#xff08;丢弃所有未提交的更…

基于单片机智能水产养殖系统设计(论文+源码)

1 系统方案设计 根据系统设计需求&#xff0c;对智能水产养殖系统总体方案展开详细设计。如图2.1所示为系统设计总框架&#xff0c;系统以STM32单片机作为主控制器&#xff0c;通过DS18B20温度传感器、水位传感器、TSW-30浊度传感器、光照传感器实现水产养殖环境中水温、水位、…

基于微信小程序的校园点餐平台的设计与实现(源码+SQL+LW+部署讲解)

文章目录 摘 要1. 第1章 选题背景及研究意义1.1 选题背景1.2 研究意义1.3 论文结构安排 2. 第2章 相关开发技术2.1 前端技术2.2 后端技术2.3 数据库技术 3. 第3章 可行性及需求分析3.1 可行性分析3.2 系统需求分析 4. 第4章 系统概要设计4.1 系统功能模块设计4.2 数据库设计 5.…

Mysql学习笔记之约束

1.简介 MySQL中的约束用于定义表中数据的规则&#xff0c;以确保数据的准确性和完整性。以保证数据表中数据的有效性、正确性和完整性。 2.约束分类 在mysql中约束分类如下&#xff1a; 约束说明关键字主键约束每个表只能有一个主键&#xff1b;主键的值必须唯一&#xff0…