在各類互聯網應用中,隨着站點對硬件性能、響應速度、服務穩定性、數據可靠性等要求愈來愈高,單臺服務器難以承擔全部的訪問。除了使用價格昂貴的大型機、專用負載分流設備之外,企業還有另一種選擇來解決難題,那就是構建羣集服務器——經過整合多臺相對廉價的普通服務器,以同一個地址對外提供相對的服務。本篇博客將介紹企業中經常使用的一種羣集技術——LVS(Linux Virtual Server,Linux虛擬服務器)html
羣集的類型web
不管是哪一種集羣,都至少包括兩臺節點服務器,而對外表現爲一個總體,只提供一個入口訪問(域名或IP),至關於一臺大型計算機。根據所針對的目標差別,可分爲如下三類: 算法
(1)負載均衡羣集:提升應用系統的響應能力,儘量處理更多的訪問請求、減小延遲,得到高併發、高負載(LB)的總體性能,未來自客戶機的訪問請求分流給多臺服務器,從而緩解整個系統的負載壓力數據庫
(2)高可用羣集:提升應用系統的可靠性、減小中斷時間、保證服務連續性,達到高可用(HA)的容錯的效果,故障切換、雙機熱備、多機熱備等都屬於高可用羣集技術vim
(3)高性能運算羣集:提升應用系統的CPU運算速度、擴展硬件資源和分析能力,得到至關於大型、超級計算機的高性能運算(HPC)能力,就是將多臺服務器的硬件整合到一塊兒,實現高性能運算能力。安全
負載均衡的分層結構bash
第一層:負載調度器,是羣集系統的惟一入口,對外使用全部服務器共有的VIP(虛擬IP)地址,一般會配置主從兩臺調度器實現熱備份,確保高可用性。服務器
第二層:服務器池,也就是提供各類服務的服務器,例如web服務器,ftp服務器,數據庫服務器等,處理調度器發來的請求。網絡
第三層:共享存儲,主要存儲服務器池中應用程序的數據,通常會採用nas或者san設備,爲全部節點提供穩定、一致的文件存儲服務,確保整個集羣的統一性併發
負載均衡的工做模式
關於集羣的負載調度技術,能夠基於IP、端口、內容等進行分發,其中基於IP的負載調度是效率最高的。基於IP的負載均衡模式中,常見的有如下三種工做模式:
(1)地址轉換,簡稱NAT模式,負載均衡調度器做爲網關,服務器和負載調度器在同一個私有網絡,安全性較好。
(2)IP隧道,簡稱TUN模式,負載調度器僅做爲客戶機的訪問入口,各節點經過各自的Internet鏈接直接回應客戶機,不在通過負載調度器,服務器的節點分散在互聯網的不一樣位置,具備獨立的共有IP地址,經過專用的IP隧道與負載調度器相互通訊。
(3)直接路由,簡稱DR模式,與TUN模式相似,但各節點不是分散在各地,而是與調度器位於同一個物理網絡,負載調度器與各節點服務器經過本地網絡鏈接,不須要創建專用的ip隧道。
以上三種模式中,NAT方式只須要一個公網地址,從而成爲最容易的一種負載均衡模式,安全性也比較好,許多硬件負載均衡設備就是採用這種方式;相比較而言,DR模式和TUN模式的負載能力更強大,使用範圍更廣,但節點的安全性要稍差一些。
案例:構建地址轉換模式負載均衡集羣(LVS——NAT)
爲了進一步提升公司的負載能力,公司決定擴展示有的網站平臺,通過多方面考慮,管理員準備採用LVS羣集的NAT模式,以下圖所示:
需求描述:
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負載均衡調度器,可查看當前的負載分配狀況,因爲使用輪詢算法,各節點所得到的鏈接負載大體至關。
在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
可看到各節點服務器的鏈接負載大體至關,從而實現了負載均衡