對於大型企業,後臺的服務器成千上萬臺,如何合理的未來自客戶端訪問的壓力平均適宜的分配給各個後臺服務器是相當重要的問題,將壓力均發給後臺服務器,能夠有效的控制流量,有助於加快客戶的訪問速度,提升用戶體驗。mysql
負載均衡的實現分類:linux
一、根據硬軟件分類劃分nginx
硬件:F5Big-IP Citrix Netscaler A10 A10web
軟件:LVSnginx haproxy ats perlbal pound算法
二、根據工做的協議層次劃分sql
傳輸層:LVS nginx haproxy服務器
應用層:http:nginx, httpd, haproxy網絡
fastcgi :nginx, httpd負載均衡
mysql: mysql-proxycurl
這裏小編只針對LVS進行講述
1、LVS介紹
1、LVS工做原理:VS根據請求報文的目標IP和目標協議及端口將其調度轉發到某RS,根據調度算法來挑選RS
2、專業術語:
VS:VirtualServer 調度器
RS:Realserver 真正提供服務的調度器
CIP:客戶端IP
VIP:VS的外網IP
DIP:VS的內網IP
RIP:RS的IP地址
3、客戶端經過VS的訪問流程:
CIP <------> VIP ==DIP <------> RIP
4、實現LVS的管理工具
Ipvsadm/ipvs
Ipvsadm: 用戶空間的命令工具,規則管理器,用於管理集羣服務及RealServerr
Ipvs: 工做於內核空間netfilter的INPUT鉤子上的構架
5、LVS集羣的類型
Lvs-nat: 修改請求報文的目標IP,多目標IP的DNAT
Lvs-dr: 操縱封裝新的mac地址
Lvs-tun: 在原請求IP報文以外新加一個IP首部
Lvs-fullnat;修改請求報文的源和目標IP
6、這裏小編針對比較經常使用兩個模型進行分析和實驗,給你們進行演示:主要演示lvs-nat模型的實現,後續的模型實現敬請期待。
2、lvs-nat模型
1、實驗條件要求:
(1)RIP和DIP必須在同一個IP網絡,且應該使用私網地址; RS的網關要指向DIP (2)請求報文和響應報文都必須經由Director轉發,Director易於成爲系統瓶頸 (3)支持端口映射,可修改請求報文的目標PORT
(4)VS必須是Linux系統,RS能夠是任意OS系統
2、網絡結構拓撲圖
三、地址分配
CIP:172.17.250.60
VIP:172.17.253.20
DIP:192.168.11.17
RS1_ip:192.168.11.11
RS2_ip:192.168.11.12
四、 路由設置
客戶端:
VS端:
RS1端:
RS2端:
整體路由配置思路:
讓客戶端的路由指向VS的VIP,由於真實的互聯網環境中客戶端是經過路由叨叨VS的,可是實驗中爲了節省機器,因此咱們簡單的將客戶端的默認路由指向VS的VIP,須要注意的是CIP和VIP都是屬於公網地址,實驗環境中須要將這兩個IP地址分配爲同一網段的。
VS中的路由必定要有指向RS的出口,因此有兩個網段,一個對應外網,一個對應內網。
RS中的路由都要指向VS的DIP,這樣在負載分配的時候數據包能夠找到返回的路徑。
五、 VS端的配置
(1)開啓路由轉發功能
方法1、直接改內存參數
echo1 > /proc/sys/net/ipv4/ip_forward
Vim/etc/sysctl.conf
方法2、修改配置文件
添加:net.ipv4.ip_forward = 1
(2)關閉防火牆和selinux
(3)安裝ipvsadm
yum install ipvsadm
(4)配置ipvsadm進行修改ipvs參數
六、 RS須要配置web服務
這裏小編就不在進行配置了,咱們的主要目的是爲了實現負載均衡。因此小編事先分配好了web服務。
七、 在客戶端進行測試:
使用curl工具進行測試:
八、測試成功!
3、實驗過程錯誤總結
一、須要先對RS服務器進行測試,看web服務是否能正常使用,確保web服務沒有問題。
二、在VS上須要開啓路由轉發功能,不然VS不能未來自客戶端的請求轉發給RS服務器。
三、在配置的過程當中必定要保證路由是通暢的,確保客戶端可以ping通RS,這樣才能讓數據包正確的傳輸。
四、若是測試的時候顯示的並非分配到了兩臺RS上,多是VS的分配出了問題,若是客戶機可以ping通RS,則不會出現該問題。
五、若是測試中,客戶機可以ping通RS,可是不能訪問頁面,去查看VS上ipvsadm服務是否開啓。
六、若是ipvsadm服務不能正常開啓,能夠執行ipvsadm-seve > /etc/sysconfig/ipvsadm,執行完後再進行開啓ipvsadm服務。