lvs內核編譯
❶ 如何學習linux
1、學習linux要學的內容很多,很多東西必須了解其機制,所以並不單單的如windows那樣傻瓜式的學習,因為windows本身就是針對不懂電腦的人群。。
2、精通這種詞很難定義,反正要學的東西很多。
3、在windows下安裝虛擬機對於新手學習linux較方便,在linux安裝windows虛擬機(我的經驗是卡,我用的是vmware 而且不是一般的卡) ,起初條件差,自己裝了雙系統,後來就買兩台電腦,一台LINUX一台WINDOWS。
下面就是詳細的說一下。。
一.為什麼要學linux?
當然最重要是愛好和興趣!如果你這種必要學,或者根本不喜歡,請不要浪費時間,你學也學不好!
二.起步
你應該為自己創造一個學習linux的環境--在電腦上裝一個linux或unix
如何選擇版本:北美用redhat,歐洲用SuSE,桌面mandrake較多,而debian是技術最先進的linux開發人員中用debian的最多,其次是redhat,從全球linux各應用領域市場份額來看無疑redhat是最多的,此外還有很多出名的發行版本,不再列舉。
對於初學linux的人來說,我建議是使用redhat,原因如下:
1)現在很多書都是以redhat為例講的,為了與書本協調一致
2)周圍的人都用redhat,交流比較方便
3)redhat應用范圍廣,有典型性和代表性
4)它易於使用和安裝,我們沒有必要把時間浪費在「裝系統」上而應集中精力學習最有用的東西。
【注】現在覺得RH很死板,AS,ES等用在伺服器上或許不錯,Personal desktop用mandrake,debian,suse都不錯,筆者現在用Mandrake,因為她長得漂亮:)
如果你並不打算深入學習linux,而是有諸如適應北京市政府辦公平台遷移到linux上這種需要,那麼中軟,紅旗等中文linux是不錯的選擇
我強烈建議:自己親自動手把linux裝到你的硬碟上,你必須學會獨立安裝linux系統的技能,對於現在的版本來說,其實跟裝WinXP一樣簡單
從此現在開始,請不要以windows的工作方式來考慮問題,應該嘗試挖掘linux身上的「天才unix」的氣質。
三.進階
掌握至少50個以上的常用命令
理解shell管道"|",文件流重定向">"及追加">>"等
熟悉Gnome/KDE等X-windows桌面環境操作
掌握.tgz.rpm.biz等軟體包的常用安裝方法
學習添加外設,安裝設備驅動程序(比如modem)
熟悉Grub/Lilo引導器及簡單的修復操作
熟悉系統固有目錄的名稱及公用
學會用mount命令訪問其他文件系統
了解vi,gcc,gdb等常用編輯器,編譯器,調試器
學習linux環境下的簡單組網
建議:買一本不需要太厚的linux教材,大致可以滿足要求(現在的書越來越多了,還帶很多圖,我當時可沒這么多書)
四.高級應用
澄清一些概念:linux的普通操作與真正的系統管理不能相提並論,後者需要很多知識
1.英語
即使你不學linux,我也強烈建議你學好英文[U.S.english]。因為實質上計算機語言就是英文和字元,所謂的多國語言只是外部包裝。你必須能無障礙的閱讀大量的英文技術文檔在搜索引擎找到的英文網站和網頁中熟練的檢索最好能有用英文直接交流的能力,擺脫了這個障礙,你的學習和理解速度就能快很多,你就有機會拉開和別人的差距。
2.shell[sed/awk]
shell是命令解釋器,是內核與用戶界面交流通道,shell寫的小腳本有點類似於win下的.bat但shell比.bat強大的多,shell不只是解釋命令,更是一種編程語言,有時候幾百行的c用shell幾十行就能代替完成工作,因為shell的工作方式建立在系統已有的眾多應用程序之上
這也是CS中的一個重要思想。此外,shell可以實現工作自動化,這個概念也比較重要sed,awk用來處理文本,歷來很常用。
3.Perl/php
漂亮的腳本, CGI的首選,比ASP好,應用面很廣
4.C\C++
C、C++是linux/unix的核心語言,系統代碼都是C寫的
5.ASM
系統底層及內核,硬體,設備驅動程序,嵌入式開發都需要。//走核心路線的話,c\c++,asm最重要
6.Java,Python,Tcl,XML
五、系統管理篇
在熟悉linux的基礎上還需要掌握至少一種unix。我首推Solaris,其次是FreeBSD比如運營級系統一般是Solaris+Oracle/DB2之類的學習apache、ssh、sendmail/Qmail、proftp/vsftp、Samba、Squid、Mysql/PostgreSQL/Oracle、Bind等各種應用伺服器的構架及電子商務的應用熟悉TCP/IP協議族,學習諸如apache+php+proftp+mysql+quota的實現以及大型區域網,分布式集群等各種企業級應用解決方案熟悉多用戶管理,資料庫管理,文件系統,邏輯存儲管理,日誌分析,備份與災難數據修復系統補丁,內核升級,以及在此基礎上的防火牆構架等以保障系統安全在內的各種系統管理技能。
我覺得,如果在此基礎上再掌握路由/交換設備便是一個不錯的系統管理員
各種基於linux的解決方案可參考相關書籍和文獻,必要時用google或各大linux站點站內搜索引擎尋找最新文檔,以避免錯誤和漏洞有幾本技術大全和技術內幕我認為都是這方面不錯的書
六、深入學習linux
我個人理解的讀linux內核需要的基礎:在此之前,希望先把應用層的東西學一下,那樣會比較好理解
1.C
如果學過潭浩強的大學教科書(除了編幾個數學模型好像什麼也做不了的那種),建議再看一下《The C Programming Language》Second Edition這本聖經(如果想學緩沖區溢出,這點C的功力可能是不夠的,還有<C陷阱與缺陷>,<C專家編程>,<C\C++深層探索>,反正經典書看多了是沒有壞處的)
2.asm (AT&T語法,保護模式)
保護模式下的比較復雜,基本上每本講內核的書都會有介紹有80x86 Intel語法的基礎就行,
有興趣可以看看Intel的官方網站
3.數據結構(離散數學)
計算機專業的核心課程,重要性我就不說了
4.操作系統原理
看懂這個再去讀linux吧
5.微機原理/組成原理(數字電路)
底層直接和硬體打交道,所以這個也要
6.了解linux/unix
我想至少你要會操作吧,了解unix的API
7.軟體工程/編譯原理
❷ IPVS(LVS)負載均衡簡介及實驗測試
LVS是Linux Virtual Server的簡稱,也就是Linux虛擬伺服器, 是一個由章文嵩博士發起的自由軟體項目,現在已經是 Linux標准內核的一部分。LVS是一種叫基於TCP/IP的負載均衡技術,轉發效率極高,具有處理百萬計並發連接請求的能力。
LVS的IP負載均衡技術是通過IPVS模塊實現的。IPVS模塊是LVS集群的核心軟體模塊,它安裝在LVS集群作為負載均衡的主節點上,虛擬出一個IP地址和埠對外提供服務。用戶通過訪問這個虛擬服務(VS),然後訪問請求由負載均衡器(LB)調度到後端真實伺服器(RS)中,由RS實際處理用戶的請求給返回響應。
根據負載均衡器轉發客戶端請求以及RS返回響應機制的不同,將IPVS的轉發模式分為三種:VS/NAT,VS/DR,VS/TUN
DR模式下,客戶端的請求包到達負載均衡器的虛擬服務IP埠後,負載均衡器不會改寫請求包的IP和埠,但是會改寫請求包的MAC地址為後端RS的MAC地址,然後將數據包轉發;真實伺服器處理請求後,響應包直接回給客戶端,不再經過負載均衡器。所以DR模式的轉發效率是最高的,特別適合下行流量較大的業務場景,比如請求視頻等大文件。
DR模式的特點:
LB只是將數據包的MAC地址改寫為RS的MAC地址,然後轉發給相應的RS。
因為LB轉發時並不會改寫數據包的目的IP,所以RS收到的數據包的目的IP仍是LB的虛擬服務IP。為了保證RS能夠正確處理該數據包,而不是丟棄,必須在RS的環回網卡上綁定LB的虛擬服務IP。這樣RS會認為這個虛擬服務IP是自己的IP,自己是能夠處理這個數據包的。否則RS會直接丟棄該數據包!
因為LB不會改寫數據包的目的埠,所以RS服務的監聽埠必須和虛擬服務埠一致,否則RS會直接拒絕該數據包。
因為RS收到的請求數據包的源IP是客戶端的IP,所以理所當然RS的響應會直接回給客戶端,而不會再經過LB。這時候要求RS和客戶端之間的網路是可達的。
因為LB在轉發過程中需要改寫數據包的MAC為RS的MAC地址,所以要能夠查詢到RS的MAC。而要獲取到RS的MAC,則需要保證二者位於一個子網,否則LB只能獲取到RS網關的MAC地址。
NAT模式下,請求包和響應包都需要經過LB處理。當客戶端的請求到達虛擬服務後,LB會對請求包做目的地址轉換(DNAT),將請求包的目的IP改寫為RS的IP。當收到RS的響應後,LB會對響應包做源地址轉換(SNAT),將響應包的源IP改寫為LB的IP。
NAT模式的特點:
對於請求包,會進行DNAT;對於響應包,會進行SNAT。
雖然LB在轉發過程中做了NAT轉換,但是因為只是做了部分地址轉發,所以RS收到的請求包里是能看到客戶端IP的。
因為RS收到的請求包源IP是客戶端的IP,為了保證響應包在返回時能走到LB上面,所以需要將RS的默認網關地址配置為LB的虛擬服務IP地址。當然,如果客戶端的IP是固定的,也可以在RS上添加明細路由指向LB的虛擬服務IP,不用改默認網關。
因為需要將RS的默認網關配置為LB的虛擬服務IP地址,所以需要保證LB和RS位於同一子網。
又因為需要保證RS的響應包能走回到LB上,則客戶端不能和RS位於同一子網。否則RS直接就能獲取到客戶端的MAC,響應包就直接回給客戶端了,不會走網關,也就走不到LB上面了。這時候由於沒有LB做SNAT,客戶端收到的響應包源IP是RS的IP,而客戶端的請求包目的IP是LB的虛擬服務IP,這時候客戶端無法識別響應包,會直接丟棄。
IP隧道(IP tunneling)是將一個IP報文封裝在另一個IP報文的技術,這可以使得目標為一個IP地址的數據報文能被封裝和轉發到另一個IP地址。IP隧道技 術亦稱為IP封裝技術(IP encapsulation)。IP隧道主要用於移動主機和虛擬私有網路(Virtual Private Network),在其中隧道都是靜態建立的,隧道一端有一個IP地址,另一端也有唯一的IP地址。
利用IP隧道技術將請求報文封裝轉發給後端伺服器,響應報文能從後端伺服器直接返回給客戶。但在這里,後端伺服器有一組而非一個,所以我們不可 能靜態地建立一一對應的隧道,而是動態地選擇一台伺服器,將請求報文封裝和轉發給選出的伺服器。這樣,可以利用IP隧道的原理將一組伺服器上的網路服 務組成在一個IP地址上的虛擬網路服務。各個伺服器將VIP地址配置在自己的IP隧道設備上。
它的連接調度和管理與VS/NAT中的一樣,只是它的報文轉發方法不同。調度器根據各個伺服器的負載情況, 動態地選擇一台伺服器,將請求報文封裝在另一個IP報文中,再將封裝後的IP報文轉發給選出的伺服器;伺服器收到報文後,先將報文解封獲得原來目標地址為 VIP的報文,伺服器發現VIP地址被配置在本地的IP隧道設備上,所以就處理這個請求,然後根據路由表將響應報文直接返回給客戶。
輪叫調度(Round Robin Scheling)演算法就是以輪叫的方式依次將請求調度不同的伺服器,即每次調度執行i = (i + 1) mod n,並選出第i台伺服器。演算法的優點是其簡潔性,它無需記錄當前所有連接的狀態,所以它是一種無狀態調度。
LB會根據RS上配置的權重,將消息按權重比分發到不同的RS上。可以給性能更好的RS節點配置更高的權重,提升集群整體的性能。
最小連接調度(Least-Connection Scheling)演算法是把新的連接請求分配到當前連接數最小的伺服器。最小連接調度是一種動態調度演算法,它通過伺服器當前所活躍的連接數來估計服務 器的負載情況。調度器需要記錄各個伺服器已建立連接的數目,當一個請求被調度到某台伺服器,其連接數加1;當連接中止或超時,其連接數減一。
加權最小連接調度(Weighted Least-Connection Scheling)演算法是最小連接調度的超集,各個伺服器用相應的權值表示其處理性能。伺服器的預設權值為1,系統管理員可以動態地設置伺服器的權 值。加權最小連接調度在調度新連接時盡可能使伺服器的已建立連接數和其權值成比例。
基於局部性的最少鏈接調度(Locality-Based Least Connections Scheling,以下簡稱為LBLC)演算法是針對請求報文的目標IP地址的負載均衡調度,目前主要用於Cache集群系統,因為在Cache集群中 客戶請求報文的目標IP地址是變化的。這里假設任何後端伺服器都可以處理任一請求,演算法的設計目標是在伺服器的負載基本平衡情況下,將相同目標IP地址的 請求調度到同一台伺服器,來提高各台伺服器的訪問局部性和主存Cache命中率,從而整個集群系統的處理能力。
帶復制的基於局部性最少鏈接調度(Locality-Based Least Connections with Replication Scheling,以下簡稱為LBLCR)演算法也是針對目標IP地址的負載均衡,目前主要用於Cache集群系統。它與LBLC演算法的不同之處是它要 維護從一個目標IP地址到一組伺服器的映射,而LBLC演算法維護從一個目標IP地址到一台伺服器的映射。對於一個「熱門」站點的服務請求,一台Cache 伺服器可能會忙不過來處理這些請求。這時,LBLC調度演算法會從所有的Cache伺服器中按「最小連接」原則選出一台Cache伺服器,映射該「熱門」站 點到這台Cache伺服器,很快這台Cache伺服器也會超載,就會重復上述過程選出新的Cache伺服器。這樣,可能會導致該「熱門」站點的映像會出現 在所有的Cache伺服器上,降低了Cache伺服器的使用效率。LBLCR調度演算法將「熱門」站點映射到一組Cache伺服器(伺服器集合),當該「熱 門」站點的請求負載增加時,會增加集合里的Cache伺服器,來處理不斷增長的負載;當該「熱門」站點的請求負載降低時,會減少集合里的Cache伺服器 數目。這樣,該「熱門」站點的映像不太可能出現在所有的Cache伺服器上,從而提供Cache集群系統的使用效率。
目標地址散列調度(Destination Hashing Scheling)演算法也是針對目標IP地址的負載均衡,但它是一種靜態映射演算法,通過一個散列(Hash)函數將一個目標IP地址映射到一台伺服器。
目標地址散列調度演算法先根據請求的目標IP地址,作為散列鍵(Hash Key)從靜態分配的散列表找出對應的伺服器,若該伺服器是可用的且未超載,將請求發送到該伺服器,否則返回空。
源地址散列調度(Source Hashing Scheling)演算法正好與目標地址散列調度演算法相反,它根據請求的源IP地址,作為散列鍵(Hash Key)從靜態分配的散列表找出對應的伺服器,若該伺服器是可用的且未超載,將請求發送到該伺服器,否則返回空。它採用的散列函數與目標地址散列調度演算法 的相同。它的演算法流程與目標地址散列調度演算法的基本相似,除了將請求的目標IP地址換成請求的源IP地址。
客戶端發送對VIP的請求,lvs負載到後端某一台server,後端server處理後,直接封包回送客戶端,源IP地址一定是lvs上面配的那個公網服務地址,也就後端server要配置這個ip,後端server收到的數據包是lvs沒有變動過的(IP:vip),多個server,接入互聯網的server持有相同的IP,是不允許的,因此,必須將後端server中的vip隱藏起來(對外隱藏,對自己可見)
VIP: 虛擬伺服器地址
DIP: 轉發的網路地址
1,和RIP通信:ARP協議,獲取Real Server的RIP:MAC地址;
2,轉發Client的數據包到RIP上,RIP上要求有VIP(對外隱藏VIP);
RIP: 後端真實主機(後端伺服器)
CIP: 客戶端IP地址
對外隱藏,對內可見
kernel parameter:
目標mac地址為全F,交換機觸發廣播
arp_ignore: 定義接收到ARP請求時的響應級別;
0:只要本地配置的有相應地址,就給予響應;
1:僅在請求的目標(MAC)地址配置請求
到達的介面上的時候,才給予響應;
arp_announce:定義將自己地址向外通告時的通告級別;
0:將本地任何介面上的任何地址向外通告;
1:試圖僅向目標網路通告與其網路匹配的地址;
2:僅向與本地介面上地址匹配的網路進行通告;
lvs 主機:192.168.56.118
RIP主機:也就是需要負載的伺服器,192.168.56.101-103
LVS是Linux Virtual Server的簡寫,意即Linux虛擬伺服器,是一個虛擬的伺服器集群系統,後來將lvs嵌入到linux內核,叫做ipvs
ipvs參數
保存規則
-S
載入此前的規則:
-R
配置lvs的VIP
確保/proc/sys/net/ipv4/ip_forward 內容是1
調整RS的響應。通告級別(每一台RS都配):
配置RS的VIP(每一台RS都配)
啟動RS上的httpd
編寫測試文件
啟動httpd
客戶端驗證:
RIP:80 能顯示
VIP:80不能顯示
負載伺服器安裝LVS管理工具—ipvsadm
瀏覽器刷新: 訪問vip:80
在DR模式中是所有服務機共享一個VIP,但是在IP隧道模式中,就相當於主代理機將包經過自己打包之後,將IP轉化成公網可傳遞的IP,並將消息經過自己又一次的打包,發送給真實伺服器,真實伺服器對這個請求作出響應,這樣就達到一個可以跨地區的傳輸。並且也避免了DR模式中代理機與真實服務機必須在同一區域網的不便。
說明:
1、當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。此時報文的源IP為CIP,目標IP為VIP 。
2、PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈
3、IPVS比對數據包請求的服務是否為集群服務,若是,在請求報文的首部再次封裝一層IP報文,封裝源IP為為DIP,目標IP為RIP。然後發至POSTROUTING鏈。此時源IP為DIP,目標IP為RIP
4、POSTROUTING鏈根據最新封裝的IP報文,將數據包發至RS(因為在外層封裝多了一層IP首部,所以可以理解為此時通過隧道傳輸)。此時源IP為DIP,目標IP為RIP
5、RS接收到報文後發現是自己的IP地址,就將報文接收下來,拆除掉最外層的IP後,會發現裡面還有一層IP首部,而且目標是自己的lo介面VIP,那麼此時RS開始處理此請求,處理完成之後,通過lo介面送給eth0網卡,然後向外傳遞。此時的源IP地址為VIP,目標IP為CIP
RIP、VIP、DIP全是公網地址
RS的網關不會也不可能指向DIP
所有的請求報文經由Director Server,但響應報文必須不能進過Director Server
不支持埠映射
RS的系統必須支持隧道
LVS伺服器:192.168.56.100
RS伺服器:192.168.56.101,192.168.56.102,192.168.56.103
4.4.5 ### 系統配置 vim /etc/sysctl.conf
4.5.5 ### 系統配置 vim /etc/sysctl.conf
❸ 145LVS 集群負載均衡實戰--LVS實戰
在本實驗環境中我們沒有辦法為大家提供多台伺服器來模擬集群環境,由此我們 docker 工具來創建多個 container 來模擬集群所需要的多台伺服器。
docker 可以簡單的理解為非常輕量級的虛擬機工具,而 container 則理解為創建的虛擬機。
集群系統中,伺服器資源可以簡單分為兩種角色:
一種是 Load Balancer,即負載均衡調度器,位於集群系統的前端,對後端伺服器實現負載均衡作用,對外 IP 地址也稱為 VIP(虛擬 IP 地址)。
另一種就是後端伺服器群,處理由 Load Balancer 發來的請求。
整個集群系統結構:
宿主機環境(默認桌面環境):裝有 ipvsadm(LVS 的 IP 負載由 IPVS 內核模塊完成,ipvsadm 是為 IPVS 編制規則的工具),充當負載均衡調度器
宿主機瀏覽器:通過宿主機中的瀏覽器來充當客戶端
RealServer1 的 container:部署 Nginx web 伺服器,提供 Web 訪問服務,充當伺服器池中的一員
RealServer2 的 container:部署 Nginx web 伺服器,提供 Web 訪問服務,充當伺服器池中的一員
我們將通過這樣的一些步驟來完成此次的實驗:
本地安裝 ipvsadm 工具,載入 IPVS 模塊
通過 docker 創建兩個 container 來模擬伺服器池中的成員
配置兩台 RealServer 的環境:
安裝 vim 與 nginx 工具
修改默認的 nginx 展示頁面
配置負載均衡調度機器:
修改內核轉發參數
配置 ipvsadm 規則
測試實驗效果
LVS 成功測試:我們能夠通過 VIP 訪問我們的 Nginx 站點,經過多次的刷新我們能夠訪問另一個站點的內容(以顯示的內容以作區分,因為負載並不高,所以需要很多次刷新,點擊地址欄,按住 F5 不放)
安裝 ipvsadm 工具
首先為了能夠使用 IPVS 內核模塊,我們將在宿主機中安裝 ipvsadm,並嘗試能否使用:
命令講解:
docker run:創建 docker 容器
name 參數:給容器命名,方便區分
tid 參數:分配 tty,能夠與之交互
ubuntu:指定容器鏡像,這里使用 ubuntu 鏡像
安裝相關工具
為了區分 RealServer1 和 RealServer2 的 Nginx 響應頁面,需要修改默認 nginx 的展示 html 頁面。
按 i 鍵插入,按 esc 再輸入 :wq 保存退出。
注意若完成了 RealServer1 的配置之後,如果我們不想打開新的終端,可以通過 ctrl+p+q 的組合快捷鍵脫離當前機器的登錄,切勿使用 exit 的方式退出 container,這樣的方式關閉伺服器的。 脫離之後便會返回到 shiyanlou 的 zsh 交互,可以通過 docker attach RealServer2 的命令來登錄另一台機器,然後做類似的操作(同上的軟體安裝操作以及 nginx 啟動操作)
接下來就修改 nginx 頁面,如下所示:
LoadBalancer 的對外 IP 地址為 VIP,即 VIP 地址為 120.26.15.9 (注意,你的 VIP 地址可能和我的不一樣,根據自己實際情況來)。對內 IP 稱為 RIP,此時 RIP 為 192.168.0.1。
2.開啟 LoadBalancer 的內核路由轉發:
3.查看當前機器內核路由轉發開啟情況:
得到的值為 1,說明此機器已開啟內核路由轉發。進行下一步。
4.使用 ipvsadm 添加 ipvs 規則。定義集群服務:
上面命中 ipvsadm 參數講解:
以上便實現了 LVS 的 NAT 負載均衡系統。
與 NAT 方式相同,我們將通過 docker 來模擬我們的集群環境。
集群系統中,伺服器資源可以簡單分為兩種角色:
一種是 Load Balancer,即負載均衡調度器,位於集群系統的前端,對後端伺服器實現負載均衡作用,對外 IP 地址也稱為 VIP(虛擬 IP 地址)。
另一種就是後端伺服器群,處理由 Load Balancer 發來的請求。
整個集群系統結構:
宿主機環境(默認桌面環境):充當客戶端訪問 web 服務
LoadBalancer1 的 container:裝有 ipvsadm,充當負載均衡調度器
RealServer1 的 container:部署 Nginx web 伺服器,提供 Web 訪問服務,充當伺服器池中的一員
RealServer2 的 container:部署 Nginx web 伺服器,提供 Web 訪問服務,充當伺服器池中的一員
我們將通過這樣的一些步驟來完成此次的實驗:
本地安裝 ipvsadm 工具,載入 IPVS 模塊
通過 docker 創建三個 container 來模擬伺服器池中的成員
配置兩台 RealServer 的環境:
安裝 vim 與 nginx 工具
修改默認的 nginx 展示頁面
修改內核參數,抑制 arp
創建網卡別名與添加路由
配置一台 LoadBalancer 環境:
安裝 ipvsadm
配置網卡別名
配置 ipvsadm 規則
測試實驗效果
LVS 成功測試:我們能夠通過 VIP 訪問我們的 Nginx 站點,經過多次的刷新我們能夠訪問另一個站點的內容(以顯示的內容以作區分,因為負載並不高,所以需要很多次刷新,點擊地址欄,按住 F5 不放)
查看 ipvsadm 中的統計數據。
若是我們沿用 NAT 的實驗環境,我們需要做環境的清理:
1.首先清除 ipvsadm 的規則:
2.刪除之前所創建的 container,雖然都是提供 Web 服務,但是在 DR 模式中需要修改內核參數與創建網卡別名,需要超級許可權,所以不能沿用之前的 container:
安裝 ipvsadm 工具
因為在 NAT 實驗中我們已安裝所以可跳過該步驟,若是新啟動的環境請參考 NAT 中的步驟,此處提示務必在宿主機環境中執行 ipvsadm -L 的驗證步驟,若是不執行該步驟,在 LoadBalancer 的 container 中我們將無法載入 IPVS 的內核模塊。
創建與配置伺服器池成員
同樣我們使用 docker 來模擬我們的集群環境,創建三台 container:
其中 --privileged 參數用於給予容器超級許可權。
完成我們伺服器池成員的創建之後,我們參照 NAT 中配置步驟完成 RealServer 中的:
nginx 與 vim 的安裝
默認展示頁面的修改
nginx 服務的啟動
在完成這樣的配置之後我們需要一些額外的操作:
1.修改內核參數
以 RealServer1 為例,登錄 container:
執行下列命令:
ARP 的內核參數: arp_ignore 部分參數:定義了本機響應 ARP 請求的級別
0 表示目標 IP 是本機的,則響應 ARP 請求。默認為 0
1 如果接收 ARP 請求的網卡 IP 和目標 IP 相同,則響應 ARP 請求
arp_announce 參數:定義了發送 ARP 請求時,源 IP 應該填什麼。
0 表示使用任一網路介面上配置的本地 IP 地址,通常就是待發送的 IP 數據包的源 IP 地址 。默認為 0
1 盡量避免使用不屬於該網路介面(即發送數據包的網路介面)子網的本地地址作為 ARP 請求的源 IP 地址。大致的意思是如果主機包含多個子網,而 IP 數據包的源 IP 地址屬於其中一個子網,雖然該 IP 地址不屬於本網口的子網,但是也可以作為ARP 請求數據包的發送方 IP。
2 表示忽略 IP 數據包的源 IP 地址,總是選擇網路介面所配置的最合適的 IP 地址作為 ARP 請求數據包的源 IP 地址(一般適用於一個網口配置了多個 IP 地址)
2.配置網卡別名
只有目的 IP 是本機器中的一員時才會做相應的處理,所以需要添加網卡別名:
同兩台 Web 伺服器中都做該配置,即完成了所有 Web 伺服器所需的配置工作。
** 配置調度器規則**
緊接著我們登錄 LoadBalancer 機器:
安裝 ipvsadm 軟體:
創建 eth0 的別名並綁定 VIP 地址,作為集群同時使用:
查看網卡信息:ifconfig
在 LoadBalancer 中添加 IPVS 規則:
ipvsadm 命令參數講解:
以上操作就實現了 LVS/DR 模式,實現集群系統的負載均衡。
❹ SUSE Linux Enterprise Server 11 SP2 安裝lvs 提示ip_vs模塊找不到
系統是你自己安裝的?還是雲主機?
ip_vs模塊從內核2.6開始已經是內置了,如果沒有的話,一般是因為內核被修改過,重新編譯過。
只能想到這么多,想不出別的原因。
❺ lvs fullnat 必須編譯內核么
fullnat開源已經有一陣子了,內核版本為2.6.32-220.23.1.e16,項目地址http://kb.linuxvirtualserver.org/wiki/IPVS_FULLNAT_and_SYNPROXY。本屌編譯測試環境如下:
centos6.3 64位
編譯過程參照官方做法,只是融入後續的打rpm包的部分。過程如下:
一、下載相關代碼:
下載 kernel-2.6.32-220.23.1.el6.src.rpmlinux-2.6.32-220.23.1.el6.x86_64.lvs.src.tar.gz
lvs-fullnat-synproxy.tar.gz
二、編譯內核
1、安裝kernel-2.6.32-220.23.1.el6.src.rpm
1
rpm -ivh kernel-2.6.32-220.23.1.el6.src.rpm
2、生成內核源碼
默認的,你會在root家目錄下看到rpmbuild目
1
2
cd ~/rpmbuild/SPECS
rpmbuild -bp kernel.spec
3、對生成的內核源碼打patch默認的
1
2
3
4
5
6
7
8
9
10
#在/usr/local/src下解壓linux-2.6.32-220.23.1.el6.x86_64.lvs.src.tar.gz
tar zxf linux-2.6.32-220.23.1.el6.x86_64.lvs.src.tar.gz
#打patch
cd ~/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64/
cp /usr/local/src/linux-2.6.32-220.23.1.el6.x86_64.lvs/lvs-2.6.32-220.23.1.el6.patch .
#淘寶將IP_VS改成了22,測試時遇到些麻煩,因此改為20了。
#vim .config
CONFIG_IP_VS_TAB_BITS=20
#你可以修改Makefile把內核的名稱做下標記(line:4)
EXTRAVERSION = .FNAT.shanks.e27.x86_64
4、make
1
2
3
make -j16
make moles_install
make install;
5、配置grub.conf
1
2
#vim /boot/grub/grub.conf
default=0
三、reboot
reboot之後uname -r看下是不是你想要的內核。
四、打內核rpm包
1、安裝kernel-2.6.32-220.23.1.el6.src.rpm
1
rpm -ivh /usr/local/src/kernel-2.6.32-220.23.1.el6.src.rpm
2、生成內核源碼目錄
1
rpmbuild -bp ~/rpmbuild/SPECS/kernel.spec
3、復制出一份內核源碼目錄
1
2
cd ~/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/
cp -a linux-2.6.32-220.23.1.el6.x86_64/ linux-2.6.32-220.23.1.el6.x86_64_new
4、為內核打fullnat的patch
1
2
3
cd linux-2.6.32-220.23.1.el6.x86_64_new/
patch -p1 < /usr/local/src/lvs-2.6.32-220.23.1.el6.patch
cp .config ~/rpmbuild/SOURCES/config-x86_64-generic
5、刪除原來內核源碼目錄中的.config文件。
1
2
cd ~/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64
rm -rf .config
不刪的話,會在最後打rpm時遇到報錯
wKioL1NM8jWhm-LPAAK42XDh8KU043.jpg
6、打自己的patch
1
2
cd ~/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/
diff -uNr linux-2.6.32-220.23.1.el6.x86_64 linux-2.6.32-220.23.1.el6.x86_64_new/ > ../../SOURCES/lvs-2.6.32-220.23.1.el6.patch
7、編輯kernel.spec
1
2
3
4
5
6
7
8
9
vim ~/rpmbuild/SPECS/kernel.spec
line:9 打上個版本號
%define dist .e27
line:22 打上個名稱的標記
%define distro_build fnat.shanks
line:605 標記下自己的patch
Patch999999: lvs-2.6.32-220.23.1.el6.patch
line:915 讓自己的patch生效
ApplyOptionalPatch lvs-2.6.32-220.23.1.el6.patch
8、打rpm
1
rpmbuild -bb --with baseonly --with firmware --without debuginfo --target=x86_64 SPECS/kernel.spec
1
2
3
4
5
6
7
8
9
10
11
12
在這里如果遇到這樣的報錯:
+ cp /root/rpmbuild/SOURCES/Mole.kabi_x86_64 /root/rpmbuild/BUILDROOT/kernel-2.6.32-fnat.shanks.e27.x86_64/Mole.kabi
+ /root/rpmbuild/SOURCES/check-kabi -k /root/rpmbuild/BUILDROOT/kernel-2.6.32-fnat.shanks.e27.x86_64/Mole.kabi -s Mole.symvers
*** ERROR - ABI BREAKAGE WAS DETECTED ***
The following symbols have been changed (this will cause an ABI breakage):
register_ip_vs_scheler
unregister_ip_vs_scheler
+ exit 1
error: Bad exit status from /var/tmp/rpm-tmp.0Wfj33 (%build)
RPM build errors:
Bad exit status from /var/tmp/rpm-tmp.0Wfj33 (%build)
可以在rpmbuild的時候加上--without kabichk
參考:https://fedoraproject.org/wiki/Building_a_custom_kernel/zh-cn
http://wiki.centos.org/HowTos/Custom_Kernel
❻ 求集群管理的相關知識!
集群技術案例介紹和具體操作
集群技術案例介紹和具體操作
中國科學院西安網路中心 中科紅旗linux培訓認證中心
集群技術
1.1 什麼是集群
簡單的說,集群(cluster)就是一組計算機,它們作為一個整體向用戶提
供一組網路資源。這些單個的計算機系統就是集群的節點(node)。一個理想的
集群是,用戶從來不會意識到集群系統底層的節點,在他/她們看來,集群是一
個系統,而非多個計算機系統。並且集群系統的管理員可以隨意增加和刪改集群
系統的節點。
1.2 為什麼需要集群
集群並不是一個全新的概念,其實早在七十年代計算機廠商和研究機構就
開始了對集群系統的研究和開發。由於主要用於科學工程計算,所以這些系統並
不為大家所熟知。直到Linux集群的出現,集群的概念才得以廣為傳播。
對集群的研究起源於集群系統良好的性能可擴展性(scalability)。提高CPU
主頻和匯流排帶寬是最初提供計算機性能的主要手段。但是這一手段對系統性能的
提供是有限的。接著人們通過增加CPU個數和內存容量來提高性能,於是出現了
向量機,對稱多處理機(SMP)等。但是當CPU的個數超過某一閾值,象SMP這些
多處理機系統的可擴展性就變的極差。主要瓶頸在於CPU訪問內存的帶寬並不能
隨著CPU個數的增加而有效增長。與SMP相反,集群系統的性能隨著CPU個數的
增加幾乎是線性變化的。圖1顯示了這中情況。
圖1. 幾種計算機系統的可擴展性
對於關鍵業務,停機通常是災難性的。因為停機帶來的損失也是巨大的。下
面的統計數字列舉了不同類型企業應用系統停機所帶來的損失。
中科紅旗linux技術支持服務中心---西安站 http://linux.xab.ac.cn
中國科學院西安網路中心 中科紅旗linux培訓認證中心
應用系統每分鍾損失(美元)
呼叫中心(Call Center) 27000
企業資源計劃(ERP)系統13000
供應鏈管理(SCM)系統11000
電子商務(eCommerce)系統10000
客戶服務(Customer Service Center)系統27000
圖2:停機給企業帶來的損失
隨著企業越來越依賴於信息技術,由於系統停機而帶來的損失也越拉越大。
集群系統的優點並不僅在於此。下面列舉了集群系統的主要優點:
高可擴展性:如上所述。
高可用性:集群中的一個節點失效,它的任務可傳遞給其他節點。可以有效防止單點失效。
高性能:負載平衡集群允許系統同時接入更多的用戶。
高性價比:可以採用廉價的符合工業標準的硬體構造高性能的系統。
2.1 集群系統的分類
雖然,根據集群系統的不同特徵可以有多種分類方法,但是一般把集群系統分為兩類:
(1)、高可用(High Availability)集群,簡稱HA集群。
這類集群致力於提供高度可靠的服務。就是利用集群系統的容錯性對外提供7*24小時不間
斷的服務,如高可用的文件伺服器、資料庫服務等關鍵應用。
目前已經有在Linux下的高可用集群,如Linux HA項目。
負載均衡集群:使任務可以在集群中盡可能平均地分攤不同的計算機進行處理,充分利
用集群的處理能力,提高對任務的處理效率。
在實際應用中這幾種集群類型可能會混合使用,以提供更加高效穩定的服務。如在一個使
用的網路流量負載均衡集群中,就會包含高可用的網路文件系統、高可用的網路服務。
(2)、性能計算(High Perfermance Computing)集群,簡稱HPC集群,也稱為科學計算
集群。
在這種集群上運行的是專門開發的並行應用程序,它可以把一個問題的數據分布到多
台的計算機上,利用這些計算機的共同資源來完成計算任務,從而可以解決單機不能勝任
的工作(如問題規模太大,單機計算速度太慢)。
這類集群致力於提供單個計算機所不能提供的強大的計算能力。如天氣預報、石油勘探與油
藏模擬、分子模擬、生物計算等。這些應用通常在並行通訊環境MPI、PVM等中開發,由於MPI
中科紅旗linux技術支持服務中心---西安站 http://linux.xab.ac.cn
中國科學院西安網路中心 中科紅旗linux培訓認證中心
是目前的標准,故現在多使用MPI為並行環境。
比較有名的集群Beowulf就是一種科學計算集群項目。
3、集群系統轉發方式和調度演算法
3.1轉發方式
目前LVS主要有三種請求轉發方式和八種調度演算法。根據請求轉發方式的不同,所構
架集群的網路拓撲、安裝方式、性能表現也各不相同。用LVS主要可以架構三種形式的集群,
分別是LVS/NAT、LVS/TUN和LVS/DR,可以根據需要選擇其中一種。
(1)、網路地址轉換(LVS/NAT)
中科紅旗linux技術支持服務中心---西安站 http://linux.xab.ac.cn
中國科學院西安網路中心 中科紅旗linux培訓認證中心
(2)、直接路由
(3)、IP隧道
中科紅旗linux技術支持服務中心---西安站 http://linux.xab.ac.cn
中國科學院西安網路中心 中科紅旗linux培訓認證中心
三種轉發方式的比較:
3.2、調度演算法
在選定轉發方式的情況下,採用哪種調度演算法將決定整個負載均衡的性能表現,不同
的演算法適用於不同的應用場合,有時可能需要針對特殊場合,自行設計調度演算法。LVS的算
法是逐漸豐富起來的,最初LVS只提供4種調度演算法,後來發展到以下八種:
1.輪叫調度(Round Robin)
調度器通過「輪叫」調度演算法將外部請求按順序輪流分配到集群中的真實伺服器上,它均
等地對待每一台伺服器,而不管伺服器上實際的連接數和系統負載。
2.加權輪叫(Weighted Round Robin)
調度器通過「加權輪叫」調度演算法根據真實伺服器的不同處理能力來調度訪問請求。這樣
可以保證處理能力強的伺服器能處理更多的訪問流量。調度器可以自動詢問真實伺服器的
負載情況,並動態地調整其權值。
3.最少鏈接(Least Connections)
調度器通過「最少連接」調度演算法動態地將網路請求調度到已建立的鏈接數最少的伺服器
上。如果集群系統的真實伺服器具有相近的系統性能,採用「最小連接」調度演算法可以較
好地均衡負載。
4.加權最少鏈接(Weighted Least Connections)
在集群系統中的伺服器性能差異較大的情況下,調度器採用「加權最少鏈接」調度演算法優
中科紅旗linux技術支持服務中心---西安站 http://linux.xab.ac.cn
中國科學院西安網路中心 中科紅旗linux培訓認證中心
化負載均衡性能,具有較高權值的伺服器將承受較大比例的活動連接負載。調度器可以自
動詢問真實伺服器的負載情況,並動態地調整其權值。
5.基於局部性的最少鏈接(Locality-Based Least Connections)
「基於局部性的最少鏈接」調度演算法是針對目標IP地址的負載均衡,目前主要用於Cache
集群系統。該演算法根據請求的目標IP地址找出該目標IP地址最近使用的伺服器,若該服務
器是可用的且沒有超載,將請求發送到該伺服器;若伺服器不存在,或者該伺服器超載且
有伺服器處於一半的工作負載,則用「最少鏈接」的原則選出一個可用的伺服器,將請求
發送到該伺服器。
6. 帶復制的基於局部性最少鏈接( Locality-Based Least Connections with
Replication)
「帶復制的基於局部性最少鏈接」調度演算法也是針對目標IP地址的負載均衡,目前主要
用於Cache集群系統。它與LBLC演算法的不同之處是它要維護從一個目標IP地址到一組服務
器的映射,而LBLC演算法維護從一個目標IP地址到一台伺服器的映射。該演算法根據請求的目
標IP地址找出該目標IP地址對應的伺服器組,按「最小連接」原則從伺服器組中選出一
台伺服器,若伺服器沒有超載,將請求發送到該伺服器;若伺服器超載,則按「最小連接
」原則從這個集群中選出一台伺服器,將該伺服器加入到伺服器組中,將請求發送到該服
務器。同時,當該伺服器組有一段時間沒有被修改,將最忙的伺服器從伺服器組中刪除,
以降低復制的程度。
7.目標地址散列(Destination Hashing)
「目標地址散列」調度演算法根據請求的目標IP地址,作為散列鍵(Hash Key)從靜態分
配的散列表找出對應的伺服器,若該伺服器是可用的且未超載,將請求發送到該伺服器,
否則返回空。
8.源地址散列(Source Hashing)
「源地址散列」調度演算法根據請求的源IP地址,作為散列鍵(Hash Key)從靜態分配的
散列表找出對應的伺服器,若該伺服器是可用的且未超載,將請求發送到該伺服器,否則
返回空。
了解這些演算法原理能夠在特定的應用場合選擇最適合的調度演算法,從而盡可能地保持
Real Server的最佳利用性。當然也可以自行開發演算法,不過這已超出本文范圍,請參考有
關演算法原理的資料。
4.1、什麼是高可用性
計算機系統的可用性(availability)是通過系統的可靠性(reliability)和可維護性
(maintainability)來度量的。工程上通常用平均無故障時間(MTTF)來度量系統的可靠性,
用平均維修時間(MTTR)來度量系統的可維護性。於是可用性被定義為:
中科紅旗linux技術支持服務中心---西安站 http://linux.xab.ac.cn
中國科學院西安網路中心 中科紅旗linux培訓認證中心
MTTF/(MTTF+MTTR)*100%
業界根據可用性把計算機系統分為如下幾類:
可用比例
(Percent
Availability)
年停機時間
(downtime/year
)
可用性分類
99.5 3.7天
常規系統
(Conventional)
99.9 8.8小時可用系統(Available)
99.99 52.6分鍾
高可用系統(Highly
Available)
99.999 5.3分鍾Fault Resilient
99.9999 32秒Fault Tolerant
為了實現集群系統的高可用性,提高系統的高可性,需要在集群中建立冗餘機制。一個功
能全面的集群機構如下圖所示
中科紅旗linux技術支持服務中心---西安站 http://linux.xab.ac.cn
中國科學院西安網路中心 中科紅旗linux培訓認證中心
負載均衡伺服器的高可用性
為了屏蔽負載均衡伺服器的失效,需要建立一個備份機。主伺服器和備份機上都運行
High Availability監控程序,通過傳送諸如「I am alive」這樣的信息來監控對方的運
行狀況。當備份機不能在一定的時間內收到這樣的信息時,它就接管主伺服器的服務IP並
繼續提供服務;當備份管理器又從主管理器收到「I am alive」這樣的信息是,它就釋放
服務IP地址,這樣的主管理器就開開始再次進行集群管理的工作了。為在住伺服器失效的
情況下系統能正常工作,我們在主、備份機之間實現負載集群系統配置信息的同步與備份,
保持二者系統的基本一致。
HA的容錯備援運作過程
自動偵測(Auto-Detect)階段 由主機上的軟體通過冗餘偵測線,經由復雜的監聽程序。邏
輯判斷,來相互偵測對方運行的情況,所檢查的項目有:
主機硬體(CPU和周邊)
主機網路
主機操作系統
資料庫引擎及其它應用程序
主機與磁碟陣列連線
為確保偵測的正確性,而防止錯誤的判斷,可設定安全偵測時間,包括偵測時間間隔,
偵測次數以調整安全系數,並且由主機的冗餘通信連線,將所匯集的訊息記錄下來,以供
維護參考。
自動切換(Auto-Switch)階段 某一主機如果確認對方故障,則正常主機除繼續進行原來的
任務,還將依據各種容錯備援模式接管預先設定的備援作業程序,並進行後續的程序及服
務。
自動恢復(Auto-Recovery)階段 在正常主機代替故障主機工作後,故障主機可離線進行修
復工作。在故障主機修復後,透過冗餘通訊線與原正常主機連線,自動切換回修復完成的
主機上。整個回復過程完成由EDI-HA自動完成,亦可依據預先配置,選擇回復動作為半自
動或不回復。
4.2、HA三種工作方式:
(1)、主從方式 (非對稱方式)
工作原理:主機工作,備機處於監控准備狀況;當主機宕機時,備機接管主機的一切工作,
待主機恢復正常後,按使用者的設定以自動或手動方式將服務切換到主機上運行,數據的
一致性通過共享存儲系統解決。
中科紅旗linux技術支持服務中心---西安站 http://linux.xab.ac.cn
中國科學院西安網路中心 中科紅旗linux培訓認證中心
(2)、雙機雙工方式(互備互援)
工作原理:兩台主機同時運行各自的服務工作且相互監測情況,當任一台主機宕機時,另
一台主機立即接管它的一切工作,保證工作實時,應用服務系統的關鍵數據存放在共享存
儲系統中。
(3)、集群工作方式(多伺服器互備方式)
工作原理:多台主機一起工作,各自運行一個或幾個服務,各為服務定義一個或多個備用
主機,當某個主機故障時,運行在其上的服務就可以被其它主機接管。
中科紅旗linux技術支持服務中心---西安站 http://linux.xab.ac.cn
中國科學院西安網路中心 中科紅旗linux培訓認證中心
相關文檔
http://tech.sina.com.cn/it/2004-04-09/1505346805.shtml
http://stonesoup.esd.ornl.gov
LINUX下的集群實列應用
最近有客戶需要一個負載均衡方案,筆者對各種軟硬體的負載均衡方案進行了調查和
比較,從IBM sServer Cluster、Sun Cluster PlatForm 等硬體集群,到中軟、紅旗、
TurboLinux的軟體集群,發現無論採用哪個廠商的負載均衡產品其價格都是該客戶目前所
不能接受的。於是筆者想到了開放源項目Linux Virtual Server(簡稱LVS)。經過對LVS的研
究和實驗,終於在Red Hat 9.0上用LVS成功地構架了一組負載均衡的集群系統。整個實
現過程整理收錄如下,供讀者參考。
選用的LVS實際上是一種Linux操作系統上基於IP層的負載均衡調度技術,它在操
作系統核心層上,將來自IP層的TCP/UDP請求均衡地轉移到不同的伺服器,從而將一組
伺服器構成一個高性能、高可用的虛擬伺服器。使用三台機器就可以用LVS實現最簡單的集
群,如圖1所示。
中科紅旗linux技術支持服務中心---西安站 http://linux.xab.ac.cn
中國科學院西安網路中心 中科紅旗linux培訓認證中心
圖1 LVS實現集群系統結構簡圖
圖1顯示一台名為Director的機器在集群前端做負載分配工作;後端兩台機器稱之為
Real Server,專門負責處理Director分配來的外界請求。該集群的核心是前端的Director
機器,LVS就是安裝在這台機器上,它必須安裝Linux。Real Server則要根據其選用的負
載分配方式而定,通常Real Server上的設置比較少。接下來介紹Director機器上LVS的
安裝過程。
安裝
LVS的安裝主要是在Director機器上進行,Real Server只需針對不同的轉發方式做簡單
的設定即可。特別是對LVS的NAT方式,Real Server惟一要做的就是設一下預設的網關。
所以構架集群的第一步從安裝Director機器開始。
首先,要在Director機器上安裝一個Linux操作系統。雖然早期的一些Red Hat版本,
如6.2、7.2、8.0等自帶Red Hat自己的集群軟體,或者是在內核中已經支持LVS,但是為
了更清楚地了解LVS的機制,筆者還是選擇自行將LVS編入Linux內核的方式進行安裝,
Linux版本採用Red Hat 9.0。
如果用戶對Red Hat的安裝比較了解,可以選擇定製安裝,並只安裝必要的軟體包。
安裝中請選擇GRUB 做為啟動引導管理軟體。因為GRUB 在系統引導方面的功能遠比
LILO強大,在編譯Linux內核時可以體會它的方便之處。
LVS是在Linux內核中實現的,所以要對原有的Linux內核打上支持LVS的內核補丁,
然後重新編譯內核。支持LVS 的內核補丁可以從LVS 的官方網
http://www.linuxvirtualserver.org 下載,下載時請注意使用的Linux核心版本,必須下載和
中科紅旗linux技術支持服務中心---西安站 http://linux.xab.ac.cn
中國科學院西安網路中心 中科紅旗linux培訓認證中心
使用的Linux內核版本相一致的LVS內核補丁才行。對於Red Hat 9.0,其Linux內核版本
是2.4.20,所以對應內核補丁應該是http://www.linuxvirtualserver.org/software/kernel-
2.4/linux-2.4.20-ipvs-1.0.9.patch.gz。筆者經過多次實驗,使用Red Hat 9.0自帶的Linux
源代碼無法成功編譯LVS 的相關模組。由於時間關系筆者沒有仔細研究,而是另外從
kernel.org上下載了一個tar包格式的2.4.20內核來進行安裝,順利完成所有編譯。下面是
整個內核的編譯過程:
1.刪除Red Hat自帶的Linux源代碼
# cd /usr/src
# rm -rf linux*
2.下載2.4.20內核
# cd /usr/src
# wget ftp://ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.20.tar.bz2
3.解壓到當前目錄/usr/src
# cd /usr/src
# tar -xjpvf linux-2.4.20.tar.bz2
4.建立鏈接文件
# cd /usr/src # ln -s linux-2.4.20 linux-2.4 # ln -s linux-2.4.20 linux
5.打上LVS的內核補丁
# cd /usr/src
#wget http://www.linuxvirtualserver.org/software/kernel-2.4/linux-2.4.20-ipvs-
1.0.9.patch.gz
# gzip -cd linux-2.4.20-ipvs-1.0.9.patch.gz
# cd /usr/src/linux
# patch -p1 < ../linux-2.4.20-ipvs-1.0.9.patch
在打補丁時,注意命令執行後的信息,不能有任何錯誤信息,否則核心或模組很可能
無法成功編譯。
6.打上修正ARP問題的內核補丁
# cd /usr/src
# wget http://www.ssi.bg/~ja/hidden-2.4.20pre10-1.diff
# cd /usr/src/linux
中科紅旗linux技術支持服務中心---西安站 http://linux.xab.ac.cn
中國科學院西安網路中心 中科紅旗linux培訓認證中心
# patch -p1 < ../hidden-2.4.20pre10-1.diff
這一步在Director機器上可以不做,但是在使用LVS/TUN和LVS/DR方式的Real Server
上必須做。
7.為新核心命名
打開/usr/src/linux/Makefile。注意,在開始部分有一個變數EXTRAVERSION可以自行定
義。修改這個變數,比如改成「EXTRAVERSION=-LVS」後,編譯出的核心版本號就會顯
示成2.4.20-LVS。這樣給出有含義的名稱將有助於管理多個Linux核心。
8.檢查源代碼
# make mrproper
這一步是為確保源代碼目錄下沒有不正確的.o文件及文件的互相依賴。因為是新下載的內
核,所以在第一次編譯時,這一步實際可以省略。
9.配置核心選項
# make menuconfig
命令執行後會進入一個圖形化的配置界面,可以通過這個友好的圖形界面對內核進行定製。
此過程中,要注意對硬體驅動的選擇。Linux支持豐富的硬體,但對於伺服器而言,用不到
的硬體驅動都可以刪除。另外,像Multimedia devices、Sound、Bluetooth support、Amateur
Radio support等項也可以刪除。
注意,以下幾項配置對LVS非常重要,請確保作出正確的選擇:
(1)Code maturity level options項
對此項只有以下一個子選項,請選中為*,即編譯到內核中去。
Prompt for development and/or incomplete code/drivers
(2)Networking options項
對此項的選擇可以參考以下的配置,如果不清楚含義可以查看幫助:
<*> Packet socket
[ ] Packet socket: mmapped IO
< > Netlink device emulation
中科紅旗linux技術支持服務中心---西安站 http://linux.xab.ac.cn
中國科學院西安網路中心 中科紅旗linux培訓認證中心
Network packet filtering (replaces ipchains)
[ ] Network packet filtering debugging
Socket Filtering
<*> Unix domain sockets
TCP/IP networking
IP: multicasting
IP: advanced router
IP: policy routing
[ ] IP: use netfilter MARK value as routing key
[ ] IP: fast network address translation
<M> IP: tunneling
IP: broadcast GRE over IP
[ ] IP: multicast routing
[ ] IP: ARP daemon support (EXPERIMENTAL)
[ ] IP: TCP Explicit Congestion Notification support
[ ] IP: TCP syncookie support (disabled per default)
IP: Netfilter Configuration --->
IP: Virtual Server Configuration --->
(3)Networking options項中的IP: Virtual Server Configuration項
如果打好了LVS的內核補丁,就會出現此選項。進入Virtual Server Configuration選項,
有以下子選項:
<M> virtual server support (EXPERIMENTAL)
IP virtual server debugging
(12) IPVS connection table size (the Nth power of 2)
--- IPVS scheler
<M> round-robin scheling
<M> weighted round-robin scheling
<M> least-connection scheling scheling
<M> weighted least-connection scheling
<M> locality-based least-connection scheling
<M> locality-based least-connection with replication scheling
<M> destination hashing scheling
<M> source hashing scheling
<M> shortest expected delay scheling
<M> never queue scheling
--- IPVS application helper
<M> FTP protocol helper
以上所有項建議全部選擇。
中科紅旗linux技術支持服務中心---西安站 http://linux.xab.ac.cn
中國科學院西安網路中心 中科紅旗linux培訓認證中心
(4)Networking options項中的IP: Netfilter Configuration項
對於2.4版本以上的Linux Kernel來說,iptables是取代早期ipfwadm和ipchains的
更好選擇,所以除非有特殊情況需要用到對ipchains和ipfwadm的支持,否則就不要選它。
本文在LVS/NAT方式中,使用的就是iptables,故這里不選擇對ipchains和ipfwadm的
支持:
< > ipchains (2.2-style) support
< > ipfwadm (2.0-style) support
10. 編譯內核
(1)檢查依賴關系
# make dep
確保關鍵文件在正確的路徑上。
(2)清除中間文件
# make clean
確保所有文件都處於最新的版本狀態下。
(3)編譯新核心
# make bzImage
(4)編譯模組
# make moles
編譯選擇的模組。
(5)安裝模組
# make moles_install
# depmod -a
生成模組間的依賴關系,以便modprobe定位。
(6)使用新模組
# cp System.map /boot/System.map-2.4.20-LVS
# rm /boot/System.map
# ln -s /boot/System.map-2.4.20-LVS /boot/System.map
# cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.20-LVS
# rm /boot/vmlinuz
# ln -s /boot/vmlinuz-2.4.20-LVS /boot/vmlinuz
# new-kernel-pkg --install --mkinitrd --depmod 2.4.20-LVS
中科紅旗linux技術支持服務中心---西安站 http://linux.xab.ac.cn
中國科學院西安網路中心 中科紅旗linux培訓認證中心
(7)修改GRUB,以新的核心啟動
執行完new-kernel-pkg命令後,GRUB的設置文件/etc/grub.conf中已經增加了新核心的
啟動項,這正是開始安裝Linux時推薦使用GRUB做引導程序的原因。
grub.conf中新增內容如下:
title Red Hat Linux (2.4.20-LVS)
root (hd0,0)
kernel /boot/vmlinuz-2.4.20LVS ro root=LABEL=/
initrd /boot/initrd-2.4.20LVS.img
將Kernel項中的root=LABEL=/改成 root=/dev/sda1 (這里的/dev/sda1是筆者Linux的根
分區,讀者可根據自己的情況進行不同設置)。
保存修改後,重新啟動系統:
# reboot
系統啟動後,在GRUB的界面上會出現Red Hat Linux(2.4.20-LVS)項。這就是剛才編譯的
支持LVS的新核心,選擇此項啟動,看看啟動過程是否有錯誤發生。如果正常啟動,ipvs
將作為模塊載入。同時應該注意到,用LVS的內核啟動後在/proc目錄中新增了一些文件,
比如/proc/sys/net/ipv4/vs/*。
11.安裝IP虛擬伺服器軟體ipvsadm
用支持LVS的內核啟動後,即可安裝IP虛擬伺服器軟體ipvsadm了。用戶可以用tar包或
RPM 包安裝,tar 包可以從以下地址http://www.linuxvirtualserver.org/software/kernel-
2.4/ipvsadm-1.21.tar.gz 下載進行安裝。
這里採用源RPM包來進行安裝:
# wget http://www.linuxvirtualserver.org/software/kernel-2.4/ipvsadm-1.21-7.src.rpm
# rpmbuild --rebuild ipvsadm-1.21-7.src.rpm
# rpm -ivh /usr/src/redhat/RPMS/i386/ipvsadm-1.21-7.i386.rpm
注意:高版本的rpm命令去掉了--rebuild這個參數選項,但提供了一個rpmbuild命令來實
現它。這一點和以前在Red Hat 6.2中以rpm—rebuild XXX.src.rpm來安裝源RPM包的習
慣做法有所不同。
安裝完,執行ipvsadm命令,應該有類似如下的信息出現:
# ipvsadm
中科紅旗linux技術支持服務中心---西安站 http://linux.xab.ac.cn
中國科學院西安網路中心 中科紅旗linux培訓認證中心
IP Virtual Server version 1.0.9 (size=4096)
Prot LocalAddress:Port Scheler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
出現類似以上信息,表明支持LVS 的內核和配置工具ipvsadm 已完全安裝,這台
Director機器已經初步安裝完成,已具備構架各種方式的集群的條件。
實例
理解了上述關於請求轉發方式和調度演算法的基本概念後,就可以運用LVS來具體實現
幾種不同方式的負載均衡的集群系統。LVS的配置是通過前面所安裝的IP虛擬伺服器軟體
ipvsadm來實現的。ipvsadm與LVS的關系類似於iptables和NetFilter的關系,前者只是
一個建立和修改規則的工具,這些命令的作用在系統重新啟動後就消失了,所以應該將這
些命令寫到一個腳本里,然後讓它在系統啟動後自動執行。網上有不少配置LVS的工具,
有的甚至可以自動生成腳本。但是自己手工編寫有助於更深入地了解,所以本文的安裝沒
有利用其它第三方提供的腳本,而是純粹使用ipvsadm命令來配置。
下面就介紹一下如何配置LVS/NAT、LVS/TUN、LVS/DR方式的負載均衡集群。
1.設定LVS/NAT方式的負載均衡集群
NAT是指Network Address Translation,它的轉發流程是:Director機器收到外界請求,
改寫數據包的目標地址,按相應的調度演算法將其發送到相應Real Server上,Real Server
處理完該請求後,將結果數據包返回到其默認網關,即Director機器上,Dire
❼ linux運維之LVS(一)
關於LVS負載均衡
一、什麼是負載均衡:
負載均衡集群提供了一種廉價、有效、透明的方法,來擴展網路設備和
伺服器的負載、帶寬、增加吞吐量、加強網路數據處理能力,提高網路的靈活性
和可用性。
二、搭建負載均衡服務的需求:
1)把單台計算機無法承受的大規模的並發訪問或者數據流量分擔到多台節點設備上
分別處理,減少用戶等待響應的時間,提升用戶體驗。
2)單個重負載的運算分擔到多台節點設備上做並行處理,每個節點設備結束後,
將結果匯總,返回給用戶,系統處理能力得到大幅度提升。
3)7*24的服務保證,任意一個或多個有限節點設備宕機,要求不能影響業務。
三、LVS的介紹:
LVS是Linux Virtual Server的簡寫,即Linux虛擬伺服器,是一個虛擬的伺服器
集群系統,可以在UNIX/LINUX平台下實現負載均衡集群功能。
該項目是在1998年5月由章文嵩博士組織成立的,是中國國內最早出現的自由
軟體項目之一。
四、關於LVS的配置使用:
LVS負載均衡調度技術是在Linux內核中實現的,因此,被稱為Linux
虛擬伺服器。我們使用該軟體配置LVS時候,不能直接配置內核中的ipvs,
而需要使用ipvs的管理工具ipvsadm進行管理,ipvs的管理工具ipvsadm管理ipvs。
五、LVS技術點小結:
1)真正實現負載均衡的工具是ipvs,工作在linux內核層面。
2)LVS自帶的ipvs管理工具是ipvsadm。
3)keepalived實現管理ipvs及對負載均衡器的高可用。
4)Red hat工具Piranha WEB管理實現調度的工具ipvs。
六、LVS體系結構與工作原理:
1)LVS集群負載均衡接收服務的所有入站客戶端計算機請求,並根據調度演算法決定哪個集群節點應該處理回復請求。
負載均衡(LB)有時也被稱為LVS Director(簡稱 Director).
2)LVS虛擬伺服器的體系結構如下圖,一組伺服器通過高速的區域網或者地理分布
的廣域網相互連接,在他們的前端有一個負載調度器(Load Balancer)。負載調度器能
無縫地將網路請求調度到真正的伺服器上,從而使得伺服器集群的結構對客戶是透明的,
客戶訪問集群系統提供的網路服務就像訪問一台高性能、高可用的伺服器一樣。客戶程序
不受伺服器集群的影響不需做任何修改。系統的伸縮性通過在服務集群中透明地加入和刪除
一個節點來達到,通過檢測節點或服務進程故障和正確的重置系統達到高可用性。由於我們的負載調度技術在
linux內核中實現的,我們稱之為linux虛擬伺服器(Linux Virtual Server)。
七、LVS社區提供了一個命名的約定:
名稱: 縮寫
虛擬IP地址(Virtual IP Address) VIP
說明:VIP為Director用於向客戶端計算機提供服務的ip地址,
比如:www.etiantian.org 域名就解析到vip上提供服務。
-------------------------------------------------------------------------------
真實ip地址(Real Server ip Address) 縮寫:VIP
說明:在集群下面節點上使用的ip地址,物理ip地址。
-----------------------------------------------------------------------------------
Director的ip地址(Director ip Adress) 縮寫:DIP
說明:Director用於連接內外網路的ip地址,物理網卡上的IP地址,
是負載均衡上的ip。
-------------------------------------------------------------------------------------
客戶端主機IP地址(Client IP Address) 縮寫:CIP
說明:客戶端用戶計算機請求集群伺服器的IP地址,該地址用作發送
給集群的請求的源ip地址。
----------------------------------------------------------------
LVS集群內部的節點稱為真實伺服器(Real server),也叫做集群節點。請求集群服務的
計算機稱為客戶端計算機。
與計算機通常在網上交換數據包的方式相同,客戶端計算機、Director
和真實伺服器使用IP地址彼此進行通信。
------------------------------------------------------------------------------------------
八、LVS集群的3種工作模式介紹與原理講解
1)IP虛擬服務軟體ipvs,在調度器的實現技術中,IP負載均衡技術是
效率最高的。在已用的ip負載均衡技術中有通過網路地址轉換
(Network Address Translation)將一組伺服器構成一個高性能的、高可用的虛擬伺服器,
我們稱之為VS、NAT技術(Virtual Server Network Adress Translation)。
2)在分析VS/NAT的缺點和網路服務的非對稱性的基礎上,我們提出通過IP隧道實現虛擬伺服器的
方法VS/TUN(Virtual Server via IP Tunneling)和通過直接路由實現虛擬服務
器的方法VS/DR(Virtual Server via Director Routing),它們可以極大地提高系統的伸縮性。
3)淘寶開源的模式FULLNAT。
LVS的四種工作模式:
縮寫及全拼:
NAT(Network Adress Translation)、TUN(Tunneling)、
DR(Director Routing)、FULLNAT(FULL Network address Translation)
-------------------------------------------------------------------------------------------
九、什麼是ARP協議:
1) ARP協議:全稱"Address Resolution Protocol",中文名地址解析協議,使用ARP協議可
實現通過IP地址獲得得對應主機的物理地址(MAC地址)。
在TCP/IP的網路環境下,每個聯網的主機都會被分配一個32位的ip地址,
這種互聯網地址是在網際范圍標識主機的一種邏輯地址。為了讓報文在
物理網路上傳輸,還必須要知道對方目的主機的物理地址(MAC)才行。這樣就存在把IP地址變成
物理地址的地址轉換的問題。
在乙太網環境,為了正確地目的主機傳送報文,必須把目的主機的32位IP
地址轉換成為目的主機48位乙太網的地址(MAC地址)。這就需要在互聯層有一個服務或功能將
IP地址轉換為相應的物理地址(MAC地址),這個服務或者功能就是ARP協議。
所謂的「地址解析」,就是主機在發送幀之前將目標IP地址轉換成目標MAC地址的過程,
ARP協議的基本功能就是通過目標設備的ip地址,查詢目標設備的MAC地址,以保證主機
間互相通信的順利進行。
ARP協議和DNS有點相像之處,不同點是:DNS是在域名和IP之間的解析,另外,ARP協議不需要
配置服務,而DNS要配置服務才行。
ARP協議要求通信的主機雙方必須在同一個物理網段(即區域網)!
2)關於ARP的小結:
1.ARP全稱「Address Resolution Protocol」;
2.實現區域網內通過IP地址獲取主機的MAC地址;
3.MAC地址48位主機的物理地址,區域網內唯一;
4.ARP協議類似DNS服務,但不需要配置服務。
5.ARP協議是三層協議。
--------------------------------------------------------------------------------------------------------
十、ARP緩存表:
1)每台安裝有TCP/IP協議的電腦都會有一個ARP緩存表(windows 命令提示符里輸入arp -a即可)。
表裡的ip地址與MAC地址是一一對應的。
arp常用命令:
arp -a :查所有記錄
arp -d :清除
arp -s :綁定IP和MAC
2)ARP緩存表是把雙刃劍:
1.主機有了arp緩存表,可以加快ARP的解析速度,減少區域網內廣播風暴。
2.正是有了arp緩存表,給惡意黑客帶來了攻擊伺服器主機的風險,這個就是arp欺騙攻擊。
3.切換路由器,負載均衡器等設備時,可能會導致短時網路中斷。
3)為啥用ARP協議?
OSI模型把網路工作分為七層,彼此不直接通信打交道,只通過介面。IP地址工作在第三層,
MAC地址工作在第二層。當協議在發送數據包時,需要先封裝第三層IP地址,第二層MAC地址的報頭,
但是協議只知道目的節點的ip地址,不知道目的節點的MAC地址,又不能跨第二、三層,所以得用ARP協議服務,
來幫助獲取目的節點的MAC地址。
4)ARP在生產環境產生的問題及解決辦法:
1.ARP病毒,ARP欺騙
2.高可用伺服器對之間切換時要考慮ARP緩存的問題。
3.路由器等設備無縫遷移時需要考慮ARP緩存的問題,例如:更換辦公室的路由器。
5)ARP欺騙原理:
ARP攻擊就是通過偽造IP地址和MAC地址對實現ARP欺騙的,如果一台主機中了ARP病毒,
那麼它就能在網路中產生大量的ARP通信量,很快的進行廣播以至於使網路阻塞,攻擊者
只要持續不斷的發出偽造的ARP響應就能更改區域網中目標主機ARP緩存中的IP-MAC條目,
造成網路中斷或者中間人攻擊。
❽ 負載均衡——LVS DR模式
相比於nginx只能用於7層負載均衡,LVS就比較強大了,能在4層做負載均衡。而且性能和穩定性上LVS也比較占優,畢竟是合入內核模塊,不穩定肯定不行。
LVS通過工作於內核的ipvs模塊來實現功能,其主要工作於netfilter的INPUT鏈上。除此之外,還需要一個用戶態工具,ipvdadm,用於用戶負載集群定義和集群服務管理。
LVS DR模式的流程大概如下:
1、客戶端發送請求至VIP,也就是訪問服務,請求報文源地址是CIP,目標地址為VIP;
2、LVS調度器接收到請求,報文在PREROUTING鏈檢查,確定目的IP是本機,於是將報文發送至INPUT鏈,ipvs內核模塊確定請求的服務是我們配置的LVS集群服務,然後根據用戶設定的均衡策略選擇某台後端RS,並將目標MAC地址修改RIP的MAC地址。因為調度器和後端伺服器RS在同個網段,因此直接二層互通,將請求發給選擇的RS處理;
3、因為報文目的mac是本機,且RS上有配置VIP,因此RS能接收該報文。後端服務處理完請求後,將響應直接發往客戶端,此時源IP地址為VIP,目標IP為CIP。
如下,准備三台伺服器,
機器 作用
192.168.0.100 VIP,LVS調度器對外服務IP
192.168.0.200 RIP,後端web伺服器之一
192.168.0.300 RIP,後端web伺服器之二
上面我們說過lvs依賴於ipvs內核模塊,和ipvsadm用戶態工具。因為centos 7已經默認載入ipvs模塊,因此這一步我們不需要配置。我們只需要安裝ipvsadm工具即可,
yum install -y ipvsadm
然後在LVS調度器上配置VIP,這里我們採用虛擬網卡,當然也可以使用獨立網卡配置,
ifconfig eth0:0 192.168.0.100/24 up
接著配置LVS集群服務,
[root@CentOS-7-2 ~]# ipvsadm -C
[root@CentOS-7-2 ~]# ipvsadm -A -t 192.168.0.100:80 -s rr
[root@CentOS-7-2 ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.200:80 -g
[root@CentOS-7-2 ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.300:80 -g
其中,
第一條命令是清空所有規則;
第二條命令是定義LVS服務,並指定負責均衡策略為rr,即輪詢;
第三、四條命令各添加一台後端web伺服器,作為負載均衡節點,並指定為DR模式。
ipvsadm基本命令參數如下:
-A 指定添加的LVS負載均衡虛擬服務
-t 指定虛擬伺服器的IP地址和埠
-s 指定調度演算法,ss為輪詢,wrr為加權輪詢,dh為目標地址散列,sh為源地址散列,lc為最少鏈接等
-a 在對應的VIP下添加RS節點
-g 指定LVS的工作模式為DR模式
-l 指定LVS的工作模式為tunnel模式
-m 指定LVS的工作模式為NAT模式
添加完後端RS,我們可以查看此LVS對應的均衡規則,
[root@CentOS-7-2 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.100:80 rr
-> 192.168.0.200:80 Route 1 0 0
-> 192.168.0.300:80 Route 1 0 0
這里web伺服器使用nginx搭建,因此在兩台RS上安裝nginx,
yum install -y nginx
同時為了後面測試,我們修改web伺服器的index.html內容,
[root@192_168_0_200 ~]# cat /usr/share/nginx/html/index.html
This is 192.168.0.200
[root@192_168_0_300 ~]# cat /usr/share/nginx/html/index.html
This is 192.168.0.300
接著開始進行LVS相關配置,
首先將VIP配置在lo介面上,(注意掩碼要配置成32位,不然RS通信會出問題)
ifconfig lo:0 192.168.0.100/32 up
接著配置對應路由,
route add -host 192.168.0.100 dev lo
然後設置相關系統參數,
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
其實嚴格意義上只要配置出口網卡的對應參數就可以了,配置all也只是為了保險而已,文章最後面會有說明。
使用curl命令對vip進行訪問,
[root@CentOS-7-3 /home]# curl http://192.168.0.100:80
This is 192.168.0.200
[root@CentOS-7-3 /home]# curl http://192.168.0.100:80
This is 192.168.0.300
[root@CentOS-7-3 /home]# curl http://192.168.0.100:80
This is 192.168.0.200
[root@CentOS-7-3 /home]# curl http://192.168.0.100:80
This is 192.168.0.300
可見結果符合我們設置的輪詢策略。
因為當調度器把請求轉發給對應RS時,並沒有修改報文目的IP,因此請求報文目的IP仍為VIP,所以如果RS沒有配置VIP,那麼報文到達RS後就會被丟棄。
arp_ignore=1:只響應目的IP地址為接收網卡上的本地地址的arp請求
因為我們在RS上都配置了VIP,因此此時是存在IP沖突的,當外部客戶端向VIP發起請求時,會先發送arp請求,此時調度器和RS都會響應這個請求。如果某個RS響應了這個請求,則之後該客戶端的請求就都發往該RS,並沒有經過LVS,因此也就沒有真正的負載均衡,LVS也就沒有存在的意義。因此我們需要設置RS不響應對VIP的arp請求,這樣外部客戶端的所有對VIP的arp請求才會都解析到調度器上,然後經由LVS的調度器發往各個RS。
系統默認arp_ignore=0,表示響應任意網卡上接收到的對本機IP地址的arp請求(包括環回網卡上的地址),而不管該目的IP是否在接收網卡上。也就是說,如果機器上有兩個網卡設備A和B,即使在A網卡上收到對B IP的arp請求,也會回應。而arp_ignore設置成1,則不會對B IP的arp請求進行回應。由於lo肯定不會對外通信,所以如果只有一個對外網口,其實只要設置這個對外網口即可,不過為了保險,很多時候都對all也進行設置。
arp_announce=2:網卡在發送arp請求時使用出口網卡IP作為源IP
當RS處理完請求,想要將響應發回給客戶端,此時想要獲取目的IP對應的目的MAC地址,那麼就要發送arp請求。arp請求的目的IP就是想要獲取MAC地址的IP,那arp請求的源IP呢?自然而然想到的是響應報文的源IP地址,但也不是一定是這樣,arp請求的源IP是可以選擇的,而arp_announce的作用正是控制這個地址如何選擇。系統默認arp_announce=0,也就是源ip可以隨意選擇。這就會導致一個問題,如果發送arp請求時使用的是其他網口的IP,達到網路後,其他機器接收到這個請求就會更新這個IP的mac地址,而實際上並不該更新,因此為了避免arp表的混亂,我們需要將arp請求的源ip限制為出口網卡ip,因此需要設置arp_announce=2。
由上可知,只要RS上的VIP不響應arp請求就可以了,因此不一定要配置在lo上,也可以配置在其他網口。由於lo設備不會直接接收外部請求,因此只要設置機器上的出口網卡不響應非本網卡上的arp請求介面。但是如果VIP配置在其他網口上,除了上面的配置,還需要配置該網口不響應任何arp請求,也就是arp_ignore要設置為8。
這是由於lo設備的特殊性導致, 如果lo綁定192.168.0.200/24,則該設備會響應該網段所有IP(192.168.0.1~192.168.0.254) 的請求,而不是只響應192.168.0.200這一個地址。
根據DR模式的原理,調度器只修改請求報文的目的mac,也就是轉發是在二層進行,因此調度器和RS需要在同一個網段,從而ip_forward也不需要開啟。
❾ linux的什麼內核版本中包括了lvs
要自己手動編譯的。
根據不同版本內核,下載不同的lvs版本,
高的linux版本兼容低的lvs版本。反過來就有問題。
lvs官網地址:http://www.linuxvirtualserver.org/
❿ 關於linux學習路線的問題 請教前輩
很多同學接觸Linux不多,對Linux平台的開發更是一無所知。而現在的趨勢越來越表明,作為一 個優秀的軟體開發人員,或計算機IT行業從業人員,掌握Linux是一種很重要的謀生資源與手段。下來我將會結合自己的幾年的個人開發經驗,及對 Linux,更是類UNIX系統,及開源軟體文化,談談Linux的學習方法與學習中應該注意的一些事。
就如同剛才說的,很多同學以前可能連Linux是什麼都不知道,對UNIX更是一無所知。所以我們從最基礎的講起,對於Linux及UNIX的歷史我們不做多談,直接進入入門的學習。
Linux入門是很簡單的,問題是你是否有耐心,是否愛折騰,是否不排斥重裝一類的大修。沒折騰可以說是學不好Linux的,鳥哥說過,要真正了解Linux的分區機制,對LVM使用相當熟練,沒有20次以上的Linux裝機經驗是積累不起來的,所以一定不要怕折騰。
由於大家之前都使用Windows,所以我也盡可能照顧這些「菜鳥」。我的推薦,如果你第一次接觸Linux,那麼首先在虛擬機中嘗試它。虛擬機我推薦Virtual Box,我並不主張使用VM,原因是VM是閉源的,並且是收費的,我不希望推動盜版。當然如果你的Money足夠多,可以嘗試VM,但我要說的是即使是VM,不一定就一定好。付費的軟體不一定好。首先,Virtual Box很小巧,Windows平台下安裝包在80MB左右,而VM動輒600MB,雖然功能強大,但資源消耗也多,何況你的需求Virtual Box完全能夠滿足。所以,還是自己選。如何使用虛擬機,是你的事,這個我不教你,因為很簡單,不會的話Google或Bai都可以,英文好的可以直接看官方文檔。
現在介紹Linux發行版的知識。正如你所見,Linux發行版並非Linux,Linux僅是指操作系統的內核,作為科班出生的你不要讓我解釋,我也沒時間。我推薦的發行版如下:
UBUNTU適合純菜鳥,追求穩定的官方支持,對系統穩定性要求較弱,喜歡最新應用,相對來說不太喜歡折騰的開發者。
Debian,相對UBUNTU難很多的發行版,突出特點是穩定與容易使用的包管理系統,缺點是企業支持不足,為社區開發驅動。
Arch,追逐時尚的開發者的首選,優點是包更新相當快,無縫升級,一次安裝基本可以一直運作下去,沒有如UBUNTU那樣的版本概念,說的專業點叫滾動升級,保持你的系統一定是最新的。缺點顯然易見,不穩定。同時安裝配置相對Debian再麻煩點。
Gentoo,相對Arch再難點,考驗使用者的綜合水平,從系統安裝到微調,內核編譯都親歷親為,是高手及黑客顯示自己技術手段,按需配置符合自己要求的系統的首選。
Slackware與Gentoo類似。
CentOS,社區維護的RedHat的復刻版本,完全使用RedHat的源碼重新編譯生成,與RedHat的兼容性在理論上來說是最好的。如果你專注於Linux伺服器,如網路管理,架站,那麼CentOS是你的選擇。
LFS,終極黑客顯擺工具,完全從源代碼安裝,編譯系統。安裝前你得到的只有一份文檔,你要做的就是照文檔你的說明,一步步,一條條命令,一個個軟體包的去構建你的Linux,完全由你自己控制,想要什麼就是什麼。如果你做出了LFS,證明你的Linux功底已經相當不錯,如果你能拿LFS文檔活學活用,再將Linux從源代碼開始移植到嵌入式系統,我敢說中國的企業你可以混的很好。
你得挑一個適合你的系統,然後在虛擬機安裝它,開始使用它。如果你想快速學會Linux,我有一個建議就是忘記圖形界面,不要想圖形界面能不能提供你問題的答案,而是滿世界的去找,去問,如何用命令行解決你的問題。在這個過程中,你最好能將Linux的命令掌握的不錯,起碼常用的命令得知道,同時建立了自己的知識庫,裡面是你積累的各項知識。
再下個階段,你需要學習的是Linux平台的C/C++開發,同時還有Bash腳本編程,如果你對Java興趣很深還有Java。同樣,建議你拋棄掉圖形界面的IDE,從VIM開始,為什麼是VIM,而不是Emacs,我無意挑起編輯器大戰,但我覺得VIM適合初學者,適合手比較笨,腦袋比較慢的開發者。Emacs的鍵位太多,太復雜,我很畏懼。然後是GCC,Make,Eclipse(Java,C++或者)。雖然將C++列在了Eclipse中,但我並不推薦用IDE開發C++,因為這不是Linux的文化,容易讓你忽略一些你應該注意的問題。IDE讓你變懶,懶得跟豬一樣。如果你對程序調試,測試工作很感興趣,GDB也得學的很好,如果不是GDB也是必修課。這是開發的第一步,注意我並沒有提過一句Linux系統API的內容,這個階段也不要關心這個。你要做的就是積累經驗,在Linux平台的開發經驗。我推薦的書如下:C語言程序設計,譚浩強的也可以。C語言,白皮書當然更好。C++推薦C++ Primer Plus,Java我不喜歡,就不推薦了。工具方面推薦VIM的官方手冊,GCC中文文檔,GDB中文文檔,GNU開源軟體開發指導(電子書),匯編語言程序設計(讓你對庫,鏈接,內嵌匯編,編譯器優化選項有初步了解,不必深度)。
如果你這個階段過不了就不必往下做了,這是底線,最基礎的基礎,否則離開,不要霍霍Linux開發。不專業的Linux開發者作出的程序是與Linux文化或UNIX文化相背的,程序是走不遠的,不可能像Bash,VIM這些神品一樣。所以做不好乾脆離開。
接下來進入Linux系統編程,不二選擇,APUE,UNIX環境高級編程,一遍一遍的看,看10遍都嫌少,如果你可以在大學將這本書翻爛,裡面的內容都實踐過,有作品,你口頭表達能力夠強,你可以在面試時說服所有的考官。(可能有點誇張,但APUE絕對是聖經一般的讀物,即使是Windows程序員也從其中汲取養分,Google創始人的案頭書籍,扎爾伯克的床頭讀物。)
這本書看完後你會對Linux系統編程有相當的了解,知道Linux與Windows平台間開發的差異在哪?它們的優缺點在哪?我的總結如下:做Windows平台開發,很苦,微軟的系統API總在擴容,想使用最新潮,最高效的功能,最適合當前流行系統的功能你必須時刻學習。Linux不是,Linux系統的核心API就100來個,記憶力好完全可以背下來。而且經久不變,為什麼不變,因為要同UNIX兼容,符合POSIX標准。所以Linux平台的開發大多是專注於底層的或伺服器編程。這是其優點,當然圖形是Linux的軟肋,但我站在一個開發者的角度,我無所謂,因為命令行我也可以適應,如果有更好的圖形界面我就當作恩賜吧。另外,Windows閉源,系統做了什麼你更本不知道,永遠被微軟牽著鼻子跑,想想如果微軟說Win8不支持QQ,那騰訊不得哭死。而Linux完全開源,你不喜歡,可以自己改,只要你技術夠。另外,Windows雖然使用的人多,但使用場合單一,專注與桌面。而Linux在各個方面都有發展,尤其在雲計算,伺服器軟體,嵌入式領域,企業級應用上有廣大前景,而且兼容性一流,由於支持POSIX可以無縫的運行在UNIX系統之上,不管是蘋果的Mac還是IBM的AS400系列,都是完全支持的。另外,Linux的開發環境支持也絕對是一流的,不管是C/C++,Java,Bash,Python,PHP,Javascript,。。。。。。就連C#也支持。而微軟除Visual Stdio套件以外,都不怎麼友好,不是嗎?
如果你看完APUE的感觸有很多,希望驗證你的某些想法或經驗,推薦UNIX程序設計藝術,世界頂級黑客將同你分享他的看法。
現在是時候做分流了。 大體上我分為四個方向:網路,圖形,嵌入式,設備驅動。
如果選擇網路,再細分,我對其他的不是他熟悉,只說伺服器軟體編寫及高性能的並發程序編寫吧。相對來說這是網路編程中技術含量最高的,也是底層的。需要很多的經驗,看很多的書,做很多的項目。
我的看法是以下面的順序來看書:
APUE再深讀 – 尤其是進程,線程,IPC,套接字
多核程序設計 - Pthread一定得吃透了,你很NB
UNIX網路編程 – 卷一,卷二
TCP/IP網路詳解 – 卷一 再看上面兩本書時就該看了
5.TCP/IP 網路詳解 – 卷二 我覺得看到卷二就差不多了,當然卷三看了更好,努力,爭取看了
6.Lighttpd源代碼 - 這個伺服器也很有名了
7.Nginx源代碼 – 相較於Apache,Nginx的源碼較少,如果能看個大致,很NB。看源代碼主要是要學習裡面的套接字編程及並發控制,想想都激動。如果你有這些本事,可以試著往暴雪投簡歷,為他們寫伺服器後台,想一想全球的魔獸都運行在你的伺服器軟體上。
Linux內核 TCP/IP協議棧 – 深入了解TCP/IP的實現
如果你還喜歡驅動程序設計,可以看看更底層的協議,如鏈路層的,寫什麼路由器,網卡,網路設備的驅動及嵌入式系統軟體應該也不成問題了。
當然一般的網路公司,就算網路級別的也該毫不猶豫的僱用你。只是看後面這些書需要時間與經驗,所以35歲以前辦到吧!跳槽到給你未來的地方!
圖形方向,我覺得圖形方向也是很有前途的,以下幾個方面。
Opengl的工業及游戲開發,國外較成熟。
影視動畫特效,如皮克斯,也是國外較成熟。
GPU計算技術,可以應用在瀏覽器網頁渲染上,GPU計算資源利用上,由於開源的原因,有很多的文檔程序可以參考。如果能進火狐開發,或google做瀏覽器開發,應該會很好 。
嵌入式方向:嵌入式方向沒說的,Linux很重要。
掌握多個架構,不僅X86的,ARM的,單片機什麼的也必須得懂。硬體不懂我預見你會死在半路上,我也想走嵌入式方向,但我覺得就學校教授嵌入式的方法,我連學電子的那幫學生都競爭不過。奉勸大家,一定得懂硬體再去做,如果走到嵌入式應用開發,只能祝你好運,不要碰上像Nokia,Hp這樣的公司,否則你會很慘的。
驅動程序設計:軟體開發周期是很長的,硬體不同,很快。每個月誕生那麼多的新硬體,如何讓他們在Linux上工作起來,這是你的工作。由於Linux的兼容性很好,如果不是太低層的驅動,基本C語言就可以搞定,系統架構的影響不大,因為有系統支持,你可能做些許更改就可以在ARM上使用PC的硬體了,所以做硬體驅動開發不像嵌入式,對硬體知識的要求很高。可以從事的方向也很多,如家電啊,特別是如索尼,日立,希捷,富士康這樣的廠子,很稀缺的。
LDD – Linux驅動程序設計與內核編程的基礎讀物
深入理解Linux內核 – 進階的
Linux源代碼 – 永無止境的
當然你還的看個方面的書,如網路啊什麼的。