高可用集群KEEPALIVED的詳細部署

.高可用集群

1.1 集群類型

LBLoad Balance 負載均衡

LVS/HAProxy/nginxhttp/upstream, stream/upstream

HAHigh Availability 高可用集群

數據庫、Redis

SPoF: Single Point of Failure,解決單點故障

HPCHigh Performance Computing 高性能集群

1.2 系統可用性

SLAService-Level Agreement 服務等級協議(提供服務的企業與客戶之間就服務的品質、水準、性能

等方面所達成的雙方共同認可的協議或契約)

A = MTBF / (MTBF+MTTR

指標 :99.9%, 99.99%, 99.999%,99.9999%

1.3 系統故障

硬件故障:設計缺陷、wear out(損耗)、非人為不可抗拒因素

軟件故障:設計缺陷 bug

1.4 實現高可用

提升系統高用性的解決方案:降低MTTR- Mean Time To Repair(平均故障時間)

解決方案:建立冗余機制

active/passive /

active/active 雙主

active --> HEARTBEAT --> passive

active <--> HEARTBEAT <--> active

1.5.VRRPVirtual Router Redundancy Protocol

虛擬路由冗余協議,解決靜態網關單點風險

物理層:路由器、三層交換機

軟件層:keepalived

1.5.1 VRRP 相關術語

虛擬路由器:Virtual Router

虛擬路由器標識:VRID(0-255),唯一標識虛擬路由器

VIPVirtual IP

VMACVirutal MAC (00-00-5e-00-01-VRID)

物理路由器:

master:主設備

backup:備用設備

priority:優先級

1.5.2 VRRP 相關技術

通告:心跳,優先級等;周期性

工作方式:搶占式,非搶占式

安全認證:

無認證

簡單字符認證:預共享密鑰

MD5

工作模式:

/備:單虛擬路由器

/主:主/備(虛擬路由器1),備/主(虛擬路由器2

.Keepalived 部署

2.1 keepalived 簡介

vrrp 協議的軟件實現,原生設計目的為了高可用 ipvs服務

官網:http://keepalived.org/

功能:

基于vrrp協議完成地址流動

vip地址所在的節點生成ipvs規則(在配置文件中預先定義)

ipvs集群的各RS做健康狀態檢測

基于腳本調用接口完成腳本中定義的功能,進而影響集群事務,以此支持nginxhaproxy等服務

2.2 Keepalived 架構

官方文檔:

https://keepalived.org/doc/

http://keepalived.org/documentation.html、

用戶空間核心組件:

vrrp stackVIP消息通告

checkers:監測real server

system call:實現 vrrp 協議狀態轉換時調用腳本的功能

SMTP:郵件組件

IPVS wrapper:生成IPVS規則

Netlink Reflector:網絡接口

WatchDog:監控進程

控制組件:提供keepalived.conf 的解析器,完成Keepalived配置

IO復用器:針對網絡目的而優化的自己的線程抽象

內存管理組件:為某些通用的內存管理功能(例如分配,重新分配,發布等)提供訪問權限

2.3 Keepalived 環境準備?

各節點時間必須同步:ntp, chrony

關閉防火墻及SELinux

各節點之間可通過主機名互相通信:非必須

建議使用/etc/hosts文件實現:非必須

各節點之間的root用戶可以基于密鑰認證的ssh服務完成互相通信:非必須

在ka1

vim /etc/chrony.conf

在ka2上

時間同步

2.4 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

注意:RHEL7中可能會遇到一下bug,RHEL9中無此問題

解決辦法:

systemctl restart keepalived #新配置可能無法生效
systemctl stop keepalived;systemctl start keepalived #無法停止進程,需要 kill 停

2.5 Keepalived 安裝

安裝 keepalived
ka1和ka2安裝keepalived
dnf install keepalived -y

2.6 KeepAlived 配置說明

2.6.1 配置文件組成部分

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

配置文件組成

GLOBAL CONFIGURATION

Global definitions: 定義郵件配置,route_idvrrp配置,多播地址等

VRRP CONFIGURATION

VRRP instance(s)

定義每個vrrp虛擬路由器

LVS CONFIGURATION

Virtual server group(s)

Virtual server(s)

LVS集群的VSRS

2.6.2 配置語法說明

幫助

man keepalived.conf
????????????????
1.全局配置

?啟動keepalived服務

?
ka2和ka1大體一樣,不一樣的下方圖片標了出來。

?啟動keepalived

2.配置虛擬路由器

?

?3.啟用keepalived日志功能

cat /var/log.messages

[root@KA1 ~]# vi /etc/sysconfig/keepalived?

啟用日志功能

[root@KA1 ~]# vim /etc/rsyslog.conf

測試:cat /var/log/keepalived.log

4.實現獨立子配置文件?

當生產環境復雜時, /etc/keepalived/keepalived.conf 文件中內容過多,不易管理

將不同集群的配置,比如:不同集群的VIP配置放在獨立的子配置文件中利用include 指令可以實現包含子配置文件

格式:

include /path/file

vim /etc/keepalived/keepalived.conf

復制對話1

[root@KA1 ~]# mkdir /etc/keepalived/conf.d -p

[root@KA1 ~]# sudo vim /etc/keepalived/conf.d/webvip.conf

?

這樣就完成了獨立子配置文件。

.Keepalived 企業應用示例

3.1 實現master/slave Keepalived 單主架構

3.1.1 MASTER配置

前面已經做過,這個就不細寫了。

[root@KA1 ~]# vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

notification_email {

594233887@qq.com3.1.2 BACKUP配置

}

notification_email_from keepalived@KA1.timinglee.org

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id KA1.timinglee.org

vrrp_skip_check_adv_addr

#vrrp_strict #添加此選項無法訪問vip,可以用nft list ruleset查看

vrrp_garp_interval 1

vrrp_gna_interval 1

vrrp_mcast_group4 224.0.0.18

}

vrrp_instance VI_1 {

state MASTER

interface eth0

virtual_router_id 20

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

172.25.254.100/24 dev eth0 label eth0:0

}

}

