(一)LVS
一、LVS的了解
LVS(Linux Virtual Server)可以理解為一個虛擬服務器系統。
Internet的飛速發展,網絡帶寬的增長,Web服務中越來越多地使用CGI、動態主頁等CPU密集型應用,這對服務器的性能有較高要求,單台服務器已經無法滿足需要,所以集群自然的成為一種解決方案,而LVS便是其中的一種集群方案。LVS使用負載均衡技術將多台服務器組成一個虛擬服務器。它為適應快速增長的網絡訪問需求提供了一個負載能力易擴展,而價格低廉的解決方案。也可以這樣理解:lvs能夠實現在大並發的情況下,將前端調度器收到的請求分發給后端服務器處理,實現了負載均衡集群的作用。
集群(Cluster)是一組相互獨立的、通過高速網絡互聯的計算機,它們構成了一個組,並以單一系統的模式加以管理。一個客戶與集群相互作用時,集群像是一個獨立的服務器。集群配置是用於提高可用性和可縮放性。集群系統的主要優點:高可擴展性、高可用性、高性能、高性價比。 常見的集群類型:
HA:High Availability 高可用集群
HP:High Performance 高性能集群
二、LVS結構和工作原理
LVS由前端的負載均衡器(Load Balance,LB)和后端的真實服務器(Real Server,RS)群組成的。RS中間可以通過局域網或廣域網來連接。LVS的這種結構是透明的,用戶只能看見一台作為LB的虛擬服務器(Virtual Server),而看不到提供服務器的RS群。當用戶的請求發往虛擬服務器時,LB將會根據設定的包轉發策略和負載均衡調度算法將用戶請求轉發給RS。然后RS根據請求內容將對應的請求結果返回給客戶,同請求包一樣,應答包的返回方式也與包轉發策略有關。
三、LVS的包轉發策略(基本為三種)
1)NAT(Network Address Translation)模式:實現目標地址和目標端口的轉發;當客戶端發送一個請求到VIP中,然后VS收到數據包之后,根據調度策略選擇一個RIP(其中,LB將請求包中的虛擬服務器中的ip轉換為選定的RIP,並轉發給RS);RS將應答包發送給LB,LB將應答請求中的RIP轉換為VIP,回送給客戶端。
2)IP隧道(IP Tunneling)模式:當LB接收到用戶請求包之后,根據IP隧道協議封裝請求包,然后傳送給某一個特定的RS,RS解析出請求的信息,直接將應答信息傳送給用戶。此時,要求LB和RS都支持IP隧道協議。
3)DR(Direct Routing)模式:實現的是MAC地址的轉換;LB受到數據包之后,將請求包中的MAC地址轉換為某一選定RS中目標地址的MAC地址后轉發出去,RS受到請求包之后,可直接將應答內容傳送給客戶端。但此時要求LB和RS在局域網內,且LB和RS群共享一個虛擬IP。
四、DR模式的原理圖
DR模式下數據傳輸過程
五、LVS模式下的DR模式的搭建
1、在虛擬服務器上配置更高級的yum源
---> ls /var/www/html/rhel6.5 # 此時,我的鏡像在真機中掛載,所以在真機中查看鏡像的信息
---> vim /etc/yum.repos.d/rhel-source.repo # 在虛擬服務器上配置所有的yum源,如下所示
---> yum clean all # 清空yum源中的緩存
---> yum repolist # 顯示yum倉庫的信息
2、在server1服務器上安裝ipvsadm(調度器),並添加規則。(ipvsadm時管理集群服務的命令行工具,用於管理LVS策略規則)
---> yum install ipvsadm -y
---> ipvsadm -A -t 172.25.2.100:80 -s rr # -A 添加一個虛擬機設備;-t 添加tcp服務和ip;-s 調度算法(rr|wrr|wlc|等)
---> ipvsadm -a -t 172.25.2.100:80 -r 172.25.2.2:80 -g # -a 添加rs服務器;-t 調度器ip;-r RS的ip; -g dr模式(直接路由)
---> ipvsadm -a -t 172.25.2.100:80 -r 172.25.2.3:80 -g # 添加另一台rs服務器
---> ip addr add 172.25.2.100/24 dev eth0 # 給調度器添加一個虛擬ip
3、給后端服務器172.25.2.2添加ip:
---> ip addr add 172.25.2.100/24 dev eth0
---> ip addr
4、給后端服務器172.25.2.3添加ip:
---> ip addr add 172.25.2.100/24 dev eth0
---> ip addr
5、在物理機中測試結果如下:
---> arp -an | grep 100 # 查看100主機的地址解析結果(為MAC地址)
---> arp -d 172.25.2.100 # 清空arp中緩存的mac地址
---> ping 172.25.2.100 # 重新獲取mac地址,並緩存
---> arp -an | grep 100 # 再次查看(此時,與第一次結果不同;分別為server2和server3中對應的100的MAC地址)
注釋:我們發現,測試端沒有經過調度器,而是直接到達后端(沒有形成輪叫)。此時,我們需要在server2和server3下載arptables_jf,防止客戶端直接訪問后端。
6、下載arptables_jf # 由與server2和server3執行操作一樣,所以以server2為例。
---> arptables -A IN -d 172.25.2.100 -j DROP # 在網內接收包時,拒絕172.25.2.100為目的地址的請求
---> arptables -A OUT -s 172.25.2.100 -j mangle --mangle-ip-s 172.25.2.2 # 當自身需要在網內發包,把原來包含虛擬ip的arp請求做地址偽裝
---> /etc/init.d/arptables_jf save # 保存寫進去的策略
---> /etc/init.d/arptables_jf start # 啟動arptables服務
---> arptables -L # 查看arp策略
注意:server3中和server2中做相同的處理
7、在測試端進行測試:(此時,有輪詢情況。並且查看訪問100的MAC地址的時候,顯示的是調度器的MAC地址)
---> ipvsadm -Ln # 有n的時候,表示有顯示ip和端口號;L 表示顯示ipvsadm的規則。
(二)DR模式下LVS的健康檢查
我們需要的情況是這樣的,當后端的服務器發生出現錯誤時, 在測試端測試時會提示出錯誤的信息。此時,我們需要對后端服務器做健康檢查。具體操作步驟如下
在以上操作的基礎上,若server2和server3的httpd服務器關閉之后,測試端的結果為:
1、在server1中,安裝軟件 ldirectord-3.9.5-3.1.x86_64.rpm 。(對后端服務器做檢查)
---> yum install ldirectord-3.9.5-3.1.x86_64.rpm -y
2、將配置文件的母板拷貝到/etc/ha.d/目錄下
---> cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/
3、編輯ldirectord的配置文件
---> vim /etc/ha.d/ldirectord
# Sample for an http virtual service
---> /etc/init.d/ldirectord start
5、清除之前的后端服策略,並重新添加策略顯示
---> ipvsadm -C
---> ipvsadm -Ln
6、在本機安裝httpd服務,並修改配置文件的端口號為80。同時添加默認發布目錄
---> vim /var/www/html/index.html
<h1>該站點正在維護。。。</h1>
---> /etc/init.d/httpd restart
7、關閉server2和server3的httpd服務
8、在客戶端測試結果如下:
---> curl 172.25.2.100
9、在調度器主機上查看策略的執行此次數
---> ipvsadm -Ln