㈠ Windows、linux和路由器的網路子介面-虛擬IP
前段時間在調試時,將外網接入內部區域網,然後使用向日葵遠程連接調試。Windows一個網路適配器只能設置一個IP地址,後面才發現可以通過網路子介面來設置虛擬IP,內部網路通過正常的IP地址通信,外部網路通過子介面來進行通信,即一個物理網口上連接兩個子網。Windows可以設置網路子介面,筆者就延申到Linux系統上,總結在不同平台設置網路子介面的方法。需要明確的是,虛擬IP的數據還是經過真實的物理網路介面。簡而言之,網卡設備都有一個MAC地址,但是卻可以有多個網路層IP地址。
本文以Windows10和CentOS8為例。
Windows平台上:
微軟官網對於網路子介面有這樣的描述:
1)一個邏輯IP網路正在使用中,並且此計算機需要使用多個IP地址才能在該網路上進行通信。
2)正在使用多個邏輯IP網路,並且此計算機需要一個不同的IP地址才能與每個不同的邏輯IP網路進行通信。
當不使用「常規」選項卡上的「自動獲取IP地址」時,才可以使用「高級TCP/IP設置」進行此網路連接,來完成高級IP定址。在設置裡面,Interface metric 介面度量標准(躍點數)可以設置該介面的優先順序,介面度量標準的值越小,表示使用該介面的優先順序越高。自動度量標准(自動躍點),最高速度的介面具有最低的介面度量值,優先順序越高。
Linux平台上:
Linux平台上虛擬ip基本上都用於高可用的架構上,比如keepalived就是通過託管VIP里完成飄逸,可以參考筆者以前的文章-Keepalived讓樹莓派也可以VIP漂移。其實這一篇文章對於keepalived也會有很好的理解了。看一下文章裡面的Keepalived後通過ip addr查看的結果。
VRRP協議來通信完成心跳檢測,然後使用輔助IP的ip addr add 來添加虛擬IP地址,主用不在線就del掉VIP,然後在從機上add 同樣的VIP。為什麼不是ifconfig命令呢,那就需要你仔細看看關鍵信息找區別了,如果你安裝了的話可以使用ifconfig來確定是否能夠查看到VIP。
接下里我們就看看在Linux中創建虛擬IP有兩種方法,分別是:別名IP(IP aliases)和輔助IP(secondary IP addresses)。
1、別名IP是通過ifconfig命令去創建和操作的虛擬ip。
sudo ifconfig enp0s3:1 192.168.31.5 broadcast 192.168.31.255 netmask 255.255.255.0 up
刪除別名IP,將up改為down。
sudo ifconfig enp0s3:1 192.168.31.5 broadcast 192.168.31.255 netmask 255.255.255.0 down
如果開機就需要別名IP地址的話,需要到/etc/sysconfig/network-scripts目錄下新建一個子介面來永久性修改配置文件。將原ifcfg-enp0s3文件復制後,然後修改其中的IP地址信息。
cp ifcfg-enp0s3 ifcfg-enp0s3:1
為了方便也可以將ifconfig命令去創建和操作的虛擬ip的命令加入到開機啟動中,詳情參考筆者以前的文章-Linux設置腳本開機啟動的四種方法。
2、輔助IP是由linux的ip命令去創建和操作的。
sudo ip addr add 192.168.31.5/24 brd 192.168.31.255 dev enp0s3 label enp0s3:1
設置完成後,也可以通過ifconfig來查看。但是如果在命令後面不添加label enp0s3:1的話,那麼ifconfig就不能查看了。
刪除輔助IP,將add替換成del即可。
sudo ip addr del 192.168.31.5/24 brd 192.168.31.255 dev enp0s3 label enp0s3:1
輔助IP需要持久化的話,只能將ip命令去創建和操作的虛擬ip的命令加入到開機啟動中了。
路由器通信設備:
路由器介面有限, 一個物理介面可以配置子介面(邏輯介面)的方式來實現一當多的功能。具體配置參考筆者的文章-eNSP模擬實驗-單臂路由實現VLAN間通信。
㈡ 兩台linux如何測試心跳
要想實現這樣的功能必須自己寫心跳程序,一般是用socket實現,並且兩台服務都必須是雙網卡才有意義。
首先,將兩台服務直連。
其次,建立心跳程序服務端和客戶端,分別安裝在主備服務上,主伺服器一直發alive信息給備伺服器,一單收不到信息,【就停止主伺服器】,備用伺服器啟動。
最後,發警告信息。
㈢ Linux系統納柚肨CP心跳機制Keepalive為什麼總是無效果
對
於一個已經建立的tcp連接。如果在keepalive_time時間內雙方沒有任何的數據包傳輸,則開啟keepalive功能的一端將發送
keepalive數據包,若沒有收到應答,則每隔keepalive_intvl時間再發送該數據包,發送keepalive_probes次。一直沒有
收到應答,則發送rst包關閉連接。若收到應答,則將計時器清零。
㈣ linux c 語言怎麼實現心跳包
看你是怎麼定義(一般根據網路環境定義),比如說你的心跳包時間間隔為5分鍾,那伺服器可以檢測下客戶端6分鍾內有沒有發心跳包上來,有的話,重新計時6分鍾,如果6 分鍾內沒有上報心跳包的話,就把這客戶端的連接斷開.
㈤ ha什麼情況下切換 linux
HA全稱High Availability,翻譯過來叫做高可用,當心跳檢測失敗時,也就是互相之間檢測到連通性有問題時,會發生你說的切換
㈥ linux多線程 心跳機制怎麼實現
開一個線程每10秒發一次固定包啊,服務端收到次心跳包,固定回復吧!
㈦ 怎麼樣設備的心跳報文 在linux中的嵌入式設備中
心跳包類似於看門狗,一段時間內收不到信號,就認為設備掛了,設備掛了就重啟設備,或者重新連接設別。至於報文的內容無所謂,隨便定義就行了。
㈧ redhat linux6.2集群 如何添加心跳
心跳線就是二個伺服器有二個網口。用跳線接上。配成一個段的ip地址、這就成了心跳線
㈨ 求linux c語言的心跳包程序
首先,心跳包一般是30秒或者1分鍾一次才正常,3秒一次太頻繁,耗損資源,降低效率,心跳包其實就是你自己定義一條數據send給伺服器,伺服器recv到這條數據做下判斷就行了,如果1分鍾沒收到這條數據,就斷開此客戶端的socket連接,返回socket值,根據返回的值確定此客戶端掉線了.
㈩ 【tcp】心跳檢測,保活機制
為什麼要心跳檢查?
因為目前討論的數據連接場景,都是無源連接,排除NAT的情況,連接就是存在於src和dest兩端OS中的狀態機,為什麼會要用無源連接呢,有源是連接建立帶寬就分配好了,不傳有效數據這個帶寬也被佔用著,這不就浪費了,虛擬信號時代的電話就是有源的。
心跳檢查是兩端都要做的,不做的那一端一樣存在狀態不對而不自知的情況。
狀態機在兩端是有可能不一致的,比如一端認為這條連接已經銷毀,另外一端可能認為仍有效。心跳機制的作用之一就是解決這種不一致的情況,類似「校對」的作用。
在瀏覽器上請求一個需要長時間才得到結果的請求,最後返回超時錯誤。
你說的情況我們經常遇到,我估計你說的就是客戶端自己的超時設置,也就是如果http響應無法在限定時間內完成(比如1秒內),那麼客戶端應用程序自己會報timeout錯誤。
這應該不是中間設備做了reset,因為如果是那樣,這個中間設備應該會給客戶端和服務端都發TCP RST,然後客戶端報錯會變成ECONNRESET這種(ECONNRESET是linux的網路協議棧報給用戶空間程序的報錯)。
心跳消息顯示push ack是為何呢?
按照TCP協議(參考RFC793)規定,操作系統收到有PSH標志位的報文後,這些報文不會被駐留在接收緩沖區,而是要立即通知用戶空間程序來接收。這樣對於用戶空間程序及時收發處理心跳報文是有利的。
AWS的nlb keep-alive最大是350s,我們的服務端keep-alive是默認配置,客戶端使用了連接池,也進行了探測,但是有個騷操作是隨機選取池子裡面的一個鏈接進行探測,然後那些超過350s還沒探測的鏈接,再次使用就出問題了。
你說的「隨機選取池子裡面的一個鏈接進行探測」,我判斷是健康檢查,就是業務健康性(類似k8s的readiness probe),而不是keepalive。
如果是這樣的話,這個健康檢查確實不是為保活而生的,也很難達到保活的目的。建議這樣做設置:client idle timeout < LB idle timeout < server idle timeout,這樣可以盡可能的保證不出現連接失效的情況。
這里說的「保活時間」,不是心跳包的間隔,而是空閑保活時間,idle timeout。
保活機制:心跳包異常導致應用重啟?
https://time.geekbang.org/column/article/482610
如何解決 Keep-Alive 導致 ECONNRESET 的問題
https://zhuanlan.hu.com/p/86953757
解決使用 KeepAlive Agent 遇到的 ECONNRESET
https://zhuanlan.hu.com/p/34147188