1. 程式人生 > >Lvs負載均衡實現

Lvs負載均衡實現

NAT模式

NAT模式的優點是伺服器可以執行任何支援TCP/IP的作業系統,它只需要一個IP地址配置在排程器上,伺服器組可以用私有的IP地址。缺點是它的伸縮能力有限, 當伺服器結點數目上升到20時,排程器本身有可能成為系統的新瓶頸,因為在NAT模式中請求和響應報文都需要通過負載均衡排程器。

訪問流程:客戶端 -> 排程器 -> 後端伺服器 ->排程器 -> 客戶端

單網絡卡NAT模式實現負載均衡配置:

環境搭建
平臺: Linux RedHat6.5
server2:172.25.7.2  #安裝ipvsadm,作為負載均衡排程器
server3:172.25.7
.3 #安裝httpd,作為後端伺服器 server4:172.25.7.4 #安裝httpd,作為後端伺服器 虛擬ip(VIP):172.25.254.100

1.排程器server2端配置:安裝ipvsadm
用配置好的yum源下載即可:yum install ipvsadm -y
yum源配置:

[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.7.250/rhel6.5
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release [HighAvailability] name=Red Hat Enterprise Linux HighAvailability baseurl=http://172.25.7.250/rhel6.5/HighAvailability enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release [LoadBalancer] name=Red Hat Enterprise Linux LoadBalancer baseurl=http://172.25
.7.250/rhel6.5/LoadBalancer
enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release [ResilientStorage] name=Red Hat Enterprise Linux ResilientStorage baseurl=http://172.25.7.250/rhel6.5/ResilientStorage enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release [ScalableFileSystem] name=Red Hat Enterprise Linux ScalableFileSystem baseurl=http://172.25.7.250/rhel6.5/ScalableFileSystem enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

2.下載安裝好ipvsadm後,在作為排程器的server2主機上設定ipvsadm策略:

ifconfig eth0:0 172.25.254.100 netmask 255.255.255.0 up 
# 繫結vip
ipvsadm -A -t 172.25.254.100:80 -s rr
ipvsadm -a -t 172.25.254.100:80 -r 172.25.7.3:80 -m
ipvsadm -a -t 172.25.254.100:80 -r 172.25.7.4:80 -m
service ipvsadm save    #儲存策略

策略中引數代表的意思:

-A #在核心的虛擬伺服器表中新增一條新的虛擬伺服器記錄
-a #在核心虛擬伺服器表的一條記錄裡新增一條新的真實伺服器記錄
-s #指定使用的排程演算法,這裡是‘rr’,為輪詢
-r #指定真實的伺服器以及服務
-m #指定 LVS 的工作模式為NAT模式

檢視策略:

[[email protected] ~]# ipvsadm -ln  
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.254.100:80 rr
  -> 172.25.7.3:80                Masq    1      0          0         
  -> 172.25.7.4:80                Masq    1      0          0         

開啟核心路由功能:預設是0為關閉狀態

echo 1 > /proc/sys/net/ipv4/ip_forward #臨時更改,重啟後失效

想要永久更改可寫到/etc/sysctl.conf檔案中:
net.ipv4.ip_forward = 1

載入 nat 模組:如果不載入此模組,也可以在第一次訪問時成功,但是會在再次訪問時出現延遲過長,或訪問超時現象

modprobe iptable_nat

關閉防火牆:

iptabes -F
/etc/init.d/iptables stop

2.後端伺服器配置
server3

yum install httpd -y    #安裝httpd

新建並編輯預設釋出檔案:index.html

echo "server3-hk" > /var/www/html/index.html

啟動httpd:/etc/init.d/httpd start
設定閘道器,將閘道器指向server2的同網段ip:vim /etc/sysconfig/network

GATEWAY=172.25.7.2

重啟網路:/etc/init.d/network restart
關閉防火牆:

iptabes -F
/etc/init.d/iptables stop

server4配置:

yum install httpd -y    #安裝httpd

新建並編輯預設釋出檔案:index.html

echo "server4-hk" > /var/www/html/index.html

啟動httpd:/etc/init.d/httpd start
配置閘道器,指向server2的同網段ip:vim /etc/sysconfig/network

GATEWAY=172.25.7.2

重啟網路,讓配置生效:/etc/init.d/network restart
關閉防火牆:

iptabes -F
/etc/init.d/iptables stop

測試
在客戶端訪問虛擬ip,直接在客戶端終端進行測試即可:使用for迴圈語句,可以更加清楚的看到負載均衡效果:

[[email protected] ~]# for i in {1..6}; do curl 172.25.254.100; done
server3-hk
server4-hk
server3-hk
server4-hk
server3-hk
server4-hk

排程器端ipvsadm檢視負載均衡效果:

[[email protected] ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.254.100:80 rr
  -> 172.25.7.3:80                Masq    1      0          3         
  -> 172.25.7.4:80                Masq    1      0          3         

TUN模式

TUN模式對伺服器有要求,即所有的伺服器必須支援 “ IP Tunneling” 或者 “ IP Encapsulation”協議。目前,TUN模式 的後端伺服器主要執行 Linux 作業系統。
在 TUN模式中,負載排程器只將請求排程到不同的後端伺服器,後端伺服器將應答的資料直接返回給使用者。這樣,負載排程器就可以處理大量的請求,它甚至可以調 度百臺以上的伺服器(同等規模的伺服器),而它不會成為系統的瓶頸。即使負載排程器只有 100Mbps的全雙工網絡卡,整個系統的最大吞吐量可超過 1Gbps。所以,VS/TUN 可以極大地增加負載排程器排程的伺服器數量。VS/TUN 排程器可以排程上百臺伺服器,而它本身不會成為系統的瓶頸,可以用來構建高效能的超級伺服器。

訪問流程:客戶端 -> 排程器 -> 後端伺服器 -> 客戶端

環境搭建
平臺: Linux RedHat6.5
server2:172.25.7.2  #安裝ipvsadm
server3:172.25.7.3  #安裝httpd
server4:172.25.7.4  #安裝httpd
虛擬ip(VIP):172.25.7.100

排程器端server2配置:

ipvsadm -C  #清除之前的策略
ipvsadm -A -t 172.25.7.100:80 -s rr
ipvsadm -a -t 172.25.7.100:80 -r 172.25.7.3:80 -i
ipvsadm -a -t 172.25.7.100:80 -r 172.25.7.4:80 -i
-i  #表示tun模式即ip隧道模式
service ipvsadm save    #儲存策略

繫結VIP:

ifconfig eth0:0 172.25.7.100 netmask 255.255.255.0 up 

檢視ipvsadm狀態:

[[email protected] ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.7.100:80 rr
  -> 172.25.7.3:80                Tunnel  1      0          0         
  -> 172.25.7.4:80                Tunnel  1      0          0         

開啟核心路由功能:

echo 1 > /proc/sys/net/ipv4/ip_forward

關閉防火牆:

iptables -F
/etc/init.d/iptables stop

後端伺服器配置
server3
繫結tun模式虛擬ip:

ifconfig tunl0 172.25.7.100 netmask 255.255.255.255 up
route add -host 172.25.7.100 dev tunl0

閘道器指向排程器ip:vim /etc/sysconfig/network

GATEWAY=172.25.7.2

重啟網路,讓閘道器設定生效:/etc/init.d/network restart
設定tun模式許可權:

echo 0 > /proc/sys/net/ipv4/conf/tunl0/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter

編輯httpd預設釋出檔案內容如下:vim /var/www/html/index.html

<h1>server3-http</h1>

啟動httpd:/etc/init.d/httpd start
關閉防火牆:

iptables -F
/etc/init.d/iptables stop

server4配置:
繫結tun模式虛擬ip:

ifconfig tunl0 172.25.7.100 netmask 255.255.255.255 up
route add -host 172.25.7.100 dev tunl0

設定閘道器,指向排程器ip:vim /etc/sysconfig/network

GATEWAY=172.25.7.2

重啟網路,讓閘道器生效:/etc/init.d/network restart
設定tun模式許可權:

echo 0 > /proc/sys/net/ipv4/conf/tunl0/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter

編輯httpd預設釋出檔案內容如下:vim /var/www/html/index.html

<h1>server4-http</h1>

啟動httpd:/etc/init.d/httpd start
關閉防火牆:

iptables -F
/etc/init.d/iptables stop

測試
在客戶端訪問虛擬ip,這裡在客戶端終端進行訪問,用for迴圈可以更加清楚的看到負載均衡效果:

[[email protected] ~]# for i in {1..6}; do curl 172.25.7.100; done
<h1>server4-http</h1>
<h1>server3-http</h1>
<h1>server4-http</h1>
<h1>server3-http</h1>
<h1>server4-http</h1>
<h1>server3-http</h1>

排程器端ipvsadm檢視負載均衡效果:

[[email protected] ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.7.100:80 rr
  -> 172.25.7.3:80                Tunnel  1      0          15        
  -> 172.25.7.4:80                Tunnel  1      0          15        

DR模式

跟TUN模式相同,負載排程器中只負責排程請求,而伺服器直接將響應返回給客戶,可以極大地提高整個集群系統的吞吐量。跟 TUN模式相比,這種方法沒有 IP 隧道的開銷,但排程器和伺服器組都必須在物理上有一個網絡卡通過不分斷的區域網相連,如通過交換機或者高速的 HUB 相連。VIP 地址為排程器和伺服器組共享,排程器配置的 VIP 地址是對外可見的,用於接收虛擬服務的請求報文;所有的伺服器把 VIP 地址配置在各自的 Non-ARP 網路裝置上,它對外面是不可見的,只是用於處 理目標地址為VIP 的網路請求

訪問流程:客戶端 -> 排程器 -> 後端伺服器 -> 客戶端

環境搭建
平臺: Linux RedHat6.5
server2:172.25.7.2  #安裝ipvsadm
server3:172.25.7.3  #安裝httpd
server4:172.25.7.4  #安裝httpd
虛擬ip(VIP):172.25.7.200

排程器端server2配置:

ipvsadm -C  #清除之前的策略
ipvsadm -A -t 172.25.7.200:80 -s rr
ipvsadm -a -t 172.25.7.200:80 -r 172.25.7.3:80 -g
ipvsadm -a -t 172.25.7.200:80 -r 172.25.7.4:80 -g
-g  #表示DR模式
service ipvsadm save    #儲存策略

繫結VIP:

ifconfig eth0:0 172.25.7.200 netmask 255.255.255.0 up

關閉防火牆:

iptables -F
/etc/init.d/iptables stop

後端伺服器配置
server3
繫結虛擬ip:

ifconfig lo:0 172.25.7.200 netmask 255.255.255.255 up
route add -host 172.25.7.200 dev lo:0

設定訪問模式許可權:

echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

重新編輯httpd預設釋出檔案內容如下:vim /var/www/html/index.html

<h1>server3-HK</h1>

啟動httpd:/etc/init.d/httpd start
關閉防火牆:

iptables -F
/etc/init.d/iptables stop

server4配置:
繫結虛擬ip:

ifconfig lo:0 172.25.7.200 netmask 255.255.255.255 up
route add -host 172.25.7.200 dev lo:0

設定訪問模式許可權:

echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

重新編輯httpd預設釋出檔案內容如下:vim /var/www/html/index.html

<h1>server4-HK</h1>

啟動httpd:/etc/init.d/httpd start
關閉防火牆:

iptables -F
/etc/init.d/iptables stop

測試
客戶端在終端訪問虛擬ip,同樣,使用for迴圈語句:

[[email protected] ~]# for i in {1..6}; do curl 172.25.7.200; done
<h1>server4-HK</h1>
<h1>server3-HK</h1>
<h1>server4-HK</h1>
<h1>server3-HK</h1>
<h1>server4-HK</h1>
<h1>server3-HK</h1>

排程器端ipvsadm檢視負載均衡效果:

[[email protected] ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.7.200:80 rr
  -> 172.25.7.3:80                Route   1      0          121       
  -> 172.25.7.4:80                Route   1      0          122       

總結:這三種模式中,DR模式速度最快,效率最高,也節省了TUN模式的ip隧道開銷,和TUN模式一樣,排程器可以承受較大的負載壓力;NAT模式效率最低,因為請求資料來回都要經過排程器,時間相對較長,當訪問量過大,排程器就成為新的壓力瓶頸,唯一的優點就是可以在任何支援TCP/IP協議的作業系統上實現負載均衡;TUN模式即ip隧道模式,也很高效,但是對環境的要求較高,需要伺服器支援ip隧道協議。