#配置文件和master基本一致,只需修改三行

[root@KA2 ~]# vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

notification_email {

594233887@qq.com

}

notification_email_from keepalived@timinglee.org

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id KA2.timinglee.org

vrrp_skip_check_adv_addr

#vrrp_strict

vrrp_garp_interval 1

vrrp_gna_interval 1

vrrp_mcast_group4 224.0.0.18

}

vrrp_instance VI_1 {

state BACKUP

interface eth0

virtual_router_id 20 #相同id管理同一個虛擬路由

priority 80 #低優先級

advert_int 1

抓包觀察

tcpdump -i eth0 -nn host 224.0.0.18

3.2 搶占模式和非搶占模式

3.2.1 非搶占模式 nopreempt

默認為搶占模式preempt,即當高優先級的主機恢復在線后,會搶占低先級的主機的master角色, 這樣會使vipKA主機中來回漂移,造成網絡抖動,

建議設置為非搶占模式 nopreempt ,即高優先級主機恢復后,并不會搶占低優先級主機的master角色非搶占模塊下,如果原主機down, VIP遷移至的新主機, 后續也發生down,仍會將VIP遷移回原主機

注意:要關閉 VIP搶占,必須將各 keepalived 服務器state配置為BACKUP

ka1和ka2上:

?

3.2.2 搶占延遲模式 preempt_delay

搶占延遲模式,即優先級高的主機恢復后,不會立即搶回VIP,而是延遲一段時間(默認300s)再搶回VIP

preempt_delay # #指定搶占延遲時間為#s,默認延遲300s

注意:需要各keepalived服務器state為BACKUP,并且不要啟用 vrrp_strict

?關掉并迅速啟動服務

?

?

3.3 VIP單播配置?

默認keepalived主機之間利用多播相互通告消息,會造成網絡擁塞,可以替換成單播,減少網絡流量

注意:啟用 vrrp_strict 時,不能啟用單播

ka1和2都按照這個原理配置

[root@KA2 ~]# vi /etc/keepalived/keepalived.conf

測試:

ka1

?

ka2

?

搶占模式:ka1停止ka2就進行,ka2停止就回到ka1這邊,那邊優先級高先從那邊開始,電腦卡頓,就不展示了。

3.4 Keepalived 通知腳本配置

keepalived的狀態變化時,可以自動觸發腳本的執行,比如:發郵件通知用戶

默認以用戶keepalived_script身份執行腳本

如果此用戶不存在,以root執行腳本可以用下面指令指定腳本執行用戶的身份

global_defs {
......
script_user <USER>
......
}

3.4.1 通知腳本類型

當前節點成為主節點時觸發的腳本

notify_master <STRING>|<QUOTED-STRING>

當前節點轉為備節點時觸發的腳本

notify_backup <STRING>|<QUOTED-STRING>

當前節點轉為失敗狀態時觸發的腳本

notify_fault <STRING>|<QUOTED-STRING>

3.4.2 腳本的調用方法

vrrp_instance VI_1 語句塊的末尾加下面行

notify_master "/etc/keepalived/notify.sh master"

notify_backup "/etc/keepalived/notify.sh backup"

notify_fault "/etc/keepalived/notify.sh fault”

3.4.3 創建通知腳本

[root@KA1 ~]# vim /etc/keepalived/mail.sh
#!/bin/bash
mail_dest='594233887@qq.com'
mail_send()
{
mail_subj="$HOSTNAME to be $1 vip 轉移"
mail_mess="`date +%F\ %T`: vrrp 轉移,$HOSTNAME 變為 $1"
echo "$mail_mess" | mail -s "$mail_subj" $mail_dest
}
case $1 in
master)
mail_send master
;;
backup)
mail_send backup
;;
fault)
mail_send fault
;;
*)
exit 1
;;
esac
#!/bin/bash
rm -fr /mnt/{master,backup,faild}
case $1 in
master)
echo master > /mnt/master
;;
backup)
echo backup > /mnt/backup
;;
faild)
echo faild > /mnt/faild
esac

