1. 程式人生 > >LVS負載均衡之NAT模式部署

LVS負載均衡之NAT模式部署

權重 超時時間 font lvs負載均衡 同時 密碼 work rtu ice

1、LVS的NAT模式介紹

參考自官網:http://www.linuxvirtualserver.org/zh/lvs3.html

由於IPv4中IP地址空間的日益緊張和安全方面的原因,很多網絡使用保留IP地址(10.0.0.0/255.0.0.0、 172.16.0.0/255.128.0.0和192.168.0.0/255.255.0.0)[64, 65, 66]。這些地址不在Internet上使用,而是專門為內部網絡預留的。當內部網絡中的主機要訪問Internet或被Internet訪問時,就需要 采用網絡地址轉換(Network Address Translation, 以下簡稱NAT),將內部地址轉化為Internets上可用的外部地址。NAT的工作原理是報文頭(目標地址、源地址和端口等)被正確改寫後,客戶相信 它們連接一個IP地址,而不同IP地址的服務器組也認為它們是與客戶直接相連的。由此,可以用NAT方法將不同IP地址的並行網絡服務變成在一個IP地址 上的一個虛擬服務。

VS/NAT的體系結構如圖所示。在一組服務器前有一個調度器,它們是通過Switch/HUB相連接的。這些服務器 提供相同的網絡服務、相同的內容,即不管請求被發送到哪一臺服務器,執行結果是一樣的。服務的內容可以復制到每臺服務器的本地硬盤上,可以通過網絡文件系 統(如NFS)共享,也可以通過一個分布式文件系統來提供。

技術分享圖片

客戶通過Virtual IP Address(虛擬服務的IP地址)訪問網絡服務時,請求報文到達調度器,調度器根據連接調度算法從一組真實服務器中選出一臺服務器,將報文的目標地址 Virtual IP Address改寫成選定服務器的地址,報文的目標端口改寫成選定服務器的相應端口,最後將修改後的報文發送給選出的服務器。同時,調度器在連接Hash 表中記錄這個連接,當這個連接的下一個報文到達時,從連接Hash表中可以得到原選定服務器的地址和端口,進行同樣的改寫操作,並將報文傳給原選定的服務 器。當來自真實服務器的響應報文經過調度器時,調度器將報文的源地址和源端口改為Virtual IP Address和相應的端口,再把報文發給用戶。我們在連接上引入一個狀態機,不同的報文會使得連接處於不同的狀態,不同的狀態有不同的超時值。在TCP 連接中,根據標準的TCP有限狀態機進行狀態遷移,這裏我們不一一敘述,請參見W. Richard Stevens的《TCP/IP Illustrated Volume I》;在UDP中,我們只設置一個UDP狀態。不同狀態的超時值是可以設置的,在缺省情況下,SYN狀態的超時為1分鐘,ESTABLISHED狀態的超 時為15分鐘,FIN狀態的超時為1分鐘;UDP狀態的超時為5分鐘。當連接終止或超時,調度器將這個連接從連接Hash表中刪除。

這樣,客戶所看到的只是在Virtual IP Address上提供的服務,而服務器集群的結構對用戶是透明的。對改寫後的報文,應用增量調整Checksum的算法調整TCP Checksum的值,避免了掃描整個報文來計算Checksum的開銷。

在一些網絡服務中,它們將IP地址或者端口號在報文的數據中傳送,若我們只對報文頭的IP地址和端口號作轉換,這樣就會出現不一致性,服務會中斷。所以,針 對這些服務,需要編寫相應的應用模塊來轉換報文數據中的IP地址或者端口號。我們所知道有這個問題的網絡服務有FTP、IRC、H.323、 CUSeeMe、Real Audio、Real Video、Vxtreme / Vosiac、VDOLive、VIVOActive、True Speech、RSTP、PPTP、StreamWorks、NTT AudioLink、NTT SoftwareVision、Yamaha MIDPlug、iChat Pager、Quake和Diablo。

簡單來說,這種模式借助iptables的nat表來實現

用戶的請求到分發器後,通過預設的iptables規則,把請求的數據包轉發到後端的rs上去

rs需要設定網關為分發器的內網ip

用戶請求的數據包和返回給用戶的數據包全部經過分發器,所以分發器成為瓶頸

在nat模式中,只需要分發器有公網ip即可,所以比較節省公網ip資源

缺點:擴展性有限。高負載模式下,director可能成為瓶頸

優點:支持任意操作系統,節點服務器使用私有IP地址,與負載調度器位於同一個物理網絡,安全性比DR模式和TUN模式要高。

部署過程

環境:

lvs eth0:10.0.0.3 gateway:10.0.0.254 eth1:192.168.1.3

web01 eth0:192.168.1.7 gateway:192.168.1.3

web02 eth0:192.168.1.8 gateway:192.168.1.3

1、配置lvs服務器為路由器

web01和web02只有內網卡,配置lvs為路由器使其上網

[root@lvs ~]# vim /etc/sysctl.conf

[root@lvs ~]# sysctl -p

net.ipv4.ip_forward = 1

