應用負載均衡之LVS(三):使用ipvsadm以及詳細分析VS/DR模式

来源:https://www.cnblogs.com/f-ck-need-u/archive/2018/02/26/8472744.html
-Advertisement-
Play Games

LVS系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html 本文目錄:1. 使用ipvsadm 1.1 安裝ipvsadm 1.2 ipvsadm語法2.實現VS/NAT模式的負載均衡3 VS/DR模式的數據包流向分析4.實現VS/DR模式的負 ...


LVS系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html


本文目錄:
1. 使用ipvsadm
 1.1 安裝ipvsadm
 1.2 ipvsadm語法
2.實現VS/NAT模式的負載均衡
3 VS/DR模式的數據包流向分析
4.實現VS/DR模式的負載均衡(CIP、VIP、RIP同網段)
5.實現VS/DR模式的負載均衡(CIP、VIP、RIP不同網段)
 5.1 CIP、RIP不同網段時為何特殊?
 5.2 反向路徑過濾rp_filter參數的作用
 5.3 實現VS/DR模式的負載均衡(CIP、RIP不同網段)

1.使用ipvsadm

ipvsadm是ipvs的命令行管理工具,可以定義、刪除、查看virtual service和Real Server的屬性。

1.1 安裝ipvsadm

可以直接yum安裝。以下是編譯安裝ipvsadm的過程,對於內核版本2.6.xx,需要安裝的ipvsadm版本要大於1.24。

# 下載ipvsadm
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz -P /tmp
cd /tmp
# 安裝依賴包
yum -y install libnl* popt*
# 安裝ipvsadm,註意不需要./configure
tar xf ipvsadm-1.26.tar.gz 
cd ipvsadm-1.26
make && make install

編譯安裝完之後,會在/etc/init.d/ (CentOS6)或/usr/lib/systemd/system/ (CentOS7)目錄下自動生成ipvsadm服務管理腳本,這和一般的編譯不一樣,比較人性化。

安裝ipvsadm後,生成以下文件。

[root@xuexi ~]# rpm -ql ipvsadm
/etc/sysconfig/ipvsadm-config
/usr/lib/systemd/system/ipvsadm.service
/usr/sbin/ipvsadm            # ipvs規則管理工具
/usr/sbin/ipvsadm-restore    # ipvs規則恢復工具
/usr/sbin/ipvsadm-save       # ipvs規則保存工具
/usr/share/doc/ipvsadm-1.27
/usr/share/doc/ipvsadm-1.27/README
/usr/share/man/man8/ipvsadm-restore.8.gz
/usr/share/man/man8/ipvsadm-save.8.gz
/usr/share/man/man8/ipvsadm.8.gz

1.2 ipvsadm語法

使用ipvsadm --help可以查看使用方法。ipvs的更多功能以及ipvsadm的更詳細用法,請man ipvsadm

ipvsadm的選項中,大寫選項管理虛擬服務virtual service,小寫選項管理關聯了虛擬服務的真實伺服器RealServer,"-L""-l"除外,它們同義。

(1).管理virtual services:
    添加:-A  -t|u|f service-address [-s scheduler]
            -t:tcp協議的集群
            -u:udp協議的集群
                service-address格式為IP:PORT
            -f:firewall-mark防火牆標記
                service-address:a num for mark
            -s:調度演算法
    修改:-E -t|u|f service-address [-s scheduler]     和-A使用方法一樣
    刪除:-D -t|u|f service-address
示例:
# ipvsadm -A -t 172.16.10.20:80 -s rr   (對外的地址,也就是VIP)

(2).管理virtual service中的RealServer:
    添加:-a  -t|u|f service-address -r server-address [-g|i|m] [-w weight]
        -t|u|f service-address:指定Real server所綁定的virtual service
        -r server-address:某RS地址,在NAT模型中,可IP:PORT實現埠映射,即埠無需等於VIP對應的port
        -g|i|m:指定lvs的類型,有三種:
            -g:gataway即DR類型(預設的模型)
            -i:--ipip,即TUN類型
            -m:masquerade地址偽裝即NAT
        -w:指定權重(需要調度演算法支持權重)
    修改:-e-a用法一樣
    刪除:-d  -t|u|f service-address -r server-address表示從哪個virtual service中刪除哪個realserver