/mnt/test.sh 必須存在且 可執行,否則 Keepalived 會不斷報警。

sudo chmod +x /mnt/test.sh

測試:

3.4.4 郵件配置

安裝郵件發送工具
[root@KA1 ~]# dnf install s-nail sendmail -y
[root@KA1 ~]# systemctl enable --now sendmail.service
[root@KA1 ~]# echo hello | mailx -s test xxxxx@163.com

?

?

3.4.5 實戰案例:實現 Keepalived 狀態切換的通知腳本?

編寫腳本:

#!/bin/bash
mail_dest='xxxx@163.com'
mail_send()
{
mail_subj="$HOSTNAME to be $1 vip 轉移"
mail_mess="`date +%F\ %T`: vrrp 轉移,$HOSTNAME 變為 $1"
echo "$mail_mess" | mail -s "$mail_subj" $mail_dest
}
case $1 in
master)
mail_send master
;;
backup)
mail_send backup
;;
fault)
mail_send fault
;;
*)
exit 1
;;
esac
~ ? ? ? ? ? ? ? ? ? ? ?

[root@KA1 ~]# vim /etc/keepalived/keepalived.conf?

[root@KA1 ~]# systemctl restart keepalived.service

3.5 實現 master/master Keepalived 雙主架構?

master/slave的單主架構,同一時間只有一個Keepalived對外提供服務,此主機繁忙,而另一臺主機卻很空閑,利用率低下,可以使用master/master的雙主架構,解決此問題。
master/master 的雙主架構:
即將兩個或以上VIP分別運行在不同的keepalived服務器,以實現服務器并行提供web訪問的目的,提服務器資源利用率
兩個虛擬路由設定
ka1? ka2與ka1的兩個相反

?

?

?

3.6 實現IPVS的高可用性

3.6.1 IPVS相關配置

1.虛擬服務器配置結構
virtual_server IP port {
...
real_server {
...
}
real_server {
...
}
}
2.virtual server (虛擬服務器)的定義格式
virtual_server IP port #定義虛擬主機IP地址及其端口
virtual_server fwmark int #ipvs的防火墻打標,實現基于防火墻的負載均衡集群
virtual_server group string #使用虛擬服務器組

3.虛擬服務器配置

