LVS負載均衡羣集——NAT模式

    在各類互聯網應用中,隨着站點對硬件性能、響應速度、服務穩定性、數據可靠性等要求愈來愈高,單臺服務器難以承擔全部的訪問。除了使用價格昂貴的大型機、專用負載分流設備之外,企業還有另一種選擇來解決難題,那就是構建羣集服務器——經過整合多臺相對廉價的普通服務器,以同一個地址對外提供相對的服務。本篇博客將介紹企業中經常使用的一種羣集技術——LVS(Linux Virtual Server,Linux虛擬服務器)html



羣集的類型web

    不管是哪一種集羣,都至少包括兩臺節點服務器,而對外表現爲一個總體,只提供一個入口訪問(域名或IP),至關於一臺大型計算機。根據所針對的目標差別,可分爲如下三類:    算法

(1)負載均衡羣集:提升應用系統的響應能力,儘量處理更多的訪問請求、減小延遲,得到高併發、高負載(LB)的總體性能,未來自客戶機的訪問請求分流給多臺服務器,從而緩解整個系統的負載壓力數據庫

(2)高可用羣集:提升應用系統的可靠性、減小中斷時間、保證服務連續性,達到高可用(HA)的容錯的效果,故障切換、雙機熱備、多機熱備等都屬於高可用羣集技術vim

(3)高性能運算羣集:提升應用系統的CPU運算速度、擴展硬件資源和分析能力,得到至關於大型、超級計算機的高性能運算(HPC)能力,就是將多臺服務器的硬件整合到一塊兒,實現高性能運算能力。安全


負載均衡的分層結構bash

楊書凡00.png

第一層:負載調度器,是羣集系統的惟一入口,對外使用全部服務器共有的VIP(虛擬IP)地址,一般會配置主從兩臺調度器實現熱備份,確保高可用性。服務器

第二層:服務器池,也就是提供各類服務的服務器,例如web服務器,ftp服務器,數據庫服務器等,處理調度器發來的請求。網絡

第三層:共享存儲,主要存儲服務器池中應用程序的數據,通常會採用nas或者san設備,爲全部節點提供穩定、一致的文件存儲服務,確保整個集羣的統一性併發



負載均衡的工做模式

    關於集羣的負載調度技術,能夠基於IP、端口、內容等進行分發,其中基於IP的負載調度是效率最高的。基於IP的負載均衡模式中,常見的有如下三種工做模式:

楊書凡01.png

(1)地址轉換,簡稱NAT模式,負載均衡調度器做爲網關,服務器和負載調度器在同一個私有網絡,安全性較好。

(2)IP隧道,簡稱TUN模式,負載調度器僅做爲客戶機的訪問入口,各節點經過各自的Internet鏈接直接回應客戶機,不在通過負載調度器,服務器的節點分散在互聯網的不一樣位置,具備獨立的共有IP地址,經過專用的IP隧道與負載調度器相互通訊。

(3)直接路由,簡稱DR模式,與TUN模式相似,但各節點不是分散在各地,而是與調度器位於同一個物理網絡,負載調度器與各節點服務器經過本地網絡鏈接,不須要創建專用的ip隧道。

    以上三種模式中,NAT方式只須要一個公網地址,從而成爲最容易的一種負載均衡模式,安全性也比較好,許多硬件負載均衡設備就是採用這種方式;相比較而言,DR模式和TUN模式的負載能力更強大,使用範圍更廣,但節點的安全性要稍差一些。



案例:構建地址轉換模式負載均衡集羣(LVS——NAT)

    爲了進一步提升公司的負載能力,公司決定擴展示有的網站平臺,通過多方面考慮,管理員準備採用LVS羣集的NAT模式,以下圖所示:

楊書凡02.png


需求描述:

1. LVS調度器有兩塊網卡,分別鏈接內外網,外網地址也做爲整個羣集的VIP地址

2. 四臺節點服務器,共享存儲均位於內網,其默認網關設爲LVS調度器的內網地址

3. 共享存儲有一臺Linux服務器承擔,將目錄/var/www/html發佈爲NFS可讀寫共享


實驗步驟以下:

1. 配置LVS負載調度器