示例:
# ipvsadm -a -t 172.16.10.20:80 -r 192.168.100.9 -m
# ipvsadm -a -t 172.16.10.20:80 -r 192.168.100.10 -m 

(3).查看:  
    -L或者-l:列出狀態信息,配合以下選項用於顯示更精確數據
        -n:只顯示數字格式,不反解IP地址和埠
        --stats:顯示統計信息
        --rate:顯示速率信息(每秒的值)
        --timeout:顯示tcp/tcpfin/udp的會話超時時間長度
        --daemon:顯示進程狀態和多播埠(不太用)
        --sort:對-n列出來的進行排序(按協議、IP、埠號升序排序)
        -c:顯示當前ipvs的連接狀況(不能和stats選項同用)

(4).其他項:
-Z:清空統計數據
-C:刪除一個或所有virtual service,連同與之綁定的real server也刪除
-S:保存規則  ipvsadm -S > /path/to/somefile 或者使用ipvsadm-save > /path/to/somefile
-R:載入規則  ipvsadm -R < /path/to/somefile 或者使用ipvsadm-restore < /path/to/somefile
    service ipvsadm save
    service ipvsadm restore

2.實現VS/NAT模式的負載均衡

實驗環境如下:

其中:
CIP:172.16.10.22
VIP:172.16.10.21
DIP:192.168.100.17
RIP1:192.168.100.39
RIP2:192.168.100.23

在開始操作前,先回顧下VS/NAT模式的相關內容:

請求過程:CIP-->VIP--ip_forward-->DIP-->RIP
響應過程:RIP-->DIP--ip_forward-->VIP-->CIP

由於director接收到CIP發送的數據包後,需要轉發給Real Server進行處理,但Real Server的RIP和DIP是同一網段的,因此Director必須將VIP介面上收到的數據包轉發給DIP,也就是說Director需要開啟ip_forward功能

當RS處理完成後,響應數據需要先轉發給Director,但因為響應數據的目標地址為CIP,因此需要將RS的網關指向Director的DIP,這樣CIP目的的數據包才能保證交給director進行處理並返回給客戶端。

因此,如下操作Director:假設該實驗中的VS/NAT採用wrr調度演算法。

echo 1 >/proc/sys/net/ipv4/ip_forward
ipvsadm -A -t 172.16.10.21:80 -s wrr
ipvsadm -a -t 172.16.10.21:80 -r 192.168.100.39 -m -w 2
ipvsadm -a -t 172.16.10.21:80 -r 192.168.100.23 -m -w 3

如下操作各RS:

yum -y install httpd
echo "from RS1:192.168.100.39" >/var/www/html/index.html  # 在RS1上操作
echo "from RS2:192.168.100.23" >/var/www/html/index.html  # 在RS2上操作
service httpd start
route add default gw 192.168.100.17

然後在客戶端Win2003上的瀏覽器上輸入http://172.16.10.21進行測試,同時測試調度演算法的比例。可以使用下麵的命令查看統計數據:

[root@xuexi ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.10.21:80 wrr
  -> 192.168.100.23:80            Masq    3      0          0   
  -> 192.168.100.39:80            Masq    2      0          0   

[root@xuexi ~]# ipvsadm -ln --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  172.16.10.21:80                    25      113       95    10293     8913
  -> 192.168.100.23:80                  15       67       55     6059     4921
  -> 192.168.100.39:80                  10       46       40     4234     3992

註意點:
(1).建議不要使用win7/win8/win10作為客戶端進行測試,而是使用win server類系統或直接使用unix系統測試。
(2).調度演算法是對連接進行調度,而不是對數據包、位元組等調度,因此查看統計數據時,應該比較的是Conns列的比例。另外,如果連接數大致滿足比例,但數據包或者位元組數卻遠不符合比例(高的多或低的多),那麼可能對應的那台RS主機性能比其它RS的性能要好或差。

實驗完成後,刪除Director上的virtual service,並重新設置RS上的預設路由。

ipvsadm -C
route del default gw 192.168.100.17   # 在RS1和RS2上操作

3.VS/DR模式的數據包流向分析

如圖:

在分析數據包流向前,需要釐清一個容易產生疑惑的要點:在VS/DR模式下,TCP連接是客戶端和RS之間建立的,Director只是負責改造、轉發建立TCP連接時的數據包給後端RealServer;當TCP連接建立完成後,就有了客戶端和服務端(RS)的概念,這時客戶端將直接和RS進行數據通信,而Director已經退出舞臺,不再負責改造、轉發請求數據包。也就是說,Director改造、轉發的數據包只有客戶端第一次發送的syn包,其它數據包和它無關可以想象,這樣的Director相比NAT模式,性能高的不是一點點。

  • (1).當客戶端發起http://VIP的請求時,數據包的源和目標地址為CIP-->VIP。這個數據包最終會到達Director。
  • (2).當Director收到請求數據包後,將根據調度演算法選擇一臺後端RealServer作為調度的目標。於是修改數據包的目標MAC地址為該RealServer的RIP所在MAC地址。數據包將轉發給該RS,此時數據包的源和目標IP地址仍然為CIP-->VIP,但源和目標MAC地址為DIP_MAC-->RIP_MAC
    • 需要註意的是,Director要將數據包交給RS,需要從VIP介面轉發給DIP介面,因此Director需要開啟ip_forward功能。但如果VIP和DIP/RIP處於同一個網段,則無需開啟該轉發功能,因為VIP介面可以直接和RIP介面通信,這時DIP沒有存在的必要。
  • (3).被調度到的RS收到Director轉發的數據包後,發現目標IP地址已經配置在自身內核,因此會收下該數據包。之後會處理請求,並構建響應數據。
  • (4).RS將響應數據響應給客戶端,該響應數據包的源和目標IP地址為VIP-->CIP
    • 由於RS上的VIP一般配置在lo的別名介面上,它無法和外界直接通信,因此數據包最終會從普通網卡上流出,如RIP所在介面。根據TCP/IP協議,響應數據包的源MAC地址也將是普通網卡(如RIP所在介面)的MAC地址。這一細節在後面配置CIP、VIP、RIP不同網段時會引出一種特殊問題,詳情見後文。

4.實現VS/DR模式的負載均衡(CIP、VIP、RIP同網段)

CIP、VIP和RIP同網段時,配置非常簡單,幾乎無需考慮額外的路由問題,也都無需分析數據包流向問題。

實驗環境如下:

其中:
CIP:192.168.100.46
VIP:192.168.100.11
DIP:192.168.100.17(由於VIP和RIP同網段,因此它是多餘的)
RIP1:192.168.100.47
RIP2:192.168.100.23

配置過程:
如下操作各RS:

# (1).提供web服務和測試頁面
yum -y install httpd
echo "from RS1:192.168.100.47" >/var/www/html/index.html  # 在RS1上操作
echo "from RS2:192.168.100.23" >/var/www/html/index.html  # 在RS2上操作
service httpd start

# (2).設置arp參數
echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce

# (3).設置VIP
ifconfig lo:0 192.168.100.11/32 up
route add -host 192.168.100.11 dev lo:0

如下操作Director:由於VIP和RIP同網段,因此無需開啟ip_forward

ipvsadm -C
ipvsadm -A -t 192.168.100.11:80 -s wrr
ipvsadm -a -t 192.168.100.11:80 -r 192.168.100.47:80 -g -w 2
ipvsadm -a -t 192.168.100.11:80 -r 192.168.100.23:80 -g -w 1

測試時,建議不要使用win7/win8/win10作為客戶端,而是使用win server類系統或直接使用unix系統測試。

5.實現VS/DR模式的負載均衡(CIP、VIP、RIP不同網段)

5.1 CIP、RIP不同網段時為何特殊?

考慮實際的生產環境,由於公網地址有限,一般只給web server的負載均衡系統分配一個公網地址。這個公網地址可能直接分配給VIP,這樣CIP、VIP、RIP兩兩都處於不同網段;還可能分配給路由器或防火牆,然後VIP和RIP都是用私網地址,這樣VIP/RIP同網段,但它們和CIP不同網段。

不管公網地址分配給誰,CIP、RIP總是不同網段的。這時需要考慮以下幾個問題:

  1. RS將響應數據響應給客戶端,該響應數據包的源和目標IP地址為VIP-->CIP,但因為是從RIP所在網卡流出的,這個響應數據包的源MAC地址為MAC_RIP;
  2. 由於RIP和CIP不同網段,因此RS需要藉助某個路由設備來轉發這個數據包;
  3. 由於RS上的VIP被隱藏,DIP/RIP所在網段的所有主機(包括這個路由設備)上緩存的關於VIP的arp記錄都是Director上的(即VIP<-->MAC_V),即使重新發起arp請求,也只能獲取到這樣的對應關係。因此,響應數據包的源IP、源MAC的對應關係和路由設備arp緩存中記錄不一致,這個響應數據包是"非法"數據包。就像同宿舍的人都知道你和你的身份證號碼,但如果有一個人拿著你的身份證去找你的舍友辦事,他肯定知道這個人是冒充的;
  4. 這個路由設備發現數據包的源MAC地址、源IP和它arp緩存中的記錄不一致,它會丟棄這個數據包嗎?分三種情況:
    • (1).如果這個數據包的目標IP就是自身的,它會收下這個數據包並處理。當RIP和Client的某個網卡同網段時,就是這種情況,此時Client就是最終的路由目標。
    • (2).如果這個數據包被路由到普通的路由設備上,路由設備預設會將這個數據包丟棄,因為會檢查源地址。這稱為"reverse path filter"(反向路徑過濾)功能。Linux上控制該功能的參數為rp_filter。
    • (3).如果這個數據包被路由到Director所在主機(Linux)上,預設會丟棄這個數據包,因為源IP地址正好在本機上。但可以為內核打上forward_shared補丁,以便使用forward_shared和rp_filter參數來開啟轉發源IP地址為自身地址數據包的功能。轉發時,需要設置轉發介面為VIP所在介面,這樣數據包的源MAC地址和VIP相互對應,之後的路由過程會一路順暢。
      根據第四點的三種情況,RS上的路由表可以按需設置成三種情況。當然,第一種情況在實際環境中是不可能的。第二種情況設置很簡單,但路由設備關閉源IP地址檢查功能後,將更容易受到DDos攻擊。第三種情況可以忽略,不僅要重新編譯內核,更重要的是VS/DR模式的優點本就在於讓Director專註於調度工作來實現高性能。

因此,本文將以第二種情況來做實驗測試。第三種情況可參考網上一篇博文:LVS-DR VIP和RIP不同網段的配置方法

5.2 反向路徑過濾rp_filter參數的作用

以下是Linux內核文檔中關於rp_filter變數的描述:

rp_filter - INTEGER
    0 - No source validation.
    1 - Strict mode as defined in RFC3704 Strict Reverse Path
        Each incoming packet is tested against the FIB and if the interface
        is not the best reverse path the packet check will fail.
        By default failed packets are discarded.
    2 - Loose mode as defined in RFC3704 Loose Reverse Path
        Each incoming packet's source address is also tested against the FIB
        and if the source address is not reachable via any interface
        the packet check will fail.

    Current recommended practice in RFC3704 is to enable strict mode
    to prevent IP spoofing from DDos attacks. If using asymmetric routing
    or other complicated routing, then loose mode is recommended.

    The max value from conf/{all,interface}/rp_filter is used
    when doing source validation on the {interface}.

    Default value is 0. Note that some distributions enable it
    in startup scripts.

大致說明下:rp_filter參數有三個值,0、1、2,Linux上預設為1。

  • 0:不開啟源地址校驗。
  • 1:開啟嚴格的反向路徑校驗。對每個進來的數據包,校驗其反向路徑是否是最佳路徑。如果反向路徑不是最佳路徑,則直接丟棄該數據包。
  • 2:開啟鬆散的反向路徑校驗。對每個進來的數據包,校驗其源地址是否可達,即反向路徑是否能通(通過任意網口),如果反向路徑不通,則直接丟棄該數據包。這個值是只是為了防止轉發無效或冒充的源IP地址,如192.16.10這樣的不完整IP。
  • 取/proc/sys/net/ipv4/conf/{all,interface}/rp_filter中的最大值生效。註意,對lo介面設置該參數是無意義的。

對於CIP、RIP不同網段的VS/DR模式來說,當RS將響應數據包(ack+syn)交給Linux路由設備,數據包源IP是VIP,源MAC地址是RIP_MAC。Linux充當路由設備時:

如果設置rp_filter=1(預設),會反向檢查源IP是否是最佳路徑。顯然,由於Linux Router上只能獲取到Director上的VIP<-->MAC_VIParp緩存記錄,因此反向檢查時總是查找到Director上去,但這不是到RIP_MAC的路徑,因此丟棄該數據包。

如果設置rp_filter=2,由於Router反向檢查時能和VIP能互相通信(儘管是和Director上的VIP通信),因此數據包保留。

如果設置rp_filter=0,則完全不檢查源地址,直接轉發。

一般情況下,保持預設值比較安全,這樣可以防止DDos攻擊。如果有修改該參數的需要,則應該將其設置為2。無可奈何的情況下才設置為0。

5.3 實現VS/DR模式的負載均衡(CIP、VIP不同網段)

實驗環境如下:之所以Client-->Router-->Director給出了虛線,是因為這裡CIP和VIP同網段,它會直接和Director通信,而不會經過Router,但這並不影響結果。

為了測試的便利性,將Director自身也設置為一個RS,其RIP設置為127.0.0.1。

因此:
CIP:172.16.10.22
Route IP1:172.16.10.23
Route IP2:192.168.100.32
VIP:172.16.10.21
DIP:192.168.100.17
RIP1:192.168.100.47
RIP2:192.168.100.23
RIP3:127.0.0.1(在Director上的RIP)

配置過程:
如下操作各RS:不包括Director上的本地RS

# (1).提供web服務和測試頁面
yum -y install httpd
echo "from RS1:192.168.100.47" >/var/www/html/index.html  # 在RS1上操作
echo "from RS2:192.168.100.23" >/var/www/html/index.html  # 在RS2上操作
service httpd start

# (2).設置arp參數
echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce

# (3).設置VIP
ifconfig lo:0 172.16.10.21/32 up
route add -host 172.16.10.21 dev lo:0

# (4).修改RS數據包流出的網關為Router,以保證能和外界客戶端通信
route del default
route add default gw 192.168.100.32

如下操作Router:開啟轉發功能,但暫時不設置rp_filter,以查看實驗結果

echo 1 > /proc/sys/net/ipv4/ip_forward

最後如下操作Director:

echo 1 > /proc/sys/net/ipv4/ip_forward
ipvsadm -C
ipvsadm -A -t 172.16.10.21:80 -s wrr
ipvsadm -a -t 172.16.10.21:80 -r 192.168.100.47:80 -g -w 1
ipvsadm -a -t 172.16.10.21:80 -r 192.168.100.23:80 -g -w 1
ipvsadm -a -t 172.16.10.21:80 -r 127.0.0.1:80 -g -w 1

# 提供本地RS
yum -y install httpd
echo "from RS3:127.0.0.1" >/var/www/html/index.html
service httpd start

# 添加目標地址為CIP的路由,以便調度到本地RS時,數據包能經過Router轉發,而非Director直接返回給Client
route add -host 172.16.10.22 gw 172.16.10.23

測試時,只有當調度到RS3時,才能得到正確的響應結果,而調度器調度到RS1和RS2時,將無法得到正確的響應。實際上是客戶端和RS1、RS2無法建立TCP連接。

查看Director上的狀態。

[root@xuexi ~]# ipvsadm -ln -c
IPVS connection entries
pro expire state       source             virtual            destination
TCP 14:58  ESTABLISHED 172.16.10.22:1683  172.16.10.21:80    127.0.0.1:80
TCP 00:57  SYN_RECV    172.16.10.22:1679  172.16.10.21:80    192.168.100.23:80
TCP 00:55  SYN_RECV    172.16.10.22:1681  172.16.10.21:80    192.168.100.47:80

註意,這裡顯示的狀態是RS上的TCP連接狀態,不是Director的。SYN_RECV表示RS1/RS2發送的syn+ack得不到客戶端的回應。如果在Router和Client機器上抓包分析的話,會發現syn+ack數據包到Router上就斷了,Client根本就沒收到syn+ack。

正如前面的分析,只有調度到RS3時,響應數據包的源MAC地址、源IP地址和Router上的arp緩存記錄是對應的。預設rp_filter=1反向檢查時,這正好是最佳路徑。而調度到RS1和RS2時,Router反向檢查時由於只能檢查到Director上的VIP,因此數據包會被丟棄。

現在,將Router上和RS通信的介面rp_filter設置為2。

echo 2 >/proc/sys/net/ipv4/conf/eth0/rp_filter

再測試時,發現無論是RS1、RS2、RS3都能正確響應結果。

 

回到Linux系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7048359.html
回到網站架構系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7576137.html
回到資料庫系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7586194.html
轉載請註明出處:http://www.cnblogs.com/f-ck-need-u/p/8472744.html

註:若您覺得這篇文章還不錯請點擊右下角推薦,您的支持能激發作者更大的寫作熱情,非常感謝!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 是不是代碼會占用空間,如果一個程式初始化需要 100M 的代碼,那麼在他初始化之後,這些代碼就沒有作用了,他會不會占空間?本文經過測試發現,代碼也是會占空間 ...
  • 有時候需要把枚舉轉字元串,那麼如何把枚舉轉字元串? <! more 枚舉轉字元串 假如需要把枚舉轉字元串,可以直接把他進行轉換,請看代碼 這樣就可以把枚舉轉字元串 除了這個方法,可以使用 C 6.0 的關鍵字,請看代碼 字元串轉枚舉 如果把一個枚舉轉字元串,那麼如何把字元串轉枚舉?可以使用 不過這個 ...
  • 花了幾天時間,看了好多篇博客,終於搞定了網站的HTTPS服務,藉此寫篇博客,來讓有需要的朋友少走彎路。 一、環境介紹 1、Linux下在Docker容器中部署好了一個網站,該網站需要通過外部提供程式訪問微軟的登錄平臺,利用的是OAuth2.0協議,因此要求必須要使用SSL服務,也使得網站必須要加入H ...
  • Microsoft的Scott Hunter發佈了Microsoft .NET Core 2.1版本的路線圖。Hunter宣佈Microsoft .NET Core每天約有五十萬開發人員的使用量。根據Microsoft所收集的數據,在2017年9月.NET Core 2的使用量已經超過了.NET C ...
  • 1.關機重啟1)關機shutdown -h now (立刻關機)shutdown -h 5 (5分鐘後關機)2)重啟shutdown -r now (立刻重啟)shutdown -r 5 (5分鐘後重啟)reboot (立刻重啟)2.遠程登錄1)ssh登錄ssh -l 用戶名 -p 埠 目標機器I ...
  • 前言 要在linux環境下麵工作,首先就要安裝好他的環境軟體,所以我們需要在我們的Linux系統中下載並且安裝jdk等文件。 一、安裝JDK 1.1下載合適版本的jdk 首先要到官網下載linux的版本的jdk,下載鏈接:http://www.oracle.com/technetwork/java/ ...
  • pkill命令可以按照進程名殺死進程。pkill和killall應用方法差不多,也是直接殺死運行中的程式;如果您想殺掉單個進程,請用kill來殺掉。 語法 選項 參數 進程名稱:指定要查找的進程名稱,同時也支持類似grep指令中的匹配模式。 實例 也就是說:kill對應的是PID,pkill對應的是 ...
  • sersync其實是利用inotify和rsync兩種軟體技術來實現數據實時同步功能的,inotify是用於監聽sersync所在伺服器上的文件變化,結合rsync軟體來進行數據同步,將數據實時同步給客戶端伺服器。 工作過程:在同步主伺服器上開啟sersync,負責監聽文件系統的變化,然後調用rsy ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...