【网络架构】keepalive

news2024/10/7 10:19:56

目录

一、keepalive基础

1.1 作用

1.2 原理

1.3 功能

二、keepalive安装

2.1 yum安装

2.2 编译安装

三、配置文件

3.1 keepalived相关文件

3.2 主配置的组成

3.2.1 全局配置 

3.2.2 配置虚拟路由器

四、实际操作

4.1 lvs+keepalived高可用群集

4.2 keepalived+nginx


一、keepalive基础

1.1 作用

用于解决系统的单点故障

1.2 原理

根据vrrp协议的工作原理,虚拟路由冗余协议

  • 多个路由器组成一个路由器组,即虚拟路由器。
  • 虚拟路由器使用虚拟IP与外网交互,虚拟MAC与内网交互
  • 获得VIP的路由器为主路由器(Master状态),其他路由器为备份路由器(Backup状态)
  • 主路由器每隔 advertisement_intervl 秒(对应图中配置项 advert_int),向组内其他路由器发送通告消息(即心跳),告知本路由器的优先级等信息;
  • 组播的方式发送,组播地址224.0.0.18
  • 只有主路由器会响应ARP请求,组内其他路由器会丢弃ARP请求;
  • 只有主路由器会响应对虚拟IP请求,组内其他路由器会丢弃对虚拟IP的请求;

1.3 功能

- 基于vrrp协议完成地址流动
- 为vip地址所在的节点生成ipvs规则(在配置文件中预先定义) 
- 为ipvs集群的各RS做健康状态检测
- 基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持nginx、haproxy等服务

二、keepalive安装

2.1 yum安装

yum install -y keepalived

2.2 编译安装

yum install gcc curl openssl-devel libnl3-devel net-snmp-devel  -y
# 安装依赖包环境

https://keepalived.org/download.html
# 官网下载安装包
wget https://keepalived.org/software/keepalived-2.2.2.tar.gz


tar  xf   keepalived-2.2.2.tar.gz
cd   keepalived-2.2.2/


./configure --prefix=/usr/local/keepalived
make   &&  make  install

自动生成service文件


#编译好后起不来原因是 没有配置文件 /etc/keepalived/keepalived.conf

mkdir    /etc/keepalived 
cp /usr/local/keepalived/etc/keepalived/keepalived.conf  /etc/keepalived/keepalived.conf 

需要修改配置文件的21行  网卡名称, 否则起不来

sed  -i   's/eth0/ens33/'   

三、配置文件

3.1 keepalived相关文件

  • 软件包名:keepalived

  • 主程序文件:/usr/sbin/keepalived

  • 主配置文件:/etc/keepalived/keepalived.conf

  • 配置文件示例:/usr/share/doc/keepalived/

  • Unit File:/lib/systemd/system/keepalived.service

  • Unit File的环境配置文件:

  • /etc/sysconfig/keepalived CentOS

3.2 主配置的组成

 /etc/keepalived/keepalived.conf配置组成

  • GLOBAL CONFIGURATION

Global definitions(全局配置):定义邮件配置,route_id ,vrrp配置,组播地址 等

  • VRRP CONFIGURATION

VRRP instance(s):定义vrrp协议中的每个vrrp虚拟路由器的规则,基本信息

  • LVS CONFIGURATION(lvs调度服务器的规则设置)

Virtual server group(s)

Virtual server(s):LVS集群的VS和RS

3.2.1 全局配置 