[root@localhost ~]# ifconfig              //添加一塊網卡,分別配置內外網接口地址
eth0      Link encap:Ethernet  HWaddr 00:0C:29:1C:B4:FB  
          inet addr:172.16.16.172  Bcast:172.16.16.255  Mask:255.255.255.0
          
eth1      Link encap:Ethernet  HWaddr 00:0C:29:1C:B4:05  
          inet addr:192.168.7.254  Bcast:192.168.7.255  Mask:255.255.255.0

[root@localhost ~]# vim /etc/sysctl.conf   //打開防火牆路由轉發功能,以便節點服務器訪問Internet
net.ipv4.ip_forward = 1
[root@localhost ~]# sysctl -p      //當即生效
[root@localhost ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
[root@localhost ~]# iptables -I FORWARD -p tcp -j ACCEPT
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.7.0/24 -o eth0 -j SNAT --to-source 172.16.16.172
                    
[root@localhost ~]# modprobe ip_vs        //LVS已成爲Linux內核一部分,默認爲ip_vs模塊
[root@localhost ~]# cat /proc/net/ip_vs    //查看ip_vs模塊版本信息
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn     
  
[root@localhost ~]# yum -y install ipvsadm     //ipvsadm是在負載調度器上使用的LVS羣集管理工具
[root@localhost ~]# ipvsadm -v                 //查看ipvsadm版本信息
ipvsadm v1.26 2008/5/15 (compiled with popt and IPVS v1.2.1)

[root@localhost ~]# service ipvsadm stop      //關閉服務(清除原有策略)
[root@localhost ~]# service ipvsadm start     //開啓服務(重建規則)
[root@localhost ~]# ipvsadm -A -t 172.16.16.172:80 -s rr   //建立虛擬服務器,調度算法爲輪詢
# -A表示添加虛擬服務器
# -t用來指定VIP地址及TCP端口
# -s用來指定負載調度算法
# rr輪詢:將受到的訪問請求按順序輪流分配給羣集中的各節點,無論服務器的鏈接數和系統負載
# wrr加權輪詢:也是輪流分配,可是能夠調整權重,讓處理性能強的服務器承擔更多的訪問流量
# lc最少鏈接:根據鏈接數分配,分配給鏈接數少的節點
# wlc加權最少鏈接:權重高的節點將承擔更大比例的負載

[root@localhost ~]# ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.21:80 -m -w 1  //添加服務器節點
[root@localhost ~]# ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.22:80 -m -w 1
[root@localhost ~]# ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.23:80 -m -w 1
[root@localhost ~]# ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.24:80 -m -w 1
# -a表示添加真實服務器
# -r指定RIP地址及TCP端口
# -m表示使用NAT羣集模式(-g DR模式和-i TUN模式)
# -w設置權值(權重爲0時表示暫停節點)

[root@localhost ~]# ipvsadm -ln      //查看羣集節點狀態
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.16.172:80 rr
  -> 192.168.7.21:80              Masq    1      0          0         
  -> 192.168.7.22:80              Masq    1      0          0         
  -> 192.168.7.23:80              Masq    1      0          0         
  -> 192.168.7.24:80              Masq    1      0          0  

[root@localhost ~]# ipvsadm -d -r 192.168.7.24:80 -t 172.16.16.172:80  //若是須要刪除某個節點,執行此命令
[root@localhost ~]# ipvsadm -D -t 172.16.16.172:80        //若是須要刪除整個虛擬服務器,執行此命令

[root@localhost ~]# service ipvsadm save                     //保存策略
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm:      [肯定]
[root@localhost ~]# chkconfig ipvsadm on                     //開機自動啓動
[root@localhost ~]# cat /etc/sysconfig/ipvsadm               //確認保存結果  
-A -t 172.16.16.172:http -s rr
-a -t 172.16.16.172:http -r 192.168.7.21:http -m -w 1
-a -t 172.16.16.172:http -r 192.168.7.22:http -m -w 1
-a -t 172.16.16.172:http -r 192.168.7.23:http -m -w 1


2. 配置NFS共享存儲服務

    NFS是一種基於TCP/IP傳輸的網絡文件系統協議,也是NAS存儲設備必然支持的一種協議

[root@localhost ~]# ifconfig           //配置IP地址,網關設置爲LVS內網IP地址192.168.1.254
eth0      Link encap:Ethernet  HWaddr 00:0C:29:0D:16:6A  
          inet addr:192.168.7.250  Bcast:192.168.7.255  Mask:255.255.255.0

[root@localhost ~]# iptables -I INPUT -p tcp -j ACCEPT
[root@localhost ~]# iptables -I INPUT -p udp -j ACCEPT                    
          
[root@localhost ~]# yum -y install nfs-utils rpcbind          
# nfs-utils軟件包來提供NFS共享服務          
# rpcbind軟件包提供RPC支持,以完成遠程到本地的映射過程          

[root@localhost ~]# chkconfig nfs on        //建議調整爲開機自啓動
[root@localhost ~]# chkconfig rpcbind on          
[root@localhost ~]# mkdir /opt/wwwroot      //設置共享目錄
[root@localhost ~]# echo welcome to beijing!!! > /opt/wwwroot/index.html
[root@localhost ~]# cat /opt/wwwroot/index.html     //建立測試網頁
welcome to beijing!!!
[root@localhost ~]# vim /etc/exports        //將目錄共享給192.168.7.0/24使用   
/opt/wwwroot 192.168.7.0/24(rw,sync,no_root_squash)          
# rw表示容許讀寫(ro爲只讀)          
# sync表示同步寫入          
# no_root_squash當客戶機以root身份訪問時賦予本地root權限(默認是root_squash,將做爲nfsnobody用戶降權對待)

[root@localhost ~]# service rpcbind start
[root@localhost ~]# service nfs start
[root@localhost ~]# showmount -e 127.0.0.1       //查看本機發布的NFS共享目錄
Export list for 127.0.0.1:
/opt/wwwroot 192.168.7.0/24


3. 配置web節點服務器

    全部節點服務器均使用相同的配置,包括httpd服務器端口、網站文檔內容

[root@localhost ~]# ifconfig            //配置IP地址,網關設置爲LVS內網IP地址192.168.1.254
eth1      Link encap:Ethernet  HWaddr 00:0C:29:8A:0D:26  
          inet addr:192.168.7.21  Bcast:192.168.7.255  Mask:255.255.255.0
          
[root@localhost ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT   //配置防火牆策略     
 
[root@localhost ~]# yum -y install httpd nfs-utils rpcbind

[root@localhost ~]# showmount -e 192.168.7.250     //查看NFS服務器共享了哪些目錄
Export list for 192.168.7.250:
/opt/wwwroot 192.168.7.0/24
[root@localhost ~]# mount 192.168.7.250:/opt/wwwroot /var/www/html    //將共享目錄掛載到本地目錄
[root@localhost ~]# tail -1 /etc/mtab 
192.168.7.250:/opt/wwwroot /var/www/html nfs rw,vers=4,addr=192.168.7.250,clientaddr=192.168.7.21 0 0

[root@localhost ~]# cat /var/www/html/index.html     //驗證測試網頁是否共享
welcome to beijing!!!
[root@localhost ~]# vim /etc/fstab          //設置開機自動掛載
192.168.7.250:/opt/wwwroot   /var/www/html     nfs     defaults,_netdev   0 0

[root@localhost ~]# chkconfig nfs on        
[root@localhost ~]# chkconfig rpcbind on  
[root@localhost ~]# chkconfig httpd on
[root@localhost ~]# service rpcbind start
[root@localhost ~]# service nfs start
[root@localhost ~]# service httpd start

    其餘節點服務器的配置和上面徹底同樣,以便實現負載均衡


4. 測試LVS集羣

    安排多臺測試機,從Internet中直接訪問VIP地址http://172.16.16.172/,將能看到有真實Web服務器提供的網頁內容。經過LVS負載均衡調度器,可查看當前的負載分配狀況,因爲使用輪詢算法,各節點所得到的鏈接負載大體至關。

楊書凡03.png


在LVS負載均衡調度器中執行如下命令:

[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.16.172:80 rr
  -> 192.168.7.21:80              Masq    1      2          9         
  -> 192.168.7.22:80              Masq    1      3          8         
  -> 192.168.7.23:80              Masq    1      2          9 
  -> 192.168.7.24:80              Masq    1      4          7

    可看到各節點服務器的鏈接負載大體至關,從而實現了負載均衡

相關文章
相關標籤/搜索