NGINX+KEEPALIVED | 一文搞懂NG+KL负载均衡高可用架构的实操教程(详细)

在这里插入图片描述

文章目录

  • NGINX+KEEPALIVED负载均衡高可用架构
    • 为什么需要多节点应用
    • 为什么需要Nginx服务
    • 为什么需要Keepalived服务
    • NG+KL简述
    • 前期准备
    • Linux服务器公共环境配置
    • Server1 NG+KL服务器配置
    • Server2 NG+KL服务器配置
    • Server3 HTTP服务器配置
    • Server4 HTTP服务器配置
    • 运行测试用例

NGINX+KEEPALIVED负载均衡高可用架构

为什么需要多节点应用

当我们只有一台服务器上部署了应用服务时,如果使用规模慢慢扩大,一台服务器的复杂能力肯定会达到极限,这时候如果我们有多台服务器部署着同样的服务,用户访问时可以被较为合理的分发到各个服务器上,提升了系统的负载能力和稳定性;

为什么需要Nginx服务

上面也说了,当使用多节点的时候,N多用户的访问请求如何合理的平均分配到不同应用服务器上,这时候Nginx就是中间的那个协调者,它负责统一入口并进行服务转发。

为什么需要Keepalived服务

起初我们应为担心单应用挂掉,使用了多应用多节点,多节点的出现涉及流量请求转发的问题,这时候Nginx上前去做了负载均衡器。

既然Nginx是一台负载均衡服务器的服务,这台服务器是否稳定或者服务是否会异常停止,这个还真说不来,比如流量过大主机宕了,或者蓝翔挖掘机挖断了电缆(LOL)。

单一Nginx节点可能会出现一些不可预测的问题,所以我们模拟多节点应用服务器,就出现了多Nginx服务器的行为;
但是不可能给用户一堆域名和端口说你访问不了第一个的话访问第二个,所以就需要使用到了虚拟IP的技术VIP;
有了VIP,用户统一访问虚拟IP地址,再由Keepalived进行Nginx主备服务的检测,确保请求流量能够稳定的分发到对应的Nginx服务器上;
一旦Keepalived发现Nginx主服务挂了,就会通过一些机制尝试检测与恢复,当确认无法恢复时将立刻把请求服务转发给Nginx备用机,做到高可用不断线;
当然,两个Nginx服务器最好采用两点中心的策略,不然挖掘机可能一把挖断两台Nginx服务器的电缆。(LOL)

↓↓↓废话少说,接下来我们看看如何实操↓↓↓


NG+KL简述

Nginx + Keepalived 是一种常见的服务器高可用和负载均衡解决方案。

Nginx 是一款轻量级的高性能 Web 服务器、反向代理服务器以及电子邮件(IMAP/POP3)代理服务器。它具有高性能、高并发处理能力和低资源消耗等优点,常用于实现网站的负载均衡、动静分离等功能。

Keepalived 则是一个用于实现服务器高可用性(High Availability)的软件。它通过虚拟 IP 地址(VIP)的方式,监控服务器的状态,当主服务器出现故障时,能够自动将服务切换到备份服务器上,保证服务的连续性和稳定性。

例如,在一个网站架构中,有多台服务器运行 Nginx 来处理用户的请求。通过 Keepalived 配置一个虚拟 IP 地址,用户访问这个虚拟 IP 时,实际上会被动态地分配到正常工作的 Nginx 服务器上。如果某台 Nginx 服务器出现故障,Keepalived 会迅速将虚拟 IP 切换到其他正常的服务器上,用户的访问不会受到影响。

总之,Nginx + Keepalived 的组合可以有效地提高服务器的可靠性和服务的可用性,保障业务的稳定运行。

(附:NG+KL的这种架构可以换成任意的 X + KL的架构做到高可用,X可以是Mysql、Redis、Web服务等等)

前期准备

【4】台Linux服务器,【2】台部署Nginx+Keepalived服务器,【2】台部署http服务;

  • Server1: Nginx+Keepalived主服务 IP:172.16.249.101

  • Server2: Nginx+Keepalived从服务 IP:172.16.249.102

  • Server3: HTTP双活A服务 IP:172.16.249.201

  • Server4: HTTP双活B服务 IP:172.16.249.202

Linux服务器公共环境配置

