Rocky9.0去堆疊雙發arp(支持“ARP 廣播雙發”)

摘要

在去堆疊/MLAG 場景下,默認 bonding 只會以單口回復 ARP,另一臺交換機收不到 ARP Reply。本文在 Linux bonding 驅動中增加參數 arp_broadcast_mode,當開啟時對 ARP 包臨時切換到 廣播模式,實現雙口同時發 ARP Reply。文內提供可直接套用的補丁與完整編譯、替換、驗證流程,并覆蓋常見坑位(Module.symvers 不匹配、Secure Boot、NetworkManager/ifcfg、sshd OpenSSL 版本錯配等)。


基礎信息

  • OS:Rocky Linux 9.0(RHEL 9 系列適用)

  • 內核:5.14.0-70.13.1.el9_0.x86_64

  • bonding 模式:mode=6(balance-alb,其他模式同理)

  • 構建工具:gcc make bison flex elfutils-libelf-devel openssl-devel perl kernel-devel kernel-headers

關鍵點:運行內核版本必須與kernel-devel 版本一致,否則會出現 Module.symvers missing / undefined symbol 等問題。


一、環境準備

1. 確認內核版本

uname -r

例如:5.14.0-70.13.1.el9_0.x86_64

2. 安裝依賴工具鏈

dnf install -y gcc make bison flex elfutils-libelf-devel \openssl-devel perl

注:依據實際情況,如有其他依賴正常安裝即可。 PS:最好直接報報錯給大模型,輸出命令執行就行。?

3. 安裝內核開發包(必須和 uname -r 一致)

dnf download --source kernel-$(uname -r) rpm -ivh kernel-*.src.rpm

如果下載的不對dnf,你就要手動安裝如下三個包。?

rpm -ivh kernel-5.14.0-70.13.1.el9_0.src.rpm  
rpm -ivh kernel-devel-5.14.0-70.13.1.el9_0.x86_64.rpm  
rpm -ivh kernel-headers-5.14.0-70.13.1.el9_0.x86_64.rpm

?源碼安裝后會解壓到:

ls ~/rpmbuild/BUILD/kernel-<version>/

其實就是安裝這三個包,如果你看到安裝的不是, 那你就自己下載就行。?

https://dl.rockylinux.org/stg/rocky/9.0-sources-only/tree/Packages/k/kernel-5.14.0-70.13.1.el9.src.rpm

https://downloads.rockylinux.org/vault/rocky/9.0/devel/x86_64/kickstart/Packages/k/kernel-devel-5.14.0-70.13.1.el9_0.x86_64.rpm

https://downloads.rockylinux.org/vault/rocky/9.0/devel/x86_64/kickstart/Packages/k/kernel-headers-5.14.0-70.13.1.el9_0.x86_64.rpm

驗證:

ls -ld /lib/modules/$(uname -r)/build 
ls /usr/src/kernels/$(uname -r)/

正常會看到對應源碼目錄存在。

二、補丁說明(新增模塊參數 + 僅對 ARP 強制臨時廣播)

思路:

  1. bond_main.c 中新增可控參數:

/* ---- ARP broadcast extension ---- */
static int arp_broadcast_mode = 0;
module_param(arp_broadcast_mode, int, 0644);
MODULE_PARM_DESC(arp_broadcast_mode,"broadcast ARP packet to all slaves, 0=off(default), 1=on.");

