LVS-DNAT
工作原理:
在資料包進入本機內部之前,就改變它的目的地址(需要在核心實現)
LVS的工作機制類似iptables,一部分工作在使用者空間(ipvsadm),一部分工作在核心空間
安裝ipvsadm軟體就足以實現LVS的功能
使用ipvsadm,早期需要重新編譯核心,不過現在版本的redhat預設直接做進核心
# 查看核心是否含有ipvs
grep –I –c 5 ipvs /boot/config-‘uname -r’
ipvsadm命令的使用:
ipvsadm功能
1:定義叢集服務
2:定義真正的REALSERVER
3:查看定義的資訊
1.定義叢集服務
ipvsadm
-t 基於tcp的叢集服務
-u 基於udp
-f 基於firewall的叢集服務,防火牆的類型
-A 添加一個新叢集
-E 修改一個叢集
-s 指定演算法 預設 wlc
-D 刪除一個叢集
-g|i|m gateway|internet|net DR|TUN|DNAT模型
-w 權重
-C 清空規則
-S 儲存規則到某個檔案
-R 從某個檔案恢複規則
-L|l 查看
-n --numeric 數字方式顯示地址
--stats 顯示統計的資料資訊(statistics的簡寫)
--rate 顯示速率資訊
-Z 清空計數器
添加/刪除director端
ipvsadm -A| -E -t |-u VIP:port -s
ipvsadm -D -t|-u VIP:port
添加/刪除realserver端
ipvsadm -a |-e -t|-u VIP:port -r REALSERVER[-g|-i|-m] [-w weight]
ipvsadm -d -t|-u VIP:port -r READSERVER
配置安裝LVS
1.安裝OS
2.後方安裝apache
3.設定預設路由
4.安裝lvs
5.配置LVS,定義好規則
6.做測試
1.兩個apache作為realserver 只提供靜態頁面
2.Directory開啟轉寄功能
3.兩個realserver處於同一個網段
準備:
1) 3台乾淨的虛擬機器:RS1 RS2 Director (需要加一塊網卡)
2) 配置各自的好yum源
一:配置好地址,安裝軟體
realserver端:
ifconfig eth0 10.0.0.11/8
route add default gw 10.0.0.1/8
yum install httpd php php-mysql mysqlmysql-server php-mbstring -y
# 測試網頁是否顯示
vim /var/www/html/index.html
realserver1
service httpd start
elinks http://10.0.0.11
directory端:
ifconifg eth0 10.0.0.1/8
yum install ipvsadm
# 開啟ipforward
echo 1 > /proc/sys/net/ipv4/ip_forward
#添加director
ipvsadm -A -t 172.16.14.1:80 -s rr
# 查看叢集服務
ipvsadm -L -n
#添加realserver
ipvsadm -a -t 172.16.14.1:80 -r 10.0.0.11-m
ipvsadm -a -t 172.16.14.1:80 -r 10.0.0.12-m
ipvsadm -L -n
叢集已經構建好了。。。。用瀏覽器測試下
# 壓力測試,十個並發串連,發起10000次
ab -c 10 -n 10000 http://172.16.14.1/index.html
# 查看結果
ipvsadm -Ln
# 使用加權最少串連
ipvsadm -E -t 172.16.14.1:80 -s wlc
# 修改權重
ipvsadm -e -t 172.16.14.1:80 -r 10.0.0.11-m -w 3
# 壓力測試,十個並發串連,發起10000次
ab -c 10 -n 10000http://172.16.14.1/index.html
# 換別的演算法來測試,看看效果 單引號
watch -n 1 ‘ipvsadm -L -n’
# 儲存ipvsadm 結果,否則開機就沒有了
# 對於redhat
service ipvsadm save
chkconfig ipvsadm on
# 或者
ipvsadm -S > /etc/sysconfig/ipvsadm
##########建議自己寫指令碼實現,save的功能,最好帶startstop restart
==========================================================================
LVS-DR
工作原理:
通過設定核心參數,禁止RS直接響應使用者請求,既將RS都隔離起來,只允許它們響應DR轉寄過來的請求。
使用LVS-DR 前提:
核心有 arp_announce 和 arp_ignore
arp_annouce 定義通過哪個地址向別人通告本地MAC-ip對應資訊所定義的限制層級
0 表示響應任意本地地址,任何介面(IP地址屬於核心而不是網卡)
1 儘可能的避免用和來源主機的IP地址非同一個網路的地址響應它
2 總是用本地的最佳地址給予響應(同一個網段)
arp_ignore 定義回應程式式和類型
0 無論地址放在任何地方都響應
1 只有在所請求的地址和請求所進來的介面一致(既進來的介面和請求的地址是同一個網段)的時候才響應
想想一下 arp_ignore=1 arg_annouce=2
伺服器拒絕響應2.2
解決資料進入:
為了避免RS直接響應,給伺服器的lo:0設定VIP地址,給本地網卡設定成CIP,這樣RS就不會直接響應了,隱藏了RS
解決資料出去:
而預設情況下,Linux設定資料包從哪塊網卡出去,源地址設為該網卡地址,通過添加一條特殊路由資訊,如果目標地址是lo的VIP地址,那麼出去的時候源地址設定為lo的地址。
路由資訊的原理:
添加一條主機路由,將VIP的地址自己設定成一個網段,既子網路遮罩為255.255.255.255,這樣VIP出去的時候沒有比VIP更優的了,就成為最佳IP
相關網路規劃如下:
需要配置:
1.Lo設為VIP
2.修改核心參數
3.添加特殊路由
配置LVS-DR須注意:
1.設定網卡模式為橋接
2.RIP地址不一定必須是公網地址
一、設定網卡
Director端
1.DIP配置在介面上,VIP要配置在介面別名上
# director ,一步到位,否則需要重啟網路服務
ifconfig eth0:0 172.16.14.1 broadcast172.16.14.1 netmask 255.255.255.255 up # VIP
ifconfig eth0 172.16.14.10 # DIP
VIP應該設定在別名地址上,DIP設定在靜態地址上,所有VIP設定在eth0:0
RS端
DIP 要配置在介面上,VIP要配置在lo的別名上
ifconfig eth0 172.16.14.11 # RIP
# 配置核心參數,禁止響應對VIP的ARP廣播請求
echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce
echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce
# 此時設定VIP,就不會和director衝突
# 255.255.255.255 自閉
# VIP 只向自己廣播
ifconfig lo:0 172.16.14.1 broadcast172.16.14.1 netmask 255.255.255.255 up
# 增加路由資訊,所有出去的資訊都以dev的資訊為準
route add -host 172.16.14.1 dev lo:0
route -n
所有的RS都要設定
二.配置ipvsadm
ipvsadm -C # 去掉上次的
ipvsadm -A -t 172.16.14.1:80 -s wlc
ipvsadm -a -t 172.16.14.1:80 -r172.16.14.11 -g w 2
ipvsadm -a -t 172.16.14.1:80 -r172.16.14.12 -g w 4
ipvsadm -L -n