一、nat模式配置
環境說明:
DS:nat網卡(自動獲取也可以,充當vip):
192.168.254.13
255.255.255.0
vmnet3網卡(僅主機):
172.16.100.1
255.255.255.0
RS1:(僅主機vmnet3)
172.16.100.10
255.255.255.0
172.16.100.1
RS2:(僅主機vmnet3)
172.16.100.20
255.255.255.0
172.16.100.1
工作流程:
1、用戶請求VIP(也可以說是CIP請求VIP)
2、Director Server 收到用戶的請求后,發現源地址為CIP請求的目標地址為VIP,那么Director Server會認為用戶請求的是一個集群服務,那么Director Server 會根據此前設定好的調度算法將用戶請求負載給某台Real Server。
假如說此時Director Server 根據調度的結果會將請求分攤到RealServer1上去,那么Director Server 會將用戶的請求報文中的目標地址,從原來的VIP改為RealServer1的IP,然后再轉發給RealServer1
3、此時RealServer1收到一個源地址為CIP目標地址為自己的請求,那么RealServer1處理好請求后會將一個源地址為自己目標地址為CIP的數據包通過Director Server 發出去
4、當Driector Server收到一個源地址為RealServer1 的IP 目標地址為CIP的數據包,此時Driector Server 會將源地址修改為VIP,然后再將數據包發送給用戶
安裝lvs:
yum install ipvsadm
調度器上開啟路由轉發模式:
臨時性:
echo 1 > /proc/sys/net/ipv4/ip_forward
永久性:
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
ipvsadm配置:
ipvsadm -A -t 192.168.254.13:80 -s rr
ipvsadm -a -t 192.168.254.13:80 -r 172.16.105.10 -m
ipvsadm -a -t 192.168.254.13:80 -r 172.16.100.20 -m
ipvsadm命令:
查看lvs集群連接狀態 ipvsadm -Ln --stats
查看lvs集群配置 ipvsadm -Ln
保存ipvs配置 ipvsadm-save
還原 ipvsadm-restore
ipvsadm -S > /etc/sysconfig/ipvsadm #把配置文件保存在配置文件中
ipvsadm -R < /etc/sysconfig/ipvsadm #從配置文件中恢復到當前配置
二、dr模式配置
虛擬機網卡模式:
DS:NAT(自動獲取)
RS1:NAT(自動獲取)
RS2:NAT(自動獲取)
DR模式
direct_server:192.168.254.13
real_server:192.168.254.12
real_server:192.168.254.10
vip:192.168.254.250 #vip為虛擬服務ip
direct_server:yum install ipvsadm
工作方式:
上面說了NAT模型的實現方式,那么NAT模型有個缺陷,因為進出的每個數據包都要經過Director Server,當集群系統負載過大的時候Director Server將會成為整個集群系統的瓶頸,那么DR模型就避免了這樣的情況發生,DR模型在只有請求的時候才會經過Director Server, 回應的數據包由Real Server 直接響應用戶不需要經過Director Server,其實三種模型中最常用的也就是DR模型了。
工作流程:
1、首先用戶用CIP請求VIP
2、不管是Director Server還是Real Server上都需要配置VIP,當用戶請求到達我們的集群網絡的前端路由器的時候,請求數據包的源地址為CIP目標地址為VIP,此時路由器會發廣播問誰是VIP,那么我們集群中所有的節點都配置有VIP,此時誰先響應路由器那么路由器就會將用戶請求發給誰,這樣一來我們的集群系統是不是沒有意義了,那我們可以在網關路由器上配置靜態路由指定VIP就是Director Server,或者使用一種機制不讓Real Server 接收來自網絡中的ARP地址解析請求,這樣一來用戶的請求數據包都會經過Director Servrer
3、當Director Server收到用戶的請求后根據此前設定好的調度算法結果來確定將請求負載到某台Real Server上去,假如說此時根據調度算法的結果,會將請求負載到RealServer 1上面去,此時Director Server 會將數據幀中的目標MAC地址修改為Real Server1的MAC地址,然后再將數據幀發送出去
4、當Real Server1 收到一個源地址為CIP目標地址為VIP的數據包時,Real Server1發現目標地址為VIP,而VIP是自己,於是接受數據包並給予處理,當Real Server1處理完請求后,會將一個源地址為VIP目標地址為CIP的數據包發出去,此時的響應請求就不會再經過Director Server了,而是直接響應給用戶。
老板
direct_server:
ipvsadm -C #清除配置信息
#添加對外提供的服務ip
ipvsadm -A -t 192.168.254.250:80 -s rr #-A為ADD -t為tcp -s rr為設置算法為輪叫算法
#添加2台real_server主機
ipvsadm -a -t 192.168.254.250:80 -r 192.168.254.12:80 -g #-a為add -t為tcp -r為realserver -g為DR路由模式
ipvsadm -a -t 192.168.254.250:80 -r 192.168.254.10:80 -g #-a為add -t為tcp -r為realserver -g為DR路由模式
#配置網卡的子網口為vip,ip地址為192.168.254.250
ifconfig ens33:0 192.168.254.250 broadcast 192.168.254.250 netmask 255.255.255.255 up
#添加路由(訪問192.168.254.250都走ens33:0這個網卡)
route add -host 192.168.254.250 dev ens33:0
員工1 | 員工2
real_server:
#在回環地址的子網口上配置服務ip(vip)
ifconfig lo:0 192.168.254.250 broadcast 192.168.254.250 netmask 255.255.255.255 up
#添加路由
route add -host 192.168.254.250 dev lo:0
#刪除路由:route delete -host 192.168.254.250
echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
關閉:
echo "0">/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0">/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0">/proc/sys/net/ipv4/conf/all/arp_announce
arp_ignore:定義接收到ARP請求時的響應級別
0:默認,只用本地配置的有響應地址都給予響應
1:僅僅在目標IP是本地地址,並且是配置在請求進來的接口上的時候才給予響應 (僅在請求的目標地址配置請求到達的接口上的時候,才給予響應)
2:只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求,且來訪IP必須在該網絡接口的子網段內
3:不回應該網絡界面的arp請求,而只對設置的唯一和連接地址做出回應
4-7:保留未使用
8:不回應所有(本地地址)的arp查詢
arp_announce:定義將自己的地址向外通告時的級別
0:默認,表示使用配置在任何接口的任何地址向外通告
1:盡量僅向目標網絡通告與其網絡匹配的地址
2:僅向與本地接口上地址匹配的網絡進行通告
1、RealServer為什么要在lo接口上配置VIP?
既然要讓RS能夠處理目標地址為vip的IP包,首先必須要讓RS能接收到這個包。在lo上配置vip能夠完成接收包並將結果返回client。
2、在eth0網卡上配置VIP可以嗎?
不可以,將VIP設置在eth0網卡上,會影響RS的arp請求,造成整體LVS集群arp緩存表紊亂,以至於整個負載均衡集群都不能正常工作。
3、為什么要抑制ARP響應?
① arp協議說明
ARP協議,全稱"Address Resolution Protocol",中文名是地址解析協議,使用ARP協議可實現通過IP地址獲得對應主機的物理地址(MAC地址)。
ARP協議要求通信的主機雙方必須在同一個物理網段(即局域網環境)!
為了提高IP轉換MAC的效率,系統會將解析結果保存下來,這個結果叫做ARP緩存。
Windows查看ARP緩存命令 arp -a
Linux查看ARP緩存命令 arp -n
Linux解析IP對應的MAC地址 arping -c 1 -I eth0 10.0.0.6
ARP緩存表是把雙刃劍
a) 主機有了arp緩存表,可以加快ARP的解析速度,減少局域網內廣播風暴。因為arp是發廣播解析的,頻繁的解析也是消耗帶寬的,尤其是機器多的時候。
b) 正是有了arp緩存表,給惡意黑客帶來了攻擊服務器主機的風險,這個就是arp欺騙攻擊。
c) 切換路由器,負載均衡器等設備時,可能會導致短時網絡中斷。因為所有的客戶端ARP緩存表沒有更新
②服務器切換ARP問題
當集群中一台提供服務的lb01機器宕機后,然后VIP會轉移到備機lb02上,但是客戶端的ARP緩存表的地址解析還是宕機的lb01的MAC地址。從而導致,即使在lb02上添加VIP,也會發生客戶端無法訪問的情況。
解決辦法是:當lb01宕機,VIP地址遷移到lb02時,需要通過arping命令通知所有網絡內機器更新本地的ARP緩存表,從而使得客戶機訪問時重新廣播獲取MAC地址。這個是自己開發服務器高可用腳本及所有高可用軟件必須考慮到的問題。
ARP廣播進行新的地址解析
arping -I eth0 -c 1 -U VIP
arping -I eth0 -c 1 -U 10.0.0.13
測試命令
ip addr del 10.0.0.13/24 dev eth0
ip addr add 10.0.0.13/24 dev eth0
ip addr show eth0
arping -I eth0 -c 1 -U 10.0.0.13
三、tun隧道模式
lvs-server
ifconfig tunl0 192.168.254.250 broadcast 192.168.254.250 netmask 255.255.255.0 up
route add -host 192.168.254.250 dev tunl0
ipvsadm -A -t 192.168.254.250:80 -s rr
ipvsadm -a -t 192.168.254.250:80 -r 192.168.254.18 -i
ipvsadm -a -t 192.168.254.250:80 -r 192.168.254.19 -i
real_server
ifconfig tunl0 192.168.254.250 netmask 255.255.255.255 broadcast 192.168.254.250 up
route add -host 192.168.254.250 dev tunl0
echo "1" >/proc/sys/net/ipv4/conf/tunl0/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/tunl0/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/tunl0/rp_filter
echo "0" > /proc/sys/net/ipv4/conf/all/rp_filter
0:不開啟源地址校驗。
1:開啟嚴格的反向路徑校驗。對每個進來的數據包,校驗其反向路徑是否是最佳路徑。
如果反向路徑不是最佳路徑,則直接丟棄該數據包。
2:開啟松散的反向路徑校驗。對每個進來的數據包,校驗其源地址是否可達,即反向路徑是否能通(通過任意網口),
如果反向路徑不同,則直接丟棄該數據包。
四、ipvsadm語法及選項
1、語法:
ipvsadm -A|E -t|u|f <集群服務地址> [-s <調度算法>] [-p <超時時間>] [-M <掩碼>] [-b <標志>]
ipvsadm -D -t|u|f <集群服務地址>
ipvsadm -C
ipvsadm -R
ipvsadm -S [-n]
ipvsadm -a|e -t|u|f <集群服務地址> -r <真實服務器地址> [選項]
ipvsadm -d -t|u|f <集群服務地址> -r <真實服務器地址>
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f <集群服務地址>]
ipvsadm --set <超時時間>
ipvsadm --start-daemon <主或備> [--mcast-interface <組播接口>] [--syncid <SID>]
ipvsadm --stop-daemon <主或備>
ipvsadm -h
2、子命令:
--add-service -A 添加一個集群服務,需要使用選項
--edit-service -E 編輯一個集群服務,需要使用選項
--delete-service -D 刪除指定集群服務,需要使用選項
--clear -C 刪除所有集群服務,包括真實服務器轉發策略規則
--restore -R 從標准輸入中恢復策略規則
--save -S 保存策略規則到標准輸出
--add-server -a 添加一個真實服務器,需要使用選項
--edit-server -e 編輯一個真實服務器,需要使用選項
--delete-server -d 刪除一個真實服務器,需要使用選項
--list -L|-l 查看集群服務列表,包括真實服務器轉發策略規則
--zero -Z 計數器清零。清除連接數、包轉發等數量統計信息
--set <超時時間> 設置TCP、TCPFIN(TCP關閉連接狀態)、UDP連接超時時間,用於會話保持。一般情況下TCP和UDP超時時間保持默認就好,TCPFIN
可以根據情況設定,指定它則用戶請求連接關閉,該連接則會變
為非活躍(InActive)空閑等待狀態,在空閑等待時間內,如果
來自同一源IP的請求,則還會轉發給后端的同一台真實服務器上
--start-daemon 開啟連接同步守護進程。在選項后面指定自己是Master(主)還是backup(備),主負載調度器會同步所有策略及連接狀態到備負載調度器,當主故障,備可以接替其工作
--stop-daemon 停止連接同步守護進程
--help -h 顯示幫助信息
3、集群服務相關
-A:添加一個集群服務
-t:tcp
-u:udp
-f:firewall-mark,通常用於將兩個或以上的服務綁定為一個服務進行處理是使用,integer類型
service-address:
-t:ip:port
-u:ip:port
-f:firewall-mark
-s:調度算法,默認為wlc
-p:timout:persistent connection,持久連接
-E:修改定義過的集群服務
-D:-t|-u|-f service-address:刪除指定得集群服務
4、RS(Real Server)相關
-a:向指定得CS(Cluster Service)中添加RS(Real Server)
-t|-u|-f service-address:指明將RS添加至哪個Cluster Service中
-r:指定RS(Real Server),可包含{IP[:port]},只有支持端口映射的LVS類型才允許此處使用跟集群服務中不同的端口
LVS類型:
-g:Gateway,DR(默認使用的類型)
-i:ipip,TUN
-m:masquerade(地址偽裝),NAT
指定RS(Real Server)權重:
-w 取值范圍0-65535
-e:修改指定的RS屬性
-d:-t|-u|-f service-address -r server-address:從指定得集群服務中刪除某RS
5、清空所有的集群服務:
-C
6、保存規則:(使用輸出重定向)
ipvsadm-save
ipvsadm -S
7、載入指定的規則:(使用輸入重定向)
ipvsadm-restore
ipvsadm -R
8、查看ipvsadm規則
ipvsadm -L [options]
-n:數字格式顯示IP地址
-c:顯示連接數相關信息
--stats:顯示統計數據
--rate:速率
--exact:顯示統計數據的精確值
9、計數器清零
-Z