推荐使用VMware Fusion虚拟机,并采用CentOS7 Mini镜像进行搭建(Server1、2、3、4均需要按此前置,若使用虚拟机,配置好一个直接完整复制虚拟机即可)

  1. 安装CentOS7操作系统

    CentOS-7-x86_64-Minimal-2009.iso

  2. 安装必要包

    yum install -y psmisc net-tools vim wget traceroute
    cd /etc/yum.repos.d/ && mv CentOS-Base.repo CentOS-Base.repo.bak
    wget http://mirrors.aliyun.com/repo/Centos-7.repo
    mv Centos-7.repo CentOS-Base.repoyum clean all
    yum makecache
    yum update -y
    yum upgrade -y
    

    注意这里可能出现403网络问题,如果出现简单的办法就是宿主机直接下载http://mirrors.aliyun.com/repo/Centos-7.repo文件,并通过sftp上传到服务器上进行操作;

  3. 同步时间服务器

    # 安装 ntp
    yum install ntp -y 
    # 同步时间,这里以阿里云3号服务器为例,可以根据需要选择其他服务器
    ntpdate ntp3.aliyun.com  
    # 默认EDT时间 需要切换
    mv /etc/localtime /etc/localtime.bak
    # 切换CST中国上海时间
    ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime# 测试时间是否同步
    date
    
  4. 关闭防火墙

    setenforce 0
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
    cat /etc/selinux/configsystemctl status firewalld.service
    systemctl stop firewalld.service
    systemctl disable firewalld.servicesystemctl stop NetworkManager
    systemctl disable NetworkManager
    

    在这里插入图片描述