virtual_server IP port { #VIP和PORT

delay_loop <INT> #檢查后端服務器的時間間隔

lb_algo rr|wrr|lc|wlc|lblc|sh|dh #定義調度方法

lb_kind NAT|DR|TUN #集群的類型,注意要大寫

persistence_timeout <INT> #持久連接時長

protocol TCP|UDP|SCTP #指定服務協議,一般為TCP

sorry_server <IPADDR> <PORT> #所有RS故障時,備用服務器地址

real_server <IPADDR> <PORT> { #RS的IP和PORT

weight <INT> #RS權重

notify_up <STRING>|<QUOTED-STRING> #RS上線通知腳本

notify_down <STRING>|<QUOTED-STRING> #RS下線通知腳本

HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK { ... } #定義當前主機健康狀

態檢測方法

}

}

注意:括號必須分行寫,兩個括號寫在同一行,如: }} 會出錯

4.應用層監測

應用層檢測:HTTP_GET|SSL_GET

HTTP_GET|SSL_GET {

url {

path <URL_PATH> #定義要監控的URL

status_code <INT> #判斷上述檢測機制為健康狀態的響應碼,一般為 200

}

connect_timeout <INTEGER> #客戶端請求的超時時長, 相當于haproxy的timeout server

nb_get_retry <INT> #重試次數

delay_before_retry <INT> #重試之前的延遲時長

connect_ip <IP ADDRESS> #向當前RS哪個IP地址發起健康狀態檢測請求

connect_port <PORT> #向當前RS的哪個PORT發起健康狀態檢測請求

bindto <IP ADDRESS> #向當前RS發出健康狀態檢測請求時使用的源地址

bind_port <PORT> #向當前RS發出健康狀態檢測請求時使用的源端口

}

5.TCP監測
傳輸層檢測:TCP_CHECK

TCP_CHECK {

connect_ip <IP ADDRESS> #向當前RS的哪個IP地址發起健康狀態檢測請求

connect_port <PORT> #向當前RS的哪個PORT發起健康狀態檢測請求

bindto <IP ADDRESS> #發出健康狀態檢測請求時使用的源地址

bind_port <PORT> #發出健康狀態檢測請求時使用的源端口

connect_timeout <INTEGER> #客戶端請求的超時時長

#等于haproxy的timeout server

}

3.6.2 實戰案例

準備web服務器并使用腳本綁定VIPweb服務器lo網卡
rs1和rs2安裝
[root@KA2 ~]# dnf install ipvsadm-1.31-6.el9.x86_64 -y
ka1和2上配置

virtual_server 192.168.12.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
protocol TCP

? ? real_server 192.168.12.110 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 2
retry 3
delay_before_retry 3
}
}

? ? real_server 192.168.12.120 80 {
weight 1
TCP_CHECK {
connect_timeout 2
retry 3
delay_before_retry 3
connect_port 80
}
}
}

?

for i in {1..6}; do curl 192.168.12.100; done

RS2?- 192.168.12.110
RS2 - 192.168.12.120
RS2?- 192.168.12.110
RS2 - 192.168.12.120
RS2?- 192.168.12.110
RS2 - 192.168.12.120
?ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.12.100:80 wrr
-> 192.168.12.110:80 Route 1 0 6
-> 192.168.12.120:80 Route 1 0 6

以上就是ipvs的高可用!

3.7 實現其它應用的高可用性 VRRP Script

3.7.1 VRRP Script 配置

分兩步實現:

定義腳本

vrrp_script:自定義資源監控腳本,vrrp實例根據腳本返回值,公共定義,可被多個實例調用,定

義在vrrp實例之外的獨立配置塊,一般放在global_defs設置塊之后。

通常此腳本用于監控指定應用的狀態。一旦發現應用的狀態異常,則觸發對MASTER節點的權重減至低于SLAVE節點,從而實現 VIP 切換到 SLAVE 節點

vrrp_script <SCRIPT_NAME> {

script <STRING>|<QUOTED-STRING> #此腳本返回值為非0時,會觸發下面OPTIONS執行

OPTIONS

}

調用腳本

track_script:調用vrrp_script定義的腳本去監控資源,定義在VRRP實例之內,調用事先定義的

vrrp_script

track_script {

SCRIPT_NAME_1

SCRIPT_NAME_2

}

1.定義 VRRP script