[root@lvs ~]# iptables -F

[root@lvs ~]# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

2、web服務器準備

在web服務器上安裝httpd服務來進行模擬,每臺服務器的web首頁不同,在負載均衡測試的時候以便區分

web01

[root@web01 ~]# yum install -y httpd

[root@web01 ~]# systemctl start httpd.service

[root@web01 ~]# systemctl enable httpd.service

[root@web01 ~]# echo ‘web01‘> /var/www/html/index.html

[root@web01 ~]# curl 127.0.0.1

web01

web02

[root@web02 ~]# yum install -y httpd

[root@web02 ~]# systemctl start httpd.service

[root@web02 ~]# systemctl enable httpd.service

[root@web02 ~]# echo ‘web02‘> /var/www/html/index.html

[root@web02 ~]# curl 127.0.0.1

web02

3、lvs服務器配置

[root@lvs ~]# yum install -y ipvsadm #安裝lvs核心管理軟件包

[root@lvs ~]# ipvsadm -C

[root@lvs ~]# ipvsadm -A -t 10.0.0.3:80 -s rr

[root@lvs ~]# ipvsadm -a -t 10.0.0.3:80 -r 192.168.1.7 -m

[root@lvs ~]# ipvsadm -a -t 10.0.0.3:80 -r 192.168.1.8 -m

參數說明:

-C --clear清除內核虛擬服務器表中的所有記錄

-A --add-service在內核的虛擬服務器表中添加一條新的虛擬服務器記錄

-t --tcp-service service-address說明虛擬服務器提供的是tcp 的服務

-s --scheduler scheduler使用的調度算法,調度算法可以指定以下8種:rr(輪詢),wrr(權重),lc(最後連接),wlc(權重),lblc(本地最後連接),lblcr(帶復制的本地最後連接),dh(目的地址哈希),sh(源地址哈希),sed(最小期望延遲),nq(永不排隊)

-a --add-server在內核虛擬服務器表的一條記錄裏添加一條新的真實服務器記錄。也就是在一個虛擬服務器中增加一臺新的真實服務器

-r --real-server server-address指定真實的服務器[Real-Server:port]

-m --masquerading指定LVS 的工作模式為NAT 模式

調度測試

[root@lvs ~]# curl 10.0.0.3

web01

[root@lvs ~]# curl 10.0.0.3

web02

[root@lvs ~]# ipvsadm -L -n

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 10.0.0.3:80 rr

-> 192.168.1.7:80 Masq 1 0 0

-> 192.168.1.8:80 Masq 1 0 1

-L --list 顯示內核虛擬服務器表

-n 不解析端口使用的協議

4、keepalived結合lvs_NAT模式

配置keepalived增加虛擬ip,從而管理到lvs,可以進一步配置為lvs服務器的高可用

[root@lvs ~]# yum install keepalived -y

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

! Configuration File for keepalived

global_defs {

router_id LVS_DEVEL #表示keepalived服務器的一個標識

}

vrrp_instance VI_1 { #定義一個vrrp組,組名唯一

state MASTER #定義改主機為keepalivedmaster主機

interface eth0 #監控eth0號端口

virtual_router_id 51 #虛擬路由id號為51id號唯一,這個id決定了多播的MAC地址

priority 100 #節點優先級

advert_int 1 #檢查間隔,默認為1

authentication {

auth_type PASS #認證方式,密碼認證

auth_pass 1111 #認證密碼

}

virtual_ipaddress {

10.0.0.4 #虛擬ip地址

}

}

virtual_server 10.0.0.4 80 { #虛擬主機設置

delay_loop 6 #每隔6秒查詢realserver狀態

lb_algo rr #lvs的調度算法

lb_kind NAT #lvs的集群模式

persistence_timeout 50 #同一IP的連接50秒內被分配到同一臺realserver

protocol TCP #TCP協議檢查realserver狀態

real_server 192.168.1.7 80 { #後端真實主機ip

weight 1 #每臺機器的權重,0表示不給該機器轉發請求,直到它恢復正常

TCP_CHECK { #以下為健康檢查項目

connect_timeout 3 #連接超時時間,單位為秒

nb_get_retry 3 #檢測失敗後的重試次數,如果達到重試次數仍然失敗,將後端從服務器池中移除

delay_before_retry 3 #失敗重試的間隔時間,單位為秒

connect_port 80 #檢查的連接端口

}

}

real_server 192.168.1.8 80 {

weight 1

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

connect_port 80

}

}

}

[root@lvs ~]# systemctl start keepalived.service

[root@lvs ~]# ipvsadm -L -n

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 10.0.0.3:80 rr

-> 192.168.1.7:80 Masq 1 0 0

-> 192.168.1.8:80 Masq 1 0 0

TCP 10.0.0.4:80 rr

-> 192.168.1.7:80 Masq 1 0 0

-> 192.168.1.8:80 Masq 1 0 0

這裏keepalived服務啟動後,配置的vip也成功實現了lvs負載均衡,還需要做的就是在web服務器上增加輔助ip10.0.0.33即可

LVS負載均衡之NAT模式部署