#/etc/keepalived/keepalived.conf 
global_defs {
 notification_email {
 root@localhost
 #keepalived 发生故障切换时邮件发送的目标邮箱,可以按行区分写多个
 root@localhost
  360601212@qq.com 
 }
 notification_email_from keepalived@localhost  
 #发邮件的地址
 smtp_server 127.0.0.1     
 #邮件服务器地址
 smtp_connect_timeout 30   
 #邮件服务器连接timeout
 router_id   LVS01
 #每个keepalived主机唯一标识,建议使用当前主机名,但多节点重名不影响
 vrrp_skip_check_adv_addr  
 #对所有通告报文都检查,会比较消耗性能,启用此配置后,如果收到的通告报文和上一个报文是同一个路由器,则跳过检查,默认值为全检查
vrrp_strict 
#严格遵守VRRP协议,启用此项后以下状况将无法启动服务:1.无VIP地址 2.配置了单播邻居 3.在VRRP版本2中有IPv6地址,开启动此项并且没有配置vrrp_iptables时会自动开启iptables防火墙规则,默认导致VIP无法访问,建议不加此项配置。
 vrrp_garp_interval 0 
 #gratuitous ARP messages 免费ARP报文发送延迟,0表示不延迟
 vrrp_gna_interval 0 
 #unsolicited NA messages (不请自来)消息发送延迟
 vrrp_mcast_group4 225.0.0.18
 #指定组播IP地址范围:224.0.0.0到239.255.255.255,默认值:224.0.0.18 
 vrrp_iptables        
 #此项和vrrp_strict同时开启时,则不会添加防火墙规则,如果无配置vrrp_strict项,则无需启用此项配置
}

3.2.2 配置虚拟路由器

vrrp_instance <STRING> {
#<String>为vrrp的实例名,一般为业务名称
 配置参数
 ......
 }
#配置参数:
state MASTER|BACKUP
#当前节点在此虚拟路由器上的初始状态,状态为MASTER或者BACKUP
interface IFACE_NAME 
#绑定为当前虚拟路由器使用的物理接口,如:eth0,bond0,br0,可以和VIP不在一个网卡
virtual_router_id VRID 
#每个虚拟路由器惟一标识,范围:0-255,每个虚拟路由器此值必须唯一,否则服务无法启动,同属一个虚拟路由器的多个keepalived节点必须相同,务必要确认在同一网络中此值必须唯一
priority 100 
#当前物理节点在此虚拟路由器的优先级,范围:1-254,值越大优先级越高,每个keepalived主机节点此值不同

advert_int 1
#vrrp通告的时间间隔,默认1s