vrrp_script <SCRIPT_NAME> { #定義一個檢測腳本,在global_defs 之外配置

script <STRING>|<QUOTED-STRING> #shell命令或腳本路徑

interval <INTEGER> #間隔時間,單位為秒,默認1

timeout <INTEGER> #超時時間

weight <INTEGER:-254..254> #默認為0,如果設置此值為負數,

#當上面腳本返回值為非0

#會將此值與本節點權重相加可以降低本節點權重,

#即表示fall.

#如果是正數,當腳本返回值為0

#會將此值與本節點權重相加可以提高本節點權重

#即表示 rise.通常使用負值

fall <INTEGER> #執行腳本連續幾次都失敗,則轉換為失敗,建議設為2以上

rise <INTEGER> #執行腳本連續幾次都成功,把服務器從失敗標記為成功

user USERNAME [GROUPNAME] #執行監測腳本的用戶或組

init_fail #設置默認標記為失敗狀態,監測成功之后再轉換為成功狀態

}

2.調用 VRRP script
vrrp_instance test {
... ...
track_script {
check_down
}
}

3.7.2實戰案例:利用腳本實現主從角色切換

# vim /mnt/check_lee.sh

#!/bin/bash

[ -f "/mnt/lee" ]

chmod +x /mnt/check_lee.sh

vim /etc/keepalived/keepalived.conf

腳本:

vrrp_script check_lee {
script "/mnt/check_lee.sh"
interval 1
weight -30
fall 2
rise 2
timeout 2
}
vrrp_instance web {
state MASTER
interface ens33
virtual_router_id 50
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.254.100 dev ens33 label ens33:0
}
track_script {
check_lee
}
}

touch /mnt/lee
?tail -f /var/log/messages

3.7.3 實戰案例:實現HAProxy高可用

ka1ka2先實現haproxy的配置

listen webserver
bind 192.168.12.100:80
server web1 192.168.12.120:80 check
server web2 192.168.12.110:80 check

在兩個ka1ka2兩個節點啟用內核參數
vim /etc/sysctl.conf
net.ipv4.ip_nonlocal_bind = 1

sysctl -p

ka1中編寫檢測腳本

vim /etc/keepalived/scripts/haproxy.sh

#!/bin/bash

killall -0 haproxy

?

?chmod +X /etc/keepalived/scripts/haproxy.sh

ka1中配置keepalived

#cat /etc/keepalived/keepalived.conf

vrrp_script check_haproxy {

script "/etc/keepalived/scripts/haproxy.sh"

interval 1

weight -30

fall 2

rise 2

timeout 2

}

vrrp_instance web {

state MASTER

interface ens33

virtual_router_id 50

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.12.100 dev ens33?label ens33:0

}

track_script {

check_haproxy

}

}

?

測試

systemctl stop haproxy.service

?

成功!

以上就是對高可用集群KEEPALIVED的詳細部署!!

四.注意事項

Keepalived 高可用集群在生產落地時,有 8 條「踩坑率最高」的注意事項,務必提前規避:

關鍵項正確做法 / 避坑指南
VRRP 通信方式云環境或組播受限制時,統一使用單播unicast_src_ip?+?unicast_peer),可減少 90 % 腦裂事故?。
virtual_router_id同一二層網絡內必須唯一(0-255),不同集群不能重復,否則 Keepalived 會異常退出?。
搶占模式為避免 MASTER 恢復后頻繁漂移,主備均設為 BACKUP + 加 nopreempt;如需延遲搶占,再配?preempt_delay N?。
ARP 參數必須顯式添加?garp_master_delay 1?與?garp_master_refresh 5,防止切換后 ARP 不更新導致 VIP 不通?。
vrrp_strict如果啟用,會強制檢查校驗和并自動加 iptables 規則,極易把 VIP 封掉,建議刪除或注釋掉?。
advert_int默認 1 秒;云網絡抖動場景可調大到 3-5 秒,犧牲收斂速度換取穩定性,避免頻繁主備倒換?。
track_script / track_interface業務探測腳本?interval?設置過小會超時誤判,建議 ≥5 s;接口 down 事件也要跟蹤,防止“假存活”?。
VIP 數量與網卡單網卡 VIP ≤5 個;如需更多,在?global_defs?加?vrrp_garp_master_repeat 1,避免 GARP 風暴?。

