負載均衡集群介紹,LVS介紹,LVS的調度算法,LVS的NAT模式搭建
筆記內容:
18.6負載均衡集群介紹
18.7 LVS介紹
18.8 LVS的調度算法
18.9/18.10 LVS NAT模式搭建
筆記日期:2017-11-11
18.6負載均衡集群介紹
首先我們先介紹一下什麽是負載均衡: 負載平衡(Load balancing)是一種計算機網絡技術,用來在多個計算機(計算機集群)、網絡連接、CPU、磁盤驅動器或其他資源中分配負載,以達到最佳化資源使用、最大化吞吐率、最小化響應時間、同時避免過載的目的。這是來自維基百科的介紹。負載均衡的目的,就在於平衡計算機的負載,給用戶提供優質,可靠,穩定的服務。日常生活中到處都能看到“負載均衡”,一個超市的收營員高峰期只能服務10位顧客,當做活動時有20位顧客需要服務的話可能就會排長隊,這樣購物體驗將會很差(就像客戶抱怨系統/網站訪問太慢)。最簡單的辦法就是再招個營業員,重新開通一個出口。負載均衡的核心就是“分攤壓力”。
負載均衡示意圖:
上圖是個最簡單的負載均衡實例, 應用服務器並不直接與用戶相連, 用戶連接負載均衡服務器,然後由負載均衡服務器把消息轉發給實際應用服務器。負載均衡器內部會根據應用服務器的負載情況,決定把消息轉發給哪臺服務器處理。同時負載均衡器還可以對用戶屏蔽應用服務器失效,只要把用戶的消息轉發到非失效服務器即可。
提到負載均衡,就不能不介紹另外一個概念: 集群。集群就是一組部署有相同應用的服務器。例如web 服務器。用戶的請求無論連接到哪臺服務器上,都能得到相同的處理。這樣我們實現一種服務器,可以將用戶的請求根據特定規則轉發到應用服務器上進行處理。就實現了完整的集群處理系統。這個服務器如果實現了後臺服務器感知和配置功能,能夠了解後臺服務器的可用情況。就可以被稱作為負載均衡器。
負載均衡在目前網絡服務規模越來越龐大的情況下,成為一個大型服務器系統必須要面對的問題。隨著用戶和業務的增多,來自用戶的訪問量和數據流量不斷增大,對服務器的計算能力和儲存要求也在不斷增加,單臺服務器根本無法承擔這麽龐大的數據處理請求。這個時候,我們必須利用集群技術,采用一組服務器對來自用戶的請求進行處理,服務器的數量要能夠不斷的擴充。在集群的前端,我們采用負載均衡技術,平均分散用戶的請求到不同的處理服務器,並且能夠在集群中某個服務失效時,即時感知,屏蔽,將消息轉發到其他可用服務器上。
可以實現負載均衡集群的開源軟件有:LVS、keepalived、haproxy、nginx等,其中LVS屬於4層(網絡OSI 7層模型),nginx屬於7層,haproxy既可以認為是4層,也可以當做7層使用。
網絡OSI七層模型示意圖:
LVS在第四層,所以可以通過TCP/IP協議,與其他端口進行通信。而在第七層的nginx只能支持http,https,mail等協議,不能自由地與其他端口進行通信。這兩種類型的軟件都各有優點,例如LVS比較穩定能承載的並發量比較高,而nginx則是靈活,由於在第七層所以能夠實現一些復雜的功能,能實現更多的個性化需求。
18.7 LVS介紹
LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集群系統。本項目在1998年5月由章文嵩博士成立,是中國國內最早出現的自由軟件項目之一。使用LVS可以達到的技術目標是:通過LVS達到的負載均衡技術和Linux操作系統實現一個高性能高可用的Linux服務器群集,它具有良好的可靠性,可拓展性和可操作性。從而以低廉的成本實現最優的性能。現在LVS已經是Linux內核標準的一部分了,LVS從1998年開始,發展到現在已經是一個比較成熟的項目了。利用LVS技術可以實現高性能,高可壓縮的網路服務,例如WWW服務,FTP服務,MAIL服務等。比較著名的就是www.linux.com以及www.real.com。
LVS的官方網站:
http://www.linuxvirtualserver.org/
特點:
可伸縮網絡服務的幾種結構,它們都需要一個前端的負載調度器(或者多個進行主從備份)。我們先分析實現虛擬網絡服務的主要技術,指出IP負載均衡技術是在負載調度器的實現技術中效率最高的。在已有的IP負載均衡技術中,主要有通過網絡地址轉換(Network Address Translation)將一組服務器構成一個高性能的、高可用的虛擬服務器,我們稱之為VS/NAT技術(Virtual Server via Network Address Translation)。在分析VS/NAT的缺點和網絡服務的非對稱性的基礎上,我們提出了通過IP隧道實現虛擬服務器的方法VS/TUN (Virtual Server via IP Tunneling),和通過直接路由實現虛擬服務器的方法VS/DR(Virtual Server via Direct Routing),它們可以極大地提高系統的伸縮性。VS/NAT、VS/TUN和VS/DR技術是LVS集群中實現的三種IP負載均衡技術
LVS的體系架構:
使 用LVS架設的服務器集群系統有三個部分組成:最前端的負載均衡層(Loader Balancer),中間的服務器群組層,用Server Array表示,最底層的數據共享存儲層,用Shared Storage表示。在用戶看來所有的應用都是透明的,用戶只是在使用一個虛擬服務器提供的高性能服務。
LVS的體系架構如圖:
LVS的各個層次的詳細介紹:
Load Balancer層:位於整個集群系統的最前端,有一臺或者多臺負載調度器(Director Server)組成,LVS模塊就安裝在Director Server上,而Director的主要作用類似於一個路由器,它含有完成LVS功能所設定的路由表,通過這些路由表把用戶的請求分發給Server Array層的應用服務器(Real Server)上。同時,在Director Server上還要安裝對Real Server服務的監控模塊Ldirectord,此模塊用於監測各個Real Server服務的健康狀況。在Real Server不可用時把它從LVS路由表中剔除,恢復時重新加入。
Server Array層:由一組實際運行應用服務的機器組成,Real Server可以是WEB服務器、MAIL服務器、FTP服務器、DNS服務器、視頻服務器中的一個或者多個,每個Real Server之間通過高速的LAN或分布在各地的WAN相連接。在實際的應用中,Director Server也可以同時兼任Real Server的角色。
Shared Storage層:是為所有Real Server提供共享存儲空間和內容一致性的存儲區域,在物理上,一般有磁盤陣列設備組成,為了提供內容的一致性,一般可以通過NFS網絡文件系統共享數 據,但是NFS在繁忙的業務系統中,性能並不是很好,此時可以采用集群文件系統,例如Red hat的GFS文件系統,oracle提供的OCFS2文件系統等。
從整個LVS結構可以看出,Director Server是整個LVS的核心,目前,用於Director Server的操作系統只能是Linux和FreeBSD,linux2.6內核不用任何設置就可以支持LVS功能,而FreeBSD作為 Director Server的應用還不是很多,性能也不是很好。對於Real Server,幾乎可以是所有的系統平臺,Linux、windows、Solaris、AIX、BSD系列都能很好的支持。
LVS的幾個模式:
NAT模式:
IP Tunnel模式:
DR模式:
18.8 LVS的調度算法
較為常用的四個調度算法:
輪詢就是將用戶請求均勻地發送到各個服務器上去,服務器之間沒有權重之分。
加權輪詢就是帶權重的輪詢,有了權重後,每個服務器之間分配的任務就不會很均勻,一些機器處理多一些,一些則處理少一些,具體誰分配的多誰分配的少,主要由機器上設置的權重決定。
最小連接就是把請求分配到某臺連接數少的服務器上,也就是分發到比較閑的那臺服務器上。
加權最小連接和以上這個最小連接唯一的區別就是前者可以設置權重,這個權重和加權輪詢的權重意思是一樣的。
18.9 LVS NAT模式搭建(上)
準備工作:
搭建LVS NAT模式需要準備三臺機器,一臺作為分發器(dir),另外兩臺作為Real Server(rs),是用於處理用戶請求的服務器。
1. 首先配置一下分發器,作為分發器的機器需要有兩個網卡,一個連接外網一個連接內網,作為連接外網的網卡需要設置為僅主機模式,添加網卡示例:
添加完之後,使用ifconfig命令可以看到多了一個網卡:
這個僅主機模式的網卡的ip段可以在這裏查看到:
雖然虛擬機已經自動給新添加的網卡分配了IP地址,但是這個網卡的配置文件還不存在:
為了以防出現問題,所以我們要手動將一個正常的網卡配置文件復制成新網卡的配置文件,然後修改一下文件裏的內容即可:
復制配置文件:
cp ifcfg-eno16777728 ifcfg-ens34
編輯配置文件:
vim ifcfg-ens34
修改為以下內容:
重啟網卡服務:
service network restart
使用命令ifconfig命令查看是否成功:
然後再打開你windows的cmd,ping一下這個網卡的ip,看看是否能夠ping通,如下圖則是通的:
確保所有的機器都有一個能連接內網的網卡:
我這裏所有機器的ip地址分別是:
分發器:外網IP:192.168.56.128
內網IP:192.168.77.130
Real Server1 IP地址:192.168.77.128
Real Server2 IP地址:192.168.77.134
(內網IP地址都在同一個IP段)
然後將兩臺Real Server的網關地址設置為分發器的內網IP地址:
修改網卡配置文件:
vim /etc/sysconfig/network-scripts/ifcfg-eno16777736
增加一行配置內容,ip是分發器的內網IP:
GATEWAY=192.168.77.130
修改完後重啟網卡服務:
service network restart
最後使用route -n命令檢測網關地址是否為分發器的內網IP地址:
提示:如果設置網關不成功的話,很有可能是你網卡配置文件裏沒有配置IPADDR參數,也就是說你的網卡文件裏並沒有配置網卡的ip地址,因為一般自動生成的網卡配置文件是沒有配置IPADDR參數的。
按照以下的順序執行命令,關閉所有機器的firewalld防火墻,並清空防火墻規則:
執行關閉防火墻的命令前先安裝iptables-services這個包,安裝命令如下:
yum -y install iptables-services
關閉firewalld防火墻並打開iptables防火墻服務命令:
systemctl stop firewalld
systemctl disable firewalld
systemctl start iptables
systemctl enable iptables
iptables -F
service iptables save
執行完以上命令後,使用iptables -nvL這個命令查看應該是如下圖的樣子:
如果沒有關閉selinux的話,要關閉selinux,關閉命令如下:
setenforce 0
以上只是臨時關閉,然後還要修改配置文件,永久關閉selinux:
編輯配置文件:
vim /etc/selinux/config
修改內容如下:
修改完成後,使用getenforce命令查看是否為disabled:
如圖代表永久關閉了selinux。
完成以上操作後,我們的準備工作就完成了,接下來就是開始進行NAT模式的搭建了。
18.10 LVS NAT模式搭建(下)
開始搭建:
在dir(分發器)上安裝ipvsadm,這個是用於實現lvs的工具,沒有這個工具就無法實現lvs的功能,這個工具只需要在dir上安裝,安裝命令如下:
yum install -y ipvsadm
在dir機器上編寫腳本,因為lvs全部都是以腳本的方式去執行的,方便維護:
vim /usr/local/sbin/lvs_nat.sh
編輯內容如下:
#! /bin/bash
# director 服務器上開啟路由轉發功能,這個1就是內核參數
echo 1 > /proc/sys/net/ipv4/ip_forward
# 關閉icmp的重定向
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
# 註意區分網卡名字,我的兩個網卡分別為eno16777736和eth0
echo 0 > /proc/sys/net/ipv4/conf/eno16777736/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
# director 設置nat表的防火墻規則
iptables -t nat -F # 清空防火墻規則
iptables -t nat -X # 清空所有的鏈
iptables -t nat -A POSTROUTING -s 192.168.133.0/24 -j MASQUERADE # 添加路由規則
# director設置ipvsadm
IPVSADM=‘/usr/sbin/ipvsadm‘ # 這裏聲明了一個變量
$IPVSADM -C
$IPVSADM -A -t 192.168.56.128:80 -s lc -p 3 #這個lc就是使用的調度算法
$IPVSADM -a -t 192.168.56.128:80 -r 192.168.77.128:80 -m -w 1
$IPVSADM -a -t 192.168.56.128:80 -r 192.168.77.134:80 -m -w 1
關於$IPVSADM -A -t 192.168.56.128:80 -s lc -p 3的含義:
關於$IPVSADM -a -t 192.168.56.128:80 -r 192.168.77.128:80 -m -w 1
和$IPVSADM -a -t 192.168.56.128:80 -r 192.168.77.134:80 -m -w 1的含義:
編輯完畢:
3. 執行這個腳本,看看是否有錯誤:
如圖,我這裏就出現了錯誤,但是這個錯誤並不影響實驗,可以忽略。
執行完以上腳本後,就給兩臺Real Server安裝Nginx,安裝命令如下:
yum -y install nginx
安裝完後,啟動nginx:
service nginx start
將兩臺Real Server的Nginx默認頁文件修改成各自的主機名:
vim /usr/share/nginx/html/index.html
然後分別在兩臺Real Server機器上使用curl localhost命令訪問nginx的默認頁,看看是否顯示的是修改後的默認頁:
如圖的結果就是沒問題。
然後再Windows上使用瀏覽器,訪問它們的公網ip,也就是分發器中外網網卡的IP:
可以看到,訪問了Study03這臺Real Server的默認頁。
然後把腳本文件中的-p 3,這個等待時間給去掉,然後再把lc更換成rr:
修改完成後使用curl命令進行訪問:
如圖,可以看到,每次的請求都被均勻的分發到不同的Real Server上去了,這就代表我們成功得搭建了LVS的NAT模式。
擴展
lvs 三種模式詳解
http://www.it165.net/admin/html/201401/2248.html
lvs幾種算法
http://www.aminglinux.com/bbs/thread-7407-1-1.html
關於arp_ignore和 arp_announce
http://www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html
lvs原理相關的
http://blog.csdn.net/pi9nc/article/details/23380589
本文出自 “zero” 博客,請務必保留此出處http://zero01.blog.51cto.com/12831981/1981784
負載均衡集群介紹,LVS介紹,LVS的調度算法,LVS的NAT模式搭建