authentication { 
#认证机制
 auth_type AH|PASS   
 #AH为IPSEC认证(不推荐),PASS为简单密码(建议使用)
 auth_pass <PASSWORD> 
 #预共享密钥,仅前8位有效,同一个虚拟路由器的多个keepalived节点必须一样
}
include    /etc/keealived/conf.d/*.conf
virtual_ipaddress { 
#虚拟IP,生产环境可能指定上百个IP地址
 <IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
 192.168.200.100 
 #指定VIP,不指定网卡,默认为,注意:不指定/prefix,默认为/32
 192.168.200.101/24 dev eth1   
 #指定VIP的网卡,建议和interface指令指定的岗卡不在一个网卡
 192.168.200.102/24 dev eth2 label eth2:1 
 #指定VIP的网卡label   ifconfig eth2:1   192.168.200.102/24
}
track_interface { 
#配置监控网络接口,一旦出现故障,则转为FAULT状态实现地址转移
 eth0
 eth1
 …
}

 配置范例:

[root@localhost keepalived]#vim keepalived.conf
global_defs {
   notification_email {
     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_strict   注释严格模式
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
include   /etc/keepalived/conf.d/*.conf  #添加子配置文件


[root@localhost keepalived]#mkdir  conf.d
[root@localhost conf.d]# vim  conf.d/test.conf
vrrp_instance VI_1 {
    state MASTER
    interface ens33   #修改网卡
    virtual_router_id 51  #路由器id 需要主从保持一致
    priority 100   
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    192.168.91.188/24   #设置虚拟ip
    }
}


将配置文件复制到从节点
scp  keepalived.conf    192.168.91.11:/etc/keepalived/
scp  keepalived.conf    192.168.91.11:/etc/conf.d/test.conf


修改配置文件
global_defs {
   notification_email {
     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_strict   注释严格模式
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
include   /etc/keepalived/conf.d/*.conf  #添加子配置文件


vrrp_instance VI_1 {
    state BACKUP       #修改类型为备节点
    interface ens33  
    virtual_router_id 51  #路由器id 需要主从保持一致   不用修改
    priority 80           #优先级调小
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    192.168.91.188/24   #设置虚拟ip
    }
}

四、实际操作

4.1 lvs+keepalived高可用群集

环境配置

主keepalive:192.168.254.10        MASTER

从keepalive:192.168.254.20        SLAVE

web1:192.168.254.30

web2:192.168.254.40

vip:192.168.254.188

客户:192.168.254.50

主keepalive配置

systemctl stop firewalld
setenforce 0

yum install -y ipvsadm keepalived
#安装lvs工具和keepalived

ipvsadm-save > /etc/sysconfig/ipvsadm
vim /etc/keepalived/keepalived.conf

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
   #修改邮箱指向自己(10行)
   smtp_connect_timeout 30
   router_id LVS_01
   #指定服务器名称主备需要不一样(12行)
   vrrp_skip_check_adv_addr
   #vrrp_strict
   #14行需要注释否则服务启动有问题
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER
    #指定服务器类型MASTER为主 BACKUP为备(20行)
    interface ens33
    #修改网卡名称为ens33(21)
    virtual_router_id 10
    #指定虚拟路由器的ID号主备需要一致
    #nopreempt 
    #非抢占模式两个节点都需要配置去掉注释
    priority 100
    #设定优先级数字越大优先级越高,准备需要不一样
    advert_int 1
    #通告间隔(查看是否存活)
    authentication {
        auth_type PASS
        #认证类型
        auth_pass 123456
        #修改验证密码,主备需要一样(27行)
    }
    virtual_ipaddress {
        192.168.254.188
        #指定群集vip地址
    }
}
virtual_server 192.168.254.188 80 {
    delay_loop 6
    #健康间隔时间6秒
    lb_algo rr
    #调度算法轮询
    lb_kind DR
    #lvs模式为DR 
    persistence_timeout 0
    #连接保持时间改为0 否则 无法体现效果
    protocol TCP
    #采用协议
    
 real_server 192.168.254.30 80 {
 #43行修改地址为真实主机地址
        weight 1
        #45行删除
        #节点权重
        TCP_CHECK {
            connect_port 80
            #检查目标端口
            connect_timeout 3
            #连接超时 
            nb_get_retry 3
            #重试次数
            delay_before_retry 3
            #重试间隔时间
        }
    }
 real_server 192.168.254.40 80 {
 #第二个
        weight 1
        TCP_CHECK{
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }


systemctl start keepalived

vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0 

sysctl -p

从keepalive配置

systemctl stop firewalld
setenforce 0

yum install -y ipvsadm keepalived
#安装lvs工具和keepalived

ipvsadm-save > /etc/sysconfig/ipvsadm
vim /etc/keepalived/keepalived.conf

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
   #修改邮箱指向自己(10行)
   smtp_connect_timeout 30
   router_id LVS_02
   #指定服务器名称主备需要不一样(12行)
   vrrp_skip_check_adv_addr
   #vrrp_strict
   #14行需要注释否则服务启动有问题
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP
    #指定服务器类型MASTER为主 BACKUP为备(20行)
    interface ens33
    #修改网卡名称为ens33(21)
    virtual_router_id 10
    #指定虚拟路由器的ID号主备需要一致
    #nopreempt 
    #非抢占模式两个节点都需要配置去掉注释
    priority 80
    #设定优先级数字越大优先级越高,准备需要不一样
    advert_int 1
    #通告间隔(查看是否存活)
    authentication {
        auth_type PASS
        #认证类型
        auth_pass 123456
        #修改验证密码,主备需要一样(27行)
    }
    virtual_ipaddress {
        192.168.254.188
        #指定群集vip地址
    }
}
virtual_server 192.168.254.188 80 {
    delay_loop 6
    #健康间隔时间6秒
    lb_algo rr
    #调度算法轮询
    lb_kind DR
    #lvs模式为DR 
    persistence_timeout 0
    #连接保持时间改为0 否则 无法体现效果
    protocol TCP
    #采用协议
    
 real_server 192.168.254.30 80 {
 #43行修改地址为真实主机地址
        weight 1
        #45行删除
        #节点权重
        TCP_CHECK {
            connect_port 80
            #检查目标端口
            connect_timeout 3
            #连接超时 
            nb_get_retry 3
            #重试次数
            delay_before_retry 3
            #重试间隔时间
        }
    }
 real_server 192.168.254.40 80 {
 #第二个
        weight 1
        TCP_CHECK{
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }


systemctl start keepalived

vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0 

sysctl -p

web1:

systemctl stop firewalld
setenforce 0

yum install -y httpd
echo "web1" > /var/www/html/index.html

ifconfig lo:0 192.168.254.188 netmask 255.255.255.255

vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

sysctl -p

route add -host 192.168.254.188 dev lo:0

web2:

systemctl stop firewalld
setenforce 0

yum install -y httpd
echo "web2" > /var/www/html/index.html

ifconfig lo:0 192.168.254.188 netmask 255.255.255.255

vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

sysctl -p

route add -host 192.168.254.188 dev lo:0

客户机:

curl 192.168.254.188

web1
web2
web1
web2
...

4.2 keepalived+nginx

环境配置:

主keepalived+nginx:192.168.254.10

从keepalived+nginx:192.168.254.20

web1:192.168.254.30

web2:192.168.254.40

客户机:192.168.254.50

 主keepalived+nginx

systemctl stop firewalld
setenforce 0

yum install -y epel-release.noarch nginx keepalived

vim /etc/keepalived/keepalived.conf
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 178.168.200.1
   smtp_connect_timeout 30
   router_id LVS_01
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script check_nginx {
        script "/etc/keepalived/nginx.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.254.188
    }
    track_script {
        check_nginx
}
}


vim /etc/keepalived/nginx.sh
#!/bin/bash
killall -0 nginx
if [ $(echo $0) == 1 ]
then echo "请开启nginx"
else echo "已检测nginx"
fi


vim /etc/nginx/nginx.conf
#在http模块中,添加
upstream web {
server 192.168.254.30;
server 192.168.254.40;
}
#在server模块中,添加
location / {
proxy_pass http://web;
}


systemctl start keepalived nginx

从keepalived+nginx

systemctl stop firewalld
setenforce 0

yum install -y epel-release.noarch nginx keepalived

vim /etc/keepalived/keepalived.conf
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 178.168.200.1
   smtp_connect_timeout 30
   router_id LVS_01
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script check_nginx {
        script "/etc/keepalived/nginx.sh"
        interval 1
        weight -30
        fall 3
        rise 2
        timeout 2
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.254.188
    }
    track_script {
        check_nginx
}
}


vim /etc/keepalived/nginx.sh
#!/bin/bash
killall -0 nginx
if [ $(echo $0) == 1 ]
then echo "请开启nginx"
else echo "已检测nginx"
fi


vim /etc/nginx/nginx.conf
#在http模块中,添加
upstream web {
server 192.168.254.30;
server 192.168.254.40;
}
#在server模块中,添加
location / {
proxy_pass http://web;
}


systemctl start keepalived nginx

web1 && web2

web1:

systemctl stop firewalld
setenforce 0


yum install -y httpd
echo web1 > /var/www/html/index.html

systemctl start httpd

 web2:

systemctl stop firewalld
setenforce 0


yum install -y httpd
echo web2 > /var/www/html/index.html

systemctl start httpd

客户机:

curl 192.168.254.188

web1
web2
web1
web2
web1
web2
...

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

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

相关文章

【算法专题--栈】后缀表达式求值 -- 高频面试题(图文详解,小白一看就会!!)

目录 一、前言 二、题目描述 三、解题方法 ⭐解题思路 ⭐案例图解 四、总结与提炼 五、共勉 一、前言 后缀表达式求值 这道题&#xff0c;可以说是--栈专题--&#xff0c;最经典的一道题&#xff0c;也是在面试中频率最高的一道题目&#xff0c;通常在面试中&…

vue3封装表格嵌套表单问题汇总

1.插槽嵌套多层数据ui组件怎么使用 思路&#xff1a;插槽具名【区分】后暴露传递&#xff0c;这个为神魔要区分&#xff0c;因为封装组件表格列表项也有插槽 步骤一&#xff1a;表单插槽暴露 <ElFormclass"form-search":model"formParams"ref"form…

MS5208T/MS5208N——2.7V 到 5.5V、 12Bit、8 通道轨到轨输出数模转换器

MS5208T/MS5208N 是一款 12Bit 、 8 通道输出的电压型 DAC &#xff0c;内部集成上电复位电路、轨到轨输出 Buffer 。接口采用 三线串口模式&#xff0c;最高工作频率可以到 40MHz &#xff0c;兼容 SPI 、 QSPI 、 DSP 接口和 Microwire 串口。输出接到一个轨到轨…

【zabbix】zabbix四大监控方式

zabbix四大监控方式 zabbix四大监控方式1、 Agent2、 SNMP3、IPMI4、JMX 设置 zabbix-snmp 监控 zabbix监控tomcat的jvm内存1.介绍Zabbix Java Gateway 主要功能使用场景 2.Zabbix Java Gateway 配置步骤**3.在被控端的tomcat上开启jvm监控**4.在zabbix-server上添加监控4.1.添…

贾英才主任的中医探索之路

在北京崇文门中医医院&#xff0c;贾英才主任在中医领域的钻研从未停歇。他对药理的探究和药物搭配的研究&#xff0c;展现出了非凡的专注与执着。 贾英才主任常常埋首于浩瀚的中医典籍之中&#xff0c;逐字逐句地研读古代名医的论述&#xff0c;试图从那些古老的智慧中汲取精…

R语言 | 使用ggplot绘制柱状图,在柱子中显示数值和显著性

原文链接&#xff1a;使用ggplot绘制柱状图&#xff0c;在柱子中显示数值和显著性 本期教程 获得本期教程示例数据&#xff0c;后台回复关键词&#xff1a;20240628。&#xff08;PS&#xff1a;在社群中&#xff0c;可获得往期和未来教程所有数据和代码&#xff09; 往期教程…

一文弄懂线性回归模型

1、引言 今天&#xff0c;我们将深入探讨机器学习中的三个关键概念&#xff1a;线性回归、代价函数和梯度下降。这些概念构成了许多机器学习算法的基础。起初&#xff0c;我决定不写一篇关于这些主题的文章&#xff0c;因为它们已经被广泛涉及。不过&#xff0c;我改变了主意&…

安卓开发app-基础的java项目构建补充知识

安卓开发app-基础的java项目构建补充知识&#xff01;上一次分享了基础的项目构建&#xff0c;但是还遗漏了一些基础的内容。今天补充完整。 首先&#xff0c;是关于项目的一些配置文件的信息。 第一个配置文件&#xff1a;{setting.gradle} 国内阿里云仓库地址信息&#xff1…

[leetcode]avoid-flood-in-the-city 避免洪水泛滥

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<int> avoidFlood(vector<int>& rains) {vector<int> ans(rains.size(), 1);set<int> st;unordered_map<int, int> mp;for (int i 0; i < rains.size(); i) {i…

java周测总结(3)

1、什么是I0流&#xff1f; 是一串流动的字符,从先进先出的方式要求信息的通道。 2、什么是序列化&#xff1f;什么是反序列化&#xff1f; 序例化是将对象的状态存储到特定的存储介质中的过程反序例化是将特定的有合者公质中数据重新构建对象的过程。 3、Java中线程在哪个包下…

CocosCreator构建IOS的wwise教程

CocosCreator构建IOS教程 添加wwise教程: 1.添加include 2.添加SoundEngine 3.添加Profile-iphoneos下面lib下面的.a 4.导入js调用C++的文件 5.导入这些文件 6.初始化ios绝对路径和TTS语音合成对象 6.获得根目录绝对路径,加载pck需要找到绝对路径。怎么找绝对路径? #impor…

【vue3】【vant】 移动端古诗词句子发布收藏项目

更多项目点击&#x1f446;&#x1f446;&#x1f446;完整项目成品专栏 【vue3】【vant】 移动端古诗词句子发布收藏项目 获取源码方式项目说明&#xff1a;其中功能包括素材包含&#xff1a;项目运行环境运行截图 获取源码方式 加Q群&#xff1a;632562109项目说明&#xf…

wavesummit2024发布飞桨3.0版本

今天网上看了wavesummit2024深度学习开发者大会,本来没有啥期待&#xff0c;结果发现飞桨竟然发布3.0版本了&#xff01; 以下是飞桨框架 3.x 的新特性&#xff1a; 动静统一自动并行&#xff1a; 为了降低大模型的编程难度&#xff0c;飞桨还优化了动静统一的半自动并行编程范…

SD-WAN组网对比传统组网的优势

随着商业环境的迅速变化&#xff0c;企业对网络连接的需求不断增长。传统组网方案已经难以满足现代企业的需求&#xff0c;而作为一种新兴的网络解决方案&#xff0c;SD-WAN正逐渐受到企业的青睐。那么&#xff0c;SD-WAN究竟在哪些方面优于传统组网方案呢&#xff1f; 灵活性 …

力扣SQL50 员工的直属部门 子查询 双重

Problem: 1789. 员工的直属部门 &#x1f468;‍&#x1f3eb; 参考题解 Code select employee_id, department_id from Employee where primary_flag Y # Y 表明是直属部门 or employee_id in (select employee_idfrom Employeegroup by employee_idhaving count(employee…

IDEA SpringBoot整合SpringData JPA(保姆级教程,超详细!!!)

目录 1. 简介 2. 创建SpringBoot项目 3. Maven依赖引入 4. 修改application.properties配置文件 5. Entity实体类编写 6. Dao层接口开发 7. 测试接口开发 8. 程序测试 1. 简介 本博客将详细介绍在IDEA中&#xff0c;如何整合SpringBoot与SpringData JPA&#xff0c;以…

海外注册 | 一分钟看懂美国医疗器械(FDA)注册

摘要 ✨ 在全球化的医疗市场中&#xff0c;美国市场对于医疗器械制造商至关重要。本指南旨在为制造商提供全面的美国市场准入指导&#xff0c;确保产品合规并迅速进入市场。 监管机构 美国食品药品监督管理局&#xff08;FDA&#xff09;负责医疗器械的注册&#xff0c;确保其…

GD32F4时钟配置

1.前言 硬件&#xff1a;GD32F450 最高时钟频率200MHZ(外部晶振8MHZ) 软件&#xff1a;KEIL(V5.35) 固件包&#xff1a;GD32F4xx_Firmware_Library_V3.2.0 2.时钟树 时钟配置大概流程如下图红线指示&#xff0c;GD32F470的最高频率可以到240MHZ&#xff0c;GD32F450最高…

Doris:倒排索引

目录 一、倒排索引介绍 二、倒排索引语法 2.1建表时创建倒排索引 2.2 已有表增加倒排索引 2.3 删除索引 三、使用倒排索引 3.1 创建带有倒排索引的表 3.2 插入数据 3.3利用倒排索引查询 3.4 自定义分词 一、倒排索引介绍 倒排索引&#xff0c;是信息检索领域常用的索…

Python之父推荐!Star 60k!深入CPython内核:揭秘内部实现细节

都说 Python 是人工智能的“天选”语言&#xff0c;为什么呢&#xff1f; 可能很多读者都知道&#xff0c;Python 的解释器是用 C 语言写的&#xff0c;所以其实我们在谈论 “Python” 的时候&#xff0c;99.9% 的情况说的就是 “CPython”&#xff01; CPython 是目前最流行的…