以上就是高可用集群KEEPALIVED的詳細部署!?

?

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

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

相關文章

[論文閱讀] 人工智能 + 軟件工程 | NoCode-bench:評估LLM無代碼功能添加能力的新基準

NoCode-bench&#xff1a;評估LLM無代碼功能添加能力的新基準 論文&#xff1a;NoCode-bench: A Benchmark for Evaluating Natural Language-Driven Feature Addition 研究背景&#xff1a;當AI嘗試給軟件"加新功能"&#xff0c;我們需要一張靠譜的"考卷"…

【Git知識】Git 常用知識集合之基礎--分支系統與 Tag 標簽機制

&#x1f9f0; Git 常用知識集合Git 是程序員的“時間機器”。這份手冊幫你從入門到精通&#xff0c;把 Git 玩明白。1?? Git 基礎操作流程 &#x1f4cc; 三步走流程&#xff1a;添加 → 提交 → 推送 git add . # 把所有修改加入暫存區 git commit -m …

深入解析 Spark:關鍵問題與答案匯總

在大數據處理領域&#xff0c;Spark 憑借其高效的計算能力和豐富的功能&#xff0c;成為了眾多開發者和企業的首選框架。然而&#xff0c;在使用 Spark 的過程中&#xff0c;我們會遇到各種各樣的問題&#xff0c;從性能優化到算子使用等。本文將圍繞 Spark 的一些核心問題進行…

Python-初學openCV——對openCV的簡單使用

一、概述1、簡單介紹OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一個開源的計算機視覺庫&#xff0c;旨在為實時圖像處理提供強大的功能。它由Intel開發&#xff0c;現由開源社區維護。OpenCV 提供了跨平臺的解決方案&#xff0c;支持 Windows、Linu…

去中心化時代的通信革命:briefing與cpolar技術融合帶來的安全范式革新

文章目錄前言1.關于briefing2.本地部署briefing3.使用briefing4.cpolar內網穿透工具安裝5.創建遠程連接公網地址6.固定briefing公網地址前言 數字協作本該是提升效率的過程&#xff0c;卻被這些數據管理問題不斷困擾&#xff1a;平臺條款中的監控聲明、跨網絡環境的接入障礙、…

GitHub新手生存指南:AI項目版本控制與協作實戰

點擊 “AladdinEdu&#xff0c;同學們用得起的【H卡】算力平臺”&#xff0c;H卡級別算力&#xff0c;按量計費&#xff0c;靈活彈性&#xff0c;頂級配置&#xff0c;學生專屬優惠。 代碼倉庫創建 分支管理 PR提交 開源項目復現 讀者收獲&#xff1a;掌握團隊開發必備技能…

Axios封裝以及添加攔截器

在前端開發中&#xff0c;http請求層的封裝可以極大提升代碼的復用性和可維護性&#xff0c;本文將完整的用axios封裝接口請求&#xff0c;配置請求與響應攔截器&#xff0c;封裝統一的請求方法全過程。封裝的目的和思路在項目直接用axios發送請求當然沒問題&#xff0c;但是如…

C語言中奇技淫巧04-僅對指定函數啟用編譯優化

相信很多人使用GCC編譯代碼時&#xff0c;都會接觸到gcc -O0/1/2/3/s&#xff0c;知道它可以對工程進行全局優化。 事實上&#xff0c;除了全局優化外&#xff0c;使用GCC擴展方式&#xff0c;我們還可以僅對部分關鍵函數實施差異化編譯優化。 在GCC編譯器中&#xff0c;attrib…

HTML Style 對象深度解析:從基礎到高級應用

一、Style 對象的核心概念定義與作用 Style 對象是 HTML DOM 中用于操作元素內聯樣式的接口&#xff0c;通過 element.style 訪問。它允許動態修改元素的 CSS 屬性&#xff0c;但僅能直接影響內聯樣式&#xff08;即通過 style 屬性直接寫在標簽中的樣式&#xff09;。與外部樣…

【C++】定義常量

