LVS負載均衡之NAT模式部署

 

一、LVS的NAT模式介紹 html

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

因爲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地址 上的一個虛擬服務。 web

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表中刪除。 vim

 

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

在一些網絡服務中,它們將IP地址或者端口號在報文的數據中傳送,若咱們只對報文頭的IP地址和端口號做轉換,這樣就會出現不一致性,服務會中斷。因此,針 對這些服務,須要編寫相應的應用模塊來轉換報文數據中的IP地址或者端口號。咱們所知道有這個問題的網絡服務有FTP、IRC、H.32三、 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

 

一、配置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

 

二、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

 

三、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    不解析端口使用的協議

 

四、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便可

相關文章
相關標籤/搜索