LVS集群之NAT模式實現
一、集群的種類
集群系統主要分為
1、HA:高可用集群,又叫雙機熱備。
(a)原理
2台機器A,B,正常是A提供服務,B待命閑置,當A宕機或服務宕掉,會切換至B繼續提供服務
(b)常用的高可用開源軟件:heartbeat和keepalived(可以做負載均衡)
2、LB:負載均衡集群
3、HPC:高性能計算集群
二、LB集群
1、實現手段
硬件:F5負載均衡器
軟件:LVS(4層,網絡層), Nginx(7層,應用層)
2、負載均衡架構圖
說明:
LVS集群使用三層架構
第一層:負載均衡層(Load Balancer)
位於整個集群系統的最前端,由一台或多台負載調度器(Director Server,以下簡稱dir)組成。
dir的作用類似一個路由器,它含有為完成LVS功能所設定的路由表,通過這些路由表把用戶的請求分發給服務器群組層的應用服務器(Real Server)
ps:客戶認為服務是來自一個虛擬IP地址上
第二層:服務器群組層(Server Arrary)
由一組實際運行應用服務的機器組成。Real Server(以下簡稱rs)可以是Web服務器、Mail服務器、FTP服務器、DNS服務器等
第三層:共享存儲層(Shared Storage)
是為所有rs提供共享存儲空間和內容一致性的存儲區域,一般由磁盤陣列設備組成。
一般可以通過NFS網絡文件系統共享數據(在繁忙的業務系統中,性能並不太好),此時可以用集群文件系統,如 Red Hat 的 GFS 文件系統,Oracle 提供的 OCFS2 文件系統等
3、LVS分3種模式
(a)NAT(網絡地址映射):通過網絡地址轉換的方法來實現調度
優點:支持所有操作系統及私有網絡,且只需一個公網 IP 地址
缺點:用戶請求和響應報文都必須經過dr地址重寫,當用戶請求越來越多時,調度器的處理能力將成為瓶頸。
(b)DR(直接路由模式):通過改寫請求報文的MAC地址,將請求發送到 rs,而 rs 將響應直接返回給客戶 ——》
性能最好
(c)TUN(IP隧道模式):dr采用IP隧道技術將用戶請求轉發到某個rs,而這個rs將直接響應用戶請求,不再經過dr ——》dr只處理用戶的報文請求,從而使集群系統吞吐量大大提高
ps:還有第 4 種模式 FULLNAT(淘寶ospf+lvs)
################ 搭建來了 ###################
三、搭建LVS-NAT模式集群實現負載均衡
1、分發器 director 配置
——
網絡配置前期工作
(a)配置網絡環境,增加網卡eth2(需要添加HWADDR不同的網卡,我的eth1跟eth0是一樣的,所以只能用eth2)
(b)生成eth2配置文件,配置虛擬 IP 地址為 10.0.69.132
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth2
(i)DEVICE=eth2
(ii)IPADDR=10.0.69.132(跟物理機同一網段)
(iii)GATEWAY=10.0.69.1
(c)重啟網絡服務:service network restart
內網ip:192.168.131.132
外網ip:10.0.69.132
物理機可以ping通虛擬 IP
—— 開啟路由轉發功能,安裝配置LVS-NAT
1、安裝lvs核心軟件包 yum install -y ipvsadm
2、寫腳本管理(開啟路由轉發、添加虛擬服務、添加虛擬服務后端的real server)
vim /usr/local/sbin/lvs_nat.sh
參數說明:
-A:增加一個虛擬服務
-a:增加real server
-r:指定real server 的 IP地址
-t:表示TCP服務
-s:指定調度算法 rr:輪詢算法(對調度算法感興趣的大家可以查查~)
-m(masquerade):也就是NAT方式的LVS
3、執行腳本 sh !$
4、查看規則 ipvsadm -ln
二、真實服務器real server配置
rs1: 192.168.131.110
rs2: 192.168.131.131
rs1和rs2都要修改網卡配置文件: /etc/sysconfig/network-scripts/ifcfg-eth0
1、網關GATEWAY都要指向分發器 dir 的 IP
(192.168.131.132) ——》 一開始我懵逼,寫成vip了,囧。一定要理解原理(so important)
2、重啟網卡生效:ifdown eth0; ifup eth0
三、測試
1、修改nginx的默認頁面(好區分)
rs1:echo "192.168.131.110 master" > /usr/share/nginx/html/index.html
rs2:echo "192.168.131.131 slave" > /usr/share/nginx/html/index.html
2、real server(rs1,rs2)開啟 nginx 服務:/etc/init.d/nginx start
(httpd也可以:yum install httpd)
其實就是開啟80端口的web服務(記得查下 netstat查看是否監聽80端口)
注意:分發器 dir 並沒有監聽 80 端口
因為 dir 是一個路由器,只負責轉發 80 端口上的數據給后端,自己並不處理請求
dir 訪問外網 IP(10.0.69.132)
(1)不設權重測試(上面腳本內容就是)
(2)設置權重測試(rs1: 3 rs2: 1)
結果:
拓展:
ipvsadm -ln --stats ==> 查看分發情況
ipvsadm -ln --rate ==> 查看速率
ipvsadm -C ==> 清空規則
ps:如果curl無法成功,檢查下防火牆是否關了(iptables -F;setenforce 0) ————》 懵逼的我被這里卡了很久 = =
大家一定要記得關防火牆哇 o(>ω<)o