2.在 __bond_start_xmit() 函數里,僅當是 ARP 且開關=1 時,將 switch (BOND_MODE(bond)) 動態替換為 BOND_MODE_BROADCAST,從而實現僅對 ARP雙發。對其他報文不影響原有模式。


    三、開始打補丁(適配 RHEL9 5.14 源碼)

    文件路徑:~/rpmbuild/BUILD/kernel-<version>/drivers/net/bonding/bond_main.c
    說明:上下文行適配 RHEL9 5.14;若行號有偏差,可采用“手工改動”或下文“一鍵 sed”方案。

    我測試的路徑:/root/rpmbuild/BUILD/kernel-5.14.0-70.13.1.el9_0/linux-5.14.0-70.13.1.el9.x86_64/drivers/net/bonding

    增加1:打開之后放在include部分第一行就行

    #include <linux/moduleparam.h>

    增加2:放在#include部分最后就行。?

    /* ---- ARP broadcast extension ---- */
    static int arp_broadcast_mode = 0;
    module_param(arp_broadcast_mode, int, 0644);
    MODULE_PARM_DESC(arp_broadcast_mode,"broadcast ARP packet to all slaves, 0=off(default), 1=on.");
    

    在我的測試里, 我把#include <linux/moduleparam.h> 放在了首行,如圖:

    增加3:檢索?__bond_start_xmit部分,

    注意,+號是增加的內容, +號不用復制。-號部分是刪除的。?

    static netdev_tx_t __bond_start_xmit(struct sk_buff *skb, struct net_device *dev){struct bonding *bond = netdev_priv(dev);
    +
    +       /* ARP-only broadcast trigger */
    +       bool is_arp = (vlan_get_protocol(skb) == cpu_to_be16(ETH_P_ARP));
    +       bool do_bcast = arp_broadcast_mode && is_arp;if (bond_should_override_tx_queue(bond) &&!bond_slave_override(bond, skb))return NETDEV_TX_OK;#if IS_ENABLED(CONFIG_TLS_DEVICE)if (skb->sk && tls_is_sk_tx_device_offloaded(skb->sk))return bond_tls_device_xmit(bond, skb, dev);#endif
    -       switch (BOND_MODE(bond)) {
    +       switch (do_bcast ? BOND_MODE_BROADCAST : BOND_MODE(bond)) {case BOND_MODE_ROUNDROBIN:return bond_xmit_roundrobin(skb, dev);case BOND_MODE_ACTIVEBACKUP:

    如果補丁由于上下文差異無法直接打入,建議手工按“三處改動”完成:①在 include 區增加 #include <linux/moduleparam.h>;②在全局參數區增加 arp_broadcast_mode 參數;③在 __bond_start_xmit() 里加 is_arp/do_bcast 并替換 switch


    四、(可選)一鍵 sed 注入腳本

    在源碼根目錄Makefile 所在處)執行:

    # 1) 確保引入 moduleparam 頭(若已有不會重復)
    grep -q 'linux/moduleparam.h' drivers/net/bonding/bond_main.c || \sed -i '/#include <linux\/preempt.h>/a #include <linux/moduleparam.h>' drivers/net/bonding/bond_main.c# 2) 在 "bonding_priv.h" 之后插入參數塊(若已存在請忽略)
    awk '
    /#include "bonding_priv.h"/ && !done {print;print "";print "/* ---- ARP broadcast extension ---- */";print "static int arp_broadcast_mode = 0;";print "module_param(arp_broadcast_mode, int, 0644);";print "MODULE_PARM_DESC(arp_broadcast_mode,";print "        \"broadcast ARP packet to all slaves, 0=off(default), 1=on.\");";print "";done=1; next
    }1' drivers/net/bonding/bond_main.c > .bond_main.c.new && mv .bond_main.c.new drivers/net/bonding/bond_main.c# 3) 在 __bond_start_xmit() 中插入 is_arp/do_bcast(若已插過會失敗,忽略即可)
    sed -i '/struct bonding \*bond = netdev_priv(dev);/a \ \ \ \ bool is_arp = (vlan_get_protocol(skb) == cpu_to_be16(ETH_P_ARP));\n\ \ \ \ bool do_bcast = arp_broadcast_mode && is_arp;' drivers/net/bonding/bond_main.c# 4) 僅替換 __bond_start_xmit() 中的第一個 switch
    awk 'BEGIN{infunc=0; depth=0}/static netdev_tx_t __bond_start_xmit\(struct sk_buff \*skb, struct net_device \*dev\)/{infunc=1}{if(infunc && $0 ~ /switch \(BOND_MODE\(bond\)\) \{/ && !done){sub(/switch \(BOND_MODE\(bond\)\) \{/, "switch (do_bcast ? BOND_MODE_BROADCAST : BOND_MODE(bond)) {"); done=1}print}/{/{if(infunc) depth++}/}/{if(infunc){depth--; if(depth==0) infunc=0}}
    ' drivers/net/bonding/bond_main.c > .bond_main.c.new && mv .bond_main.c.new drivers/net/bonding/bond_main.c
    

    五、編譯 bonding 模塊

    1)我們在第一步環境準備時已經安裝好相關源碼包了

    2)進入源碼目錄并構建(外部構建,確保符號版本匹配)

    cd ~/rpmbuild/BUILD/kernel-5.14.0-70.13.1.el9_0/linux-5.14.0-70.13.1.el9.x86_64# 使用當前運行內核的配置
    cp -v /boot/config-$(uname -r) .config
    yes "" | make olddefconfig# 準備頭文件(只有第一次需要)
    make prepare && make modules_prepare# 用匹配內核的 build 來編譯指定子目錄模塊(推薦)
    make -C /lib/modules/$(uname -r)/build M=$PWD/drivers/net/bonding clean
    make -C /lib/modules/$(uname -r)/build M=$PWD/drivers/net/bonding modules -j"$(nproc)"
    

    產物:drivers/net/bonding/bonding.ko

    提示 “Skipping BTF generation … vmlinux 不在” 不影響加載。


    六、部署并讓系統優先用自編譯模塊

    方案 A(推薦):放到 weak-updates 并覆蓋 modprobe 安裝行為

    # 放置新模塊
    mkdir -p /lib/modules/$(uname -r)/weak-updates/bonding/
    cp -v /root/rpmbuild/BUILD/kernel-5.14.0-70.13.1.el9_0/linux-5.14.0-70.13.1.el9.x86_64/drivers/net/bonding/bonding.ko /lib/modules/$(uname -r)/weak-updates/bonding/
    depmod -a# 持久化默認參數(開啟雙發)
    echo 'options bonding arp_broadcast_mode=1' > /etc/modprobe.d/bonding.conf# 強制 modprobe 始終加載我們這份(避免回退到內置 .xz)
    cat >/etc/modprobe.d/override-bonding.conf <<'EOF'
    install bonding /sbin/insmod /lib/modules/$(uname -r)/weak-updates/bonding/bonding.ko $CMDLINE_OPTS
    EOF
    

    之后 modprobe bonding 會優先加載我們放在 weak-updates 的模塊。

    Secure Boot 提醒:若啟用 Secure Boot,加載未簽名模塊會報 Required key not available。需關閉 Secure Boot 或對 bonding.ko 本地簽名并導入 MOK。

    重新加載

    modprobe -r bonding 2>/dev/null || true modprobe bonding

    驗證參數存在:

    modinfo bonding | egrep 'filename|vermagic|parm'
    # filename 應指向 weak-updates/bonding/bonding.ko
    # parm 應含 arp_broadcast_modecat /sys/module/bonding/parameters/arp_broadcast_mode   # 應=1
    

    注意:有可能你編譯的內核和使用的內核一樣, 所以加載的bonding需要注意一下,使用的是新編譯的內核, 還是老內核。?


    七、網絡腳本參考(ifcfg)

    /etc/sysconfig/network-scripts/ifcfg-bond0

    DEVICE=bond0
    NAME=bond0
    TYPE=Bond
    ONBOOT=yes
    BOOTPROTO=none
    IPADDR=10.10.10.11
    NETWORK=24
    GATEWAY=10.10.10.1
    NM_CONTROLLED=yes
    BONDING_OPTS="mode=6 miimon=100 arp_validate=all arp_all_targets=all lp_interval=1 updelay=200 downdelay=200" 
    

    參數說明:

    • arp_validate=all + arp_all_targets=all:用 ARP 健康檢查,兩個目標都 OK 才算通過(配合你環境的網關/探測 IP)

    • lp_interval=1:學習包間隔(ALB 需要)

    • 打開你打的補丁開關/etc/modprobe.d/bonding.confoptions bonding arp_broadcast_mode=1

    • 交換機側:兩個上聯口不要加入聚合,保持二層轉發正常;必要時放寬 MAC 移動抑制/告警閾值,觀察是否有 MAC flap

    • updelay=200

      • 當檢測到鏈路恢復(link up)時,bond 不會立刻啟用這塊口,而是要等 200ms 連續穩定后才認為口真正可用。

      • 避免“抖動”或短暫恢復又掉線的情況。

    • downdelay=200

      • 當檢測到鏈路斷開(link down)時,bond 不會立刻標記為 down,而是要連續 200ms 檢測失敗才認為口真的掛了。

      • 避免偶發丟包/閃斷導致的誤判。

    /etc/sysconfig/network-scripts/ifcfg-eth0

    DEVICE=eth0
    TYPE=Ethernet
    BOOTPROTO=none
    ONBOOT=yes
    MASTER=bond0
    SLAVE=yes
    NM_CONTROLLED=yes
    

    /etc/sysconfig/network-scripts/ifcfg-eth1

    DEVICE=eth1
    TYPE=Ethernet
    BOOTPROTO=none
    ONBOOT=yes
    MASTER=bond0
    SLAVE=yes
    NM_CONTROLLED=yes
    

    啟用:

    nmcli con reload
    nmcli con up bond0
    cat /proc/net/bonding/bond0
    

    八、功能驗證(ARP 雙發)

    方法一:遠端 ping 觸發 ARP

    # 終端A
    tcpdump -ni eth0 arp -vv
    # 終端B
    tcpdump -ni eth1 arp -vv
    

    在另一臺同網段機器 ping bond0_IP,你應看到同一時間兩個口都有 ARP Reply。

    方法二:本機主動 arping

    arping -c 3 -I bond0 <對端IP或網關IP>
    # 同時在 eth0/eth1 抓包觀察
    

    九、常見坑位與排障速查

    1. Module.symvers 缺失/符號未定義

    • 現象:Module.symvers missingundefined symbol …

    • 處理:確保 kernel-develuname -r 一致;使用
      make -C /lib/modules/$(uname -r)/build M=... 外部構建。

    1. 加載到舊模塊(.xz)

    • 現象:modinfo bonding | grep filename 顯示 .xz

    • 處理:modprobe -r bondingdepmod -a → 用 override-bonding.conf 強制 insmod 我們的 weak-updates 版本。

    1. Secure Boot 導致無法加載

    • 報錯:Required key not available

    • 處理:關閉 Secure Boot 或簽名模塊并導入 MOK。

    1. bond0 為 DOWN 或無 IP

    • 檢查:cat /proc/net/bonding/bond0,確認 slave 綁定與 MII Status

    • 給 bond0 配置 IP/PREFIX,BONDING_OPTS 中設置 miimon=100

    • nmcli con up bond0 后再 ip a show bond0

    1. sshd 起不來(OpenSSL 版本錯配)

    • 錯誤:OpenSSL version mismatch. Built against 30000010, you have 30200020

    • 處理:升級 openssh-server 到與系統 OpenSSL 對齊的版本(Rocky 有 8.7p1-45.el9.rocky.0.1 等),或降級 OpenSSL(不推薦)。


    十、結語

    本文通過極小的代碼改動,為 bonding 增加了 arp_broadcast_mode 參數,實現僅對 ARP 報文的“臨時廣播”,從而滿足去堆疊/MLAG 場景下的“雙發 ARP”需求。方案對非 ARP 流量無侵入,并保留原有模式行為。生產環境上線前,建議在維護時段配合交換機側做充分驗證。


    附:最小操作清單(懶人版)

    # 0) 安裝匹配的 kernel-devel
    rpm -ivh --oldpackage /opt/kernel-devel-$(uname -r).x86_64.rpm# 1) 修改源碼 (按上文補丁三處改動)
    cd ~/rpmbuild/BUILD/kernel-*/linux-*/   # 進入源碼根
    # (可用上文 sed 快捷腳本)# 2) 構建
    cp -v /boot/config-$(uname -r) .config
    yes "" | make olddefconfig
    make prepare && make modules_prepare
    make -C /lib/modules/$(uname -r)/build M=$PWD/drivers/net/bonding clean
    make -C /lib/modules/$(uname -r)/build M=$PWD/drivers/net/bonding modules -j"$(nproc)"# 3) 部署 + 持久化參數
    mkdir -p /lib/modules/$(uname -r)/weak-updates/bonding/
    cp -v drivers/net/bonding/bonding.ko /lib/modules/$(uname -r)/weak-updates/bonding/
    depmod -a
    echo 'options bonding arp_broadcast_mode=1' > /etc/modprobe.d/bonding.conf
    cat >/etc/modprobe.d/override-bonding.conf <<'EOF'
    install bonding /sbin/insmod /lib/modules/$(uname -r)/weak-updates/bonding/bonding.ko $CMDLINE_OPTS
    EOF# 4) 重載并驗證
    modprobe -r bonding 2>/dev/null || true
    modprobe bonding
    modinfo bonding | egrep 'filename|parm'
    cat /sys/module/bonding/parameters/arp_broadcast_mode# 5) 抓包驗證
    tcpdump -ni eth0 arp -vv &
    tcpdump -ni eth1 arp -vv &
    # 在另一臺同網段 ping bond0_IP,觀察兩口同時 ARP Reply
    

    本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
    如若轉載,請注明出處:http://www.pswp.cn/news/922024.shtml
    繁體地址,請注明出處:http://hk.pswp.cn/news/922024.shtml
    英文地址,請注明出處:http://en.pswp.cn/news/922024.shtml

    如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

    相關文章

    網頁連接攝像頭

    攝像機處理 <!-- camera_solve.html --> <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>…

    FPGA雷達信號處理之:自適應門限閾值

    一、原理 參考這個博主&#xff0c;講的很仔細&#xff1a;基于脈沖功率的雷達脈沖參數檢測原理詳解 二、FPGA實現 使用system generator搭建算法模型如下&#xff1a; 在這里&#xff0c;濾波器窗長度為8&#xff0c;原博主設置為50效果更好&#xff0c;門限公式如下&#xf…

    Vue 中實現選中文本彈出彈窗的完整指南

    在現代 Web 應用中&#xff0c;選中文本后顯示相關操作或信息是一種常見的交互模式。本文將詳細介紹如何在 Vue 中實現選中文本后彈出彈窗的功能&#xff0c;包括其工作原理、多種實現方式以及實際項目中的應用示例。 一、實現原理 1. 文本選中檢測機制 瀏覽器提供了 Select…

    第4節-排序和限制-FETCH

    摘要: 在本教程中&#xff0c;你將學習如何使用 PostgreSQL 的 FETCH 子句從查詢中檢索部分行。 PostgreSQL FETCH 簡介 在 PostgreSQL 中&#xff0c;OFFSET 子句的作用類似于 LIMIT 子句。FETCH 子句允許你限制查詢返回的行數。 LIMIT 子句并非 SQL 標準的一部分。不過&#…

    洛谷 P2680 [NOIP 2015 提高組] 運輸計劃(二分答案 + 樹上差分)

    題目鏈接題目概括與評價 很經典&#xff0c;突破口藏的很深&#xff0c;求最小值這里&#xff0c;是問題切入點&#xff0c;想到用二分答案&#xff0c;然后思考怎么寫 f_check 函數。二分答案樹上差分。代碼 #include <iostream> #include <vector> #include <…

    接力鄧承浩,姜海榮能講好深藍汽車新故事嗎?

    出品 | 何璽排版 | 葉媛深藍汽車迎來新話事人。9月5日&#xff0c;新央企長安汽車旗下品牌深藍汽車傳出新的人事調整。多家業內媒體報道稱&#xff0c;榮耀前中國區CMO姜海榮已正式加入長安汽車&#xff0c;并出任旗下深藍汽車CEO一職。原CEO鄧承浩則升任深藍汽車董事長&#x…

    esp32-c3寫一個收集附近 WiFi 和藍牙信號通過

    下面給你一個基于 ESP-IDF(v5.x) 的完整示例&#xff1a;在 ESP32-C3 上同時掃描附近 Wi-Fi 與藍牙&#xff08;BLE&#xff09;廣播&#xff0c;把結果以 JSON 結構統一輸出到串口&#xff0c;并且可可選通過 MQTT 上報到服務器&#xff08;打開一個宏即可&#xff09;。日志默…

    文心大模型 X1.1:百度交出的“新深度思考”答卷

    文心大模型 X1.1&#xff1a;百度交出的“新深度思考”答卷 2025年9月9日&#xff0c;WAVE SUMMIT 2025深度學習開發者大會在北京正式召開&#xff0c;由深度學習技術及應用國家工程研究中心主辦&#xff0c;百度飛槳與文心大模型聯合承辦。大會上&#xff0c;百度正式發布了基…

    開始 ComfyUI 的 AI 繪圖之旅-Flux.1圖生圖(八)

    文章標題一、Flux Kontext Dev1.關于 FLUX.1 Kontext Dev1.1 版本說明1.2 工作流說明1.3 模型下載2.Flux.1 Kontext Dev 工作流2.1 工作流及輸入圖片下載2.2 按步驟完成工作流的運行3.Flux Kontext 提示詞技巧3.1 基礎修改3.2 風格轉換3.3 角色一致性3.4 文本編輯4.常見問題解決…

    Java 生成微信小程序二維碼

    1. java 二維碼生成工具類import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import com.pdatao.api.controller.file.FileController; import com.pdatao.api.error.CommunityException; import org.apache.commons.io.IOUtils; import org.springframe…

    智慧健康觸手可及:AI健康小屋——未來健康管理的全能守護者

    AI健康小屋&#xff0c;這座融合人工智能、物聯網與醫療科技的“健康堡壘”&#xff0c;正悄然重構健康管理生態。它以科技為引擎&#xff0c;將專業醫療資源下沉至社區、企業、家庭&#xff0c;通過智能檢測、精準分析、個性化干預&#xff0c;實現從疾病治療到主動預防的健康…

    [工作表控件19] 驗證規則實戰:如何用正則表達式規范業務輸入?

    在企業應用中,數據準確性至關重要。工作表控件通過“驗證規則”能力,支持在文本字段和附件字段中使用正則表達式(RegEx)進行格式校驗。它能幫助開發者輕松實現郵箱、身份證號、車牌號、URL 等格式的高效驗證,大幅提升數據質量與表單使用體驗。 一、官方功能介紹與基礎能力…

    uniapp分包實現

    關于分包優化的說明 在對應平臺的配置下添加"optimization":{"subPackages":true}開啟分包優化 目前只支持mp-weixin、mp-qq、mp-baidu、mp-toutiao、mp-kuaishou的分包優化 分包優化具體邏輯&#xff1a; 靜態文件&#xff1a;分包下支持 static 等靜態…

    ctfshow_web14------(PHP+switch case 穿透+SQL注入+文件讀取)

    題目&#xff1a;解釋&#xff1a;$c intval($_GET[c]); //獲取整數值 6sleep($c);//延遲執行當前腳本若干秒。提示一下哈沒有break會接著執行下面的但是像是44444&#xff0c;555555,sleep的時間太久我們用3進入here_1s_your_f1ag.php是一個查詢頁面&#xff0c;sql注入查看源…

    linux x86_64中打包qt

    下載安裝 地址: Releases linuxdeploy/linuxdeploy mv linuxdeploy-x86_64.AppImage linuxdeployqtchmod 777 linuxdeployqtsudo mv linuxdeployqt /usr/local/bin/linuxdeployqt --version報錯 Applmage默認依賴FUSE&#xff0c;需要掛載自身為虛擬文件系統才能運行, ubuntu…

    華為昇騰CANN開發實戰:算子自定義與模型壓縮技術指南

    點擊 “AladdinEdu&#xff0c;同學們用得起的【H卡】算力平臺”&#xff0c;注冊即送-H卡級別算力&#xff0c;80G大顯存&#xff0c;按量計費&#xff0c;靈活彈性&#xff0c;頂級配置&#xff0c;學生更享專屬優惠。 摘要 隨著人工智能技術的飛速發展&#xff0c;越來越多…

    Vue3源碼reactivity響應式篇之reactive響應式對象的track與trigger

    概覽 在BaseReactiveHandler類的get方法中&#xff0c;有如下代碼塊if (!isReadonly2){track(target, "get", key);}&#xff0c;這表示通過reactive、shallowReactive創建的響應式對象&#xff0c;非只讀的&#xff0c;當讀取代理對象proxyTarget的某個屬性key時&am…

    VRRP 多節點工作原理

    VRRP 多節點工作原理 基本概念 VRRP 的設計初衷是給一組節點提供一個 虛擬路由器&#xff0c;對外只表現出一個 VIP。協議規定&#xff1a;同一個 VRRP 實例 下始終只有 一個 Master 持有 VIP&#xff0c;其它全部是 Backup。 Master → 持有 VIP&#xff0c;負責轉發流量到Mas…

    Gradio全解11——Streaming:流式傳輸的視頻應用(9)——使用FastRTC+Gemini創建沉浸式音頻+視頻的藝術評論家

    Gradio全解11——Streaming&#xff1a;流式傳輸的視頻應用&#xff08;9&#xff09;——使用FastRTCGemini創建沉浸式音頻視頻的藝術評論家11.9 使用FastRTCGemini創建實時沉浸式音頻視頻的藝術評論家11.9.1 準備工作及音頻圖像編碼器1. 項目說明及準備工作2. 音頻和圖像編碼…

    Django入門筆記

    Python知識點&#xff1a;函數、面向對象。前端開發&#xff1a;HTML、CSS、JavaScript、jQuery、BootStrap。MySQL數據庫。Python的Web框架&#xff1a;Flask&#xff0c;自身短小精悍 第三方組件。Django&#xff0c;內部已集成了很多組件 第三方組件。【主要】1.安裝djang…