Server1 NG+KL服务器配置

  1. 检查DNS和网关Gateway(参考)

    1. cat /etc/resolv.conf # DNS 查看 
    2. traceroute www.baidu.com # 第一行就是自己的网关 
    3. route -n 
    4. ip route show 
    5. cat /etc/sysconfig/network-scripts/ifcfg-ens33 
    6. cat /etc/sysconfig/network 
    7. netstat –r
    
  2. 设置固定IP

    vim /etc/sysconfig/network-scripts/ifcfg-ens33
    # 将BOOTPROTO从dhcp调整为static(静态)
    dhcp => static
    # 文件末尾添加如下
    IPADDR=172.16.249.101 # 固定IP
    GATEWAY=172.16.249.2 # 网关
    NETMASK=255.255.255.0 # 子网掩码
    DNS1=172.16.249.2 # 默认DNS
    DNS2=223.5.5.5 # 公共DNS# 刷新网络服务
    service network restart
    
  3. 安装Nginx

    # 添加Nginx到Yum源
    rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
    # 安装Nginx
    yum install -y nginx
    # 启动Nginx服务
    systemctl start nginx.service
    
  4. 配置Nginx

    vim /etc/nginx/nginx.conf

    user nginx;
    worker_processes auto;
    error_log /var/log/nginx/error.log;
    pid /run/nginx.pid;
    include /usr/share/nginx/modules/*.conf;
    events {worker_connections 1024;
    }
    http {log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;sendfile            on;tcp_nopush          on;tcp_nodelay         on;keepalive_timeout   65;types_hash_max_size 2048;include             /etc/nginx/mime.types;default_type        application/octet-stream;#include /etc/nginx/conf.d/*.conf;upstream ProxyServer {server 172.16.249.201:80 weight=1;server 172.16.249.202:80 weight=1;}server {listen       80 default_server;listen       [::]:80 default_server;server_name  _;# root         /usr/share/nginx/html;# include /etc/nginx/default.d/*.conf;location / {proxy_pass   http://ProxyServer;  index  index.html index.htm; }error_page 404 /404.html;location = /40x.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}
    }
    
    # 重启启Nginx服务
    systemctl start nginx.service
    
  5. 安装Keepalived

    yum install -y keepalived
    
  6. 配置Keepalived

    vim /etc/keepalived/keepalived.conf

    ! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id NginxNode001 # 唯一标识不可重复vrrp_skip_check_adv_addr#vrrp_strict # 不注释无法访问VIPvrrp_garp_interval 0vrrp_gna_interval 0
    }# 检测配置
    vrrp_script check_nginx {script "/etc/keepalived/check_nginx.sh" # 心跳检测脚本,用于检测Nginx服务,如果发现Nginx服务挂了,就立刻重启,如果重启多次后依旧发现起不来,则直接将当期服务器Keepalived节点服务关闭;interval 5 # 心跳检测周期(秒)weight -20 # 脚本检测失败的话 将减少priority优先级 每脚本检测失败后进行权重变更的单位 fall 2 # 检测脚本2次均失败的话,则认为脚本检测失败,进行服务优先级权重值变更rise 1 # 检测脚本1次成功的话,就认为脚本检测成功,不会变更优先级权重值
    }vrrp_instance VI_1 {state MASTER # 节点名称 MASTER/BACKUP 一般不关注,主要做个标识,主备依旧通过priority来控制interface ens33 # 网卡名称virtual_router_id 51 # Keepalived服务集群编号 同号同集群priority 150 # 主备权重优先级 越大优先级越高 默认100 最大的是主advert_int 1 # 主备通讯时间间隔(秒)# 验证类型与密码 主备服务必须使用相同的验证方式与密码才可以正常通讯authentication {auth_type PASSauth_pass 1111}# 添加检测脚本track_script {check_nginx}# 虚拟IP地址,可以设置1个或多个,只要没被使用过的同域IP均可virtual_ipaddress {172.16.249.80172.16.249.90172.16.249.100}
    }
    
  7. 配置心跳检测脚本

    touch /etc/keepalived/check_nginx.sh
    touch /etc/keepalived/check_nginx.log
    chmod 777 /etc/keepalived/check_nginx.sh
    vim /etc/keepalived/check_nginx.sh
    
    #!/bin/bash
    nginxpid=`ps -C nginx --no-header | wc -l`
    if [ $nginxpid -eq 0 ];thensystemctl restart nginxsleep 2echo "$(date): systemctl restart nginx" >> /etc/keepalived/check_nginx.lognginxpid=`ps -C nginx --no-header | wc -l`if [ $nginxpid -eq 0 ];thenkillall keepalivedecho "$(date): killall keepalived" >> /etc/keepalived/check_nginx.logfi
    fi
    

    说明一下,脚本的意思是检测有没有nginx相关的进程,如果没有那么启动nginx服务,启动后等待2秒后再次检测,如果发现依旧没启动起来,那就说明nginx的配置或者服务有问题了,这个时候就需要杀掉keepalived服务进程,将服务转交给其它Keepalived服务节点;

    # 重启keepalived服务
    systemctl restart keepalived.service
    

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

Server2 NG+KL服务器配置

与Server1 NG+KL服务器配置基本相同,只有2、6部分需要做调整,已标注。

  1. 检查DNS和网关Gateway(参考)

    1. cat /etc/resolv.conf # DNS 查看 
    2. traceroute www.baidu.com # 第一行就是自己的网关 
    3. route -n 
    4. ip route show 
    5. cat /etc/sysconfig/network-scripts/ifcfg-ens33 
    6. cat /etc/sysconfig/network 
    7. netstat –r
    
  2. 设置固定IP

    vim /etc/sysconfig/network-scripts/ifcfg-ens33
    # 将BOOTPROTO从dhcp调整为static(静态)
    dhcp => static
    # 文件末尾添加如下
    IPADDR=172.16.249.102 # 固定IP(这里与Server1不同)
    GATEWAY=172.16.249.2 # 网关
    NETMASK=255.255.255.0 # 子网掩码
    DNS1=172.16.249.2 # 默认DNS
    DNS2=223.5.5.5 # 公共DNS# 刷新网络服务
    service network restart
    
  3. 安装Nginx

    # 添加Nginx到Yum源
    rpm -Uvh 
    http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
    # 安装Nginx
    yum install -y nginx
    # 启动Nginx服务
    systemctl start nginx.service
    
  4. 配置Nginx

    vim /etc/nginx/nginx.conf

    user nginx;
    worker_processes auto;
    error_log /var/log/nginx/error.log;
    pid /run/nginx.pid;
    include /usr/share/nginx/modules/*.conf;
    events {worker_connections 1024;
    }
    http {log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;sendfile            on;tcp_nopush          on;tcp_nodelay         on;keepalive_timeout   65;types_hash_max_size 2048;include             /etc/nginx/mime.types;default_type        application/octet-stream;#include /etc/nginx/conf.d/*.conf;upstream ProxyServer {server 172.16.249.201:80 weight=1;server 172.16.249.202:80 weight=1;}server {listen       80 default_server;listen       [::]:80 default_server;server_name  _;# root         /usr/share/nginx/html;# include /etc/nginx/default.d/*.conf;location / {proxy_pass   http://ProxyServer;  index  index.html index.htm; }error_page 404 /404.html;location = /40x.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}
    }
    
    # 重启启Nginx服务
    systemctl restart nginx.service
    
  5. 安装Keepalived

    yum install -y keepalived
    
  6. 配置Keepalived

    ! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id NginxNode002 # 唯一标识不可重复(这里与Server1不同)vrrp_skip_check_adv_addr#vrrp_strict # 不注释无法访问VIPvrrp_garp_interval 0vrrp_gna_interval 0
    }# 检测配置
    vrrp_script check_nginx {script "/etc/keepalived/check_nginx.sh" # 心跳检测脚本,用于检测Nginx服务,如果发现Nginx服务挂了,就立刻重启,如果重启多次后依旧发现起不来,则直接将当期服务器Keepalived节点服务关闭;interval 5 # 心跳检测周期(秒)weight -20 # 脚本检测失败的话 将减少priority优先级 每脚本检测失败后进行权重变更的单位 fall 2 # 检测脚本2次均失败的话,则认为脚本检测失败,进行服务优先级权重值变更rise 1 # 检测脚本1次成功的话,就认为脚本检测成功,不会变更优先级权重值
    }vrrp_instance VI_1 {state MASTER # 节点名称 MASTER/BACKUP 一般不关注,主要做个标识,主备依旧通过priority来控制interface ens33 # 网卡名称virtual_router_id 51 # Keepalived服务集群编号 同号同集群priority 100 # 主备权重优先级 越大优先级越高 默认100 这里是备(这里与Server1不同)advert_int 1 # 主备通讯时间间隔(秒)# 验证类型与密码 主备服务必须使用相同的验证方式与密码才可以正常通讯authentication {auth_type PASSauth_pass 1111}# 添加检测脚本track_script {check_nginx}# 虚拟IP地址,可以设置1个或多个,只要没被使用过的同域IP均可virtual_ipaddress {172.16.249.80172.16.249.90172.16.249.100}
    }
    
  7. 配置心跳检测脚本

    touch /etc/keepalived/check_nginx.sh
    touch /etc/keepalived/check_nginx.log
    chmod 777 /etc/keepalived/check_nginx.sh
    vim /etc/keepalived/check_nginx.sh
    
    #!/bin/bash
    nginxpid=`ps -C nginx --no-header | wc -l`
    if [ $nginxpid -eq 0 ];thensystemctl restart nginxsleep 2echo "$(date): systemctl restart nginx" >> /etc/keepalived/check_nginx.lognginxpid=`ps -C nginx --no-header | wc -l`if [ $nginxpid -eq 0 ];thenkillall keepalivedecho "$(date): killall keepalived" >> /etc/keepalived/check_nginx.logfi
    fi
    

    说明一下,脚本的意思是检测有没有nginx相关的进程,如果没有那么启动nginx服务,启动后等待2秒后再次检测,如果发现依旧没启动起来,那就说明nginx的配置或者服务有问题了,这个时候就需要杀掉keepalived服务进程,将服务转交给其它Keepalived服务节点;

    # 重启keepalived服务
    systemctl restart keepalived.service
    

    在这里插入图片描述

    在这里插入图片描述

Server3 HTTP服务器配置

  1. 检查DNS和网关Gateway(参考)

    1. cat /etc/resolv.conf # DNS 查看 
    2. traceroute www.baidu.com # 第一行就是自己的网关 
    3. route -n 
    4. ip route show 
    5. cat /etc/sysconfig/network-scripts/ifcfg-ens33 
    6. cat /etc/sysconfig/network 
    7. netstat –r
    
  2. 设置固定IP

    vim /etc/sysconfig/network-scripts/ifcfg-ens33
    # 将BOOTPROTO从dhcp调整为static(静态)
    dhcp => static
    # 文件末尾添加如下
    IPADDR=172.16.249.201 # 固定IP
    GATEWAY=172.16.249.2 # 网关
    NETMASK=255.255.255.0 # 子网掩码
    DNS1=172.16.249.2 # 默认DNS
    DNS2=223.5.5.5 # 公共DNS# 刷新网络服务
    service network restart
    
  3. 安装http web服务

    yum -y install httpd
    
  4. 调整显示页面信息

    echo 'HTTP WEB NODE 01' > /usr/share/httpd/noindex/index.html
    
  5. 启动服务

    systemctl start httpd.service
    

    在这里插入图片描述

    在这里插入图片描述

Server4 HTTP服务器配置

  1. 检查DNS和网关Gateway(参考)

    1. cat /etc/resolv.conf # DNS 查看 
    2. traceroute www.baidu.com # 第一行就是自己的网关 
    3. route -n 
    4. ip route show 
    5. cat /etc/sysconfig/network-scripts/ifcfg-ens33 
    6. cat /etc/sysconfig/network 
    7. netstat –r
    
  2. 设置固定IP

    vim /etc/sysconfig/network-scripts/ifcfg-ens33
    # 将BOOTPROTO从dhcp调整为static(静态)
    dhcp => static
    # 文件末尾添加如下
    IPADDR=172.16.249.202 # 固定IP(这里与Server3不同)
    GATEWAY=172.16.249.2 # 网关
    NETMASK=255.255.255.0 # 子网掩码
    DNS1=172.16.249.2 # 默认DNS
    DNS2=223.5.5.5 # 公共DNS# 刷新网络服务
    service network restart
    
  3. 安装http web服务

    yum -y install httpd
    
  4. 调整显示页面信息

    echo 'HTTP WEB NODE 02' > /usr/share/httpd/noindex/index.html # (这里与Server3不同)
    
  5. 启动服务

    systemctl start httpd.service
    

    在这里插入图片描述

运行测试用例

在这里插入图片描述

  1. 在同网段其它机器/宿主机,检查server1、server2、server3、server4服务是否均OK

    # NG 检测
    curl 172.16.249.101:80
    curl 172.16.249.102:80# Web 服务器检测
    curl 172.16.249.201:80
    curl 172.16.249.201:80
    

    在这里插入图片描述

  2. 高可用测试

    开5个终端进行测试

    # VIP
    watch -d -n 1 "curl 172.16.249.80:80"# NG+KL
    watch -d -n 1 "curl 172.16.249.101:80"
    watch -d -n 1 "curl 172.16.249.102:80"# HTTPWEB
    watch -d -n 1 "curl 172.16.249.201:80"
    watch -d -n 1 "curl 172.16.249.202:80"
    
    1. Server1(NG+KL)、Server2(NG+KL)、Server3(HTTPWEB)、Server4(HTTPWEB)服务均正常运行时,我们可以看到:

      # VIP(176.16.249.80/90/100)正常通过Server1的Nginx在进行分发请求;
      # S1(176.16.249.101):正常(主)
      # S2(176.16.249.102):正常(备)
      # S3(176.16.249.201):正常
      # S4(176.16.249.202):正常
      HTTP WEB NODE01
      HTTP WEB NODE02
      HTTP WEB NODE01
      HTTP WEB NODE02
      ...
      

    在这里插入图片描述

    1. Server1(NG+KL) 关闭Nginx与Keepalived服务

      Server2(NG+KL)、Server3(HTTPWEB)、Server4(HTTPWEB)正常,我们可以看到:

      # VIP(176.16.249.80/90/100)正常通过Server2的Nginx在进行分发请求;
      # S1(176.16.249.101):NG\KL服务关闭(主)
      # S2(176.16.249.102):正常(备)
      # S3(176.16.249.201):正常
      # S4(176.16.249.202):正常
      HTTP WEB NODE01
      HTTP WEB NODE02
      HTTP WEB NODE01
      HTTP WEB NODE02
      ...
      

      在这里插入图片描述

    2. Server1(NG+KL) 、Server2(NG+KL)关闭Nginx与Keepalived服务

      Server3(HTTPWEB)、Server4(HTTPWEB)正常,我们可以看到:

      # VIP(176.16.249.80/90/100)请求阻塞(不刷新了)
      # S1(176.16.249.101):NG\KL服务关闭(主)
      # S2(176.16.249.102):NG\KL服务关闭(备)
      # S3(176.16.249.201):正常
      # S4(176.16.249.202):正常# 卡住
      

    在这里插入图片描述

    1. Server1(NG+KL) 关闭Nginx与Keepalived服务

      Server3(HTTPWEB)、Server4(HTTPWEB)正常,

      重启Server2(NG+KL)的Keepalived服务,我们可以看到:

      # VIP(176.16.249.80/90/100)正常通过Server2的Nginx在进行分发请求;
      # S1(176.16.249.101):NG\KL服务关闭(主)
      # S2(176.16.249.102):重启NG\KL服务(备)
      # S3(176.16.249.201):正常
      # S4(176.16.249.202):正常HTTP WEB NODE01
      HTTP WEB NODE02
      HTTP WEB NODE01
      HTTP WEB NODE02
      ...
      

    在这里插入图片描述

    1. Server1(NG+KL) 、Server3(HTTPWEB)、Server4(HTTPWEB)正常,

      重启Server1(NG+KL)的Keepalived服务,我们可以看到:

      # VIP(176.16.249.80/90/100)立刻自动切换到Server1上进行转发(会有一个跳动点)
      # S1(176.16.249.101):重启NG\KL服务(备)
      # S2(176.16.249.102):正常(备)
      # S3(176.16.249.201):正常
      # S4(176.16.249.202):正常HTTP WEB NODE01
      HTTP WEB NODE02
      HTTP WEB NODE01
      HTTP WEB NODE02
      ... 
      

      在这里插入图片描述

The End!



🎉如果对你有所帮助,可以点赞、关注、收藏起来,不然下次就找不到了🎉


【点赞】⭐️⭐️⭐️⭐️⭐️
【关注】⭐️⭐️⭐️⭐️⭐️
【收藏】⭐️⭐️⭐️⭐️⭐️

Thanks for watching.
Kenny

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

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

相关文章

使用Keil将STM32部分程序放在RAM中运行

手动分配RAM区域,新建.sct文件,定义RAM_CODE区域,并指定其正确的起始地址和大小。 ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************…

C语言 -- 函数

C语言 -- 函数 1. 函数的概念2. 库函数2.1 标准库和头文件2.2 库函数的使用方法2.2.1 功能2.2.2 头文件包含2.2.3 实践2.2.4 库函数文档的一般格式 3. 自定义函数3.1 函数的语法形式3.2 函数的举例 4. 形参和实参4.1 实参4.2 形参4.3 实参和形参的关系 5. return 语句6. 数组做…

Element中的消息提示组件Message和弹框组件MessageBox

简述:在 Element UI 中,Message和MessageBox都是比较常用的组件,Message用来提示消息,而MessageBox是一个用于创建模态对话框的组件。它可以用于在页面上快速展示信息、警告或错误提示,而不会阻止用户的其他操作。简单…

116-基于5VLX110T FPGA FMC接口功能验证6U CPCI平台

一、板卡概述 本板卡是Xilinx公司芯片V5系列芯片设计信号处理板卡。由一片Xilinx公司的XC5VLX110T-1FF1136 / XC5VSX95T-1FF1136 / XC5VFX70T-1FF1136芯片组成。FPGA接1片DDR2内存条 2GB,32MB Nor flash存储器,用于存储程序。外扩 SATA、PCI、PCI expres…

【期末复习】数据库系统概论(附带考点汇总)

第1章.绪论 目录 第1章.绪论1.1. 数据库系统概述1.1.1.基本概念1.1.2.产生和发展 1.2.概念模型1.2.1.三种模型1.2.2.概念模型1.2.3.关系模型 1.3.数据库系统结构1.3.1三级模式结构1.3.2.两级映像与数据独立性 第2章.关系型数据库2.1.关系2.2.关系操作2.2.1.基本关系操作2.2.2.关…

SALOME源码分析:View Model

作为一款开源的CAx(CAD/CAE/CAM)软件集成平台,为了实现各个Module支持不同的数据显示与交互方案,出于扩展性的考虑,SALOME引入了View Model,用以支持OpenGL、OCC、VTK、ParaView、Qwt等数据显示与交互实现。 本文将以OCCViewer、…

昇思25天学习打卡营第16天|Diffusion扩散模型

导入必要的库函数 import math from functools import partial %matplotlib inline import matplotlib.pyplot as plt from tqdm.auto import tqdm import numpy as np from multiprocessing import cpu_count from download import downloadimport mindspore as ms import mi…

Python基于卷积神经网络分类模型(CNN分类算法)实现时装类别识别项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 在深度学习领域,卷积神经网络(Convolutional Neural Networks, CNNs&#xff0…

【架构-20】死锁

什么是死锁? 死锁(Deadlock)是指两个或多个线程/进程在执行过程中,由于资源的互相占用和等待,而陷入一种互相等待的僵局,无法继续往下执行的情况。 产生死锁的四个必要条件: (1)互斥条件(Mutual Exclusion):至少有一个资源是非共享…

Elasticsearch:结合稀疏、密集和地理字段

作者:来自 Elastic Madhusudhan Konda 如何以自定义方式组合多个稀疏、密集和地理字段 Elasticsearch 是一款强大的工具,可用于近乎实时地搜索和分析数据。作为开发人员,我们经常会遇到包含各种不同字段的数据集。有些字段是必填字段&#x…

relation-graph——数据组装+鼠标移入后的详情(自定义插槽的用法)——js技能提升

最近在写后台管理系统的时候,遇到一个需求,就是给我一些节点,让我渲染到页面上,效果图如下: 之前写过一篇文章关于relation-graph关系图组件http://t.csdnimg.cn/7BGYm的用法 还有一篇关于relation-graph——实现右击…

回溯算法-以单位人事管理系统为例

1.回溯算法介绍 1.来源 回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。 用回溯算法解决问题的一般步骤: 1、 针对所给问题,定义问题的解空间,它至少包含问题的一个(最优)解。 2 、确定易于搜…

rk3568 OpenHarmony 串口uart与电脑通讯开发案例

一、需求描述: rk3568开发板运行OpenHarmony4.0,通过开发板上的uart串口与电脑进行通讯,相互收发字符串。 二、案例展示 1、开发环境: (1)rk3568开发板 (2)系统:OpenHar…

又一个被催的相亲对象!家庭不和,是因为智慧不够?——早读(逆天打工人爬取热门微信文章解读)

你相亲过吗? 引言Python 代码第一篇 洞见 家庭不和,是因为智慧不够第二篇 口播结尾 引言 yue 昨天居然忘记了 正事:拍视频j 居然忘记了 别着急 让我找下理由(借口) 前天我妈给我介绍了个相亲对象 推给我了她的微信 我…

网络攻防——kali操作系统基本使用

1.阅读前的声明 本文章中生成的木马带有一定的攻击性,使用时请遵守网络安全相关的法律法规(恶意攻击操作系统属于违法行为)。 2.环境安装 生成木马主要需要如下工具:kali操作系统,VMware15(搭建kali操作…

Beyond Compare 解锁版下载及安装教程 (文件和文件夹比较工具)

前言 Beyond Compare 是一款功能强大的文件和文件夹比较工具。它支持文件夹比较、文件夹合并与同步、文本比较、表格比较、图片比较、16进制比较、注册表比较、版本比较等多种功能。通过 Beyond Compare,您可以轻松调查文件和文件夹之间的不同之处,并使…

【Qwen2部署实战】探索Qwen2-7B:通过FastApi框架实现API的部署与调用

系列篇章💥 No.文章1【Qwen部署实战】探索Qwen-7B-Chat:阿里云大型语言模型的对话实践2【Qwen2部署实战】Qwen2初体验:用Transformers打造智能聊天机器人3【Qwen2部署实战】探索Qwen2-7B:通过FastApi框架实现API的部署与调用4【Q…

电脑恢复技巧:如何在 Windows 10 中恢复删除的文件夹

丢失文件和文件夹是一件非常可怕的事情,尤其是当你不知情的情况下删除它们时。别撒谎。我们知道你也经历过这种情况,而且你也知道我们在说什么! 我们都曾有过这样的经历,而且大多数人很快就会再次经历。在 Windows 中&#xff0c…

从内外参推导IPM变换方程及代码实现(生成AVM环视拼接图)

一、前言 最近想实现AVM拼接,看了不少博客和论文,不过比较愚钝,一直没能很好理解原理,尤其是怎么在实现时把下文式1与式2中Z1和Z2消除的,所以严谨的推导了一下对应的公式,如有不对,水平有限&am…

Qt Group与华为合作开发OpenHarmony版本,打造无缝跨设备操作系统

在华为开发者大会2024上,跨平台软件开发和质量保证工具的领先供应商 Qt Group(Nasdaq, Helsinki: QTCOM)荣幸地宣布成为OpenHarmony生态系统合作伙伴。这是继近几年华为采用Qt开发框架和自动化测试工具Squish的商业许可后,Qt Grou…