在 C 中&#xff0c;有兩種簡單的定義常量的方式&#xff1a; 使用 #define 預處理器。使用 const 關鍵字。 #define 預處理器 #include <iostream> using namespace std;#define LENGTH 10 #define WIDTH 5 #define NEWLINE \nint main() {int area; area LENGTH …

基于遺傳算法的多無人車協同偵察與安全保護策略優化

基于遺傳算法的多無人車協同偵察與安全保護策略優化 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家&#xff0c;覺得好請收藏。點擊跳轉到網站。 1. 引言 1.1 研究背景與意義 隨著無人系統技術的快速發…

python面向對象編程詳解

面向對象編程&#xff08;OOP&#xff09;是一種以對象為核心的編程范式。Python全面支持OOP&#xff0c;主要包含以下核心概念&#xff1a;一、類與對象1.類(Class)類是創建對象的模板或藍圖&#xff0c;它定義了對象的屬性和方法。class Dog:# 類屬性&#xff08;所有實例共享…

快速入門Socket編程——封裝一套便捷的Socket編程——導論

快速入門Socket編程——封裝一套便捷的Socket編程——導論 前言 ? 這里是筆者打算做的Socket編程的第二部分&#xff0c;也就是核心的討論我們Socket編程本身。 導論 ? 我們知道&#xff0c;一個經典的服務器套接字的處理流程是如下的&#xff1a; 創建一個指定傳輸層和網絡層…

【Mermaid 離線工具】Mermaid 流程圖生成器 - 高清PNG輸出,一鍵生成專業級流程圖!

文章目錄 Mermaid 流程圖生成器(離線版本):高效繪圖,離線也能玩轉專業可視化 一、Mermaid:文本繪圖的 “魔法語法” 二、離線版生成器:功能與優勢解析 (一)離線可用,場景更靈活 (二)操作流程:簡單五步,產出專業圖表 (三)界面設計:簡潔直觀,降低使用門檻 三、應…

haproxy原理及實戰部署

一、負載均衡 負載均衡是網絡架構和分布式系統中至關重要的技術&#xff0c;其核心作用是將大量的并發請求或數據流量合理分配到多個服務器&#xff08;或其他資源節點&#xff09;上&#xff0c;從而解決單節點壓力過大、資源利用率低、系統穩定性差等問題。 作用1. 提高系統吞…

jwt 在net9.0中做身份認證

一、新建net9.0項目WebApplication1&#xff0c;安裝包 <ItemGroup><PackageReference Include"Microsoft.AspNetCore.Authentication.JwtBearer" Version"9.0.7" /><PackageReference Include"Swashbuckle.AspNetCore" Version&…

【機器學習深度學習】微調能改變模型“智商”嗎?——模型能力與知識的本質解析

目錄 前言 一、模型的“知識”與“能力”&#xff1a;兩種不同的智能 第一種&#xff1a;淺層知識&#xff08;記憶 模式識別&#xff09; 第二種&#xff1a;深層能力&#xff08;推理 理解&#xff09; 二、微調&#xff1a;改變的是“經歷”&#xff0c;不是“天賦”…

oracle數據庫表空間碎片整理

oracle數據庫表空間碎片整理 表空間碎片情況檢查 表空間碎片問題處理 收縮表 表空間手動整理 exp/imp導出再導入 移動表到新的表空間 表空間碎片情況檢查 對比表實際使用空間和數據文件占用空間: --實際數據占用空間 select tablespace_name,round(sum(bytes/1024/1024/1024…

為什么需要可重入鎖

在黑馬點評項目實戰中&#xff0c;提到了可重入鎖&#xff0c;然后我想到了是不是不同業務在同一線程內反復獲取同一把鎖。本文來討論一下為什么鎖需要可重入。一、可重入鎖的核心&#xff1a;“同一線程多次獲取同一把鎖”??可重入&#xff08;Reentrant&#xff09;?? 的…

【AI】聯網模式

【AI】聯網模式 文章目錄【AI】聯網模式1. 簡介2. 接入步驟2.1 引入依賴2.2 方法構建2.3 接口構建1. 簡介 在使用聯網模式之前&#xff0c;我們如果問起ai一些最近網絡上流傳的一些東西&#xff0c;它可能并不能準確的給你描述出來&#xff0c;因為它的知識庫更新時間可能停留…