Linux集群架構(2)LVS介紹、LVS的調度算法、NAT模式搭建、 DR模式、keepalive
LVS介紹
1.LVS NAT模式:(,目標ip轉發。適用於小型集群,機器數量不多10臺左右)
2.LVS IP Tunnel模式(將目標ip進行更改)
(在這個模式下的rs機器都是配置有公網ip)
3.LVS DR模式(把數據包的MAC地址修改)
NAT模式適合小型集群,機器在10臺左右。其優勢是節省公網ip。 IP TUNNEL和DR
相差不大,能使用在較大的集群模式下,但是每臺rs服務器都要配置有公網ip,這樣會比較浪費公網ip,費錢。
LVS的調度算法
常用的算法是前四種:rr 、wrr 、 lc 、wlc。
LVS NAT模式搭建
準備工作:
1.準備三臺機器(我是從第二臺直接克隆的)
(1)修改第三臺克隆機的ip
修改完重啟服務:
(2)修改克隆集主機名:
hostnamectl set-hostname cansheng3
2.將分發器,也叫調度器(簡寫為dir)機器(133)添加多一塊網卡:
(因為之前已經配置有了ens37)
這個ens37的網卡是僅主機模式
同時查看到這個網卡的子網ip網段是192.168.243.0
(1)所以對這個ens37設置ip:
vim /etc/sysconfig/network-scripts/ifcfg-ens37
修改完後重啟網絡服務:
systemctl restart network
(2)檢測ip是否能ping通:(在window的終端下測試)
ping 192.168.243.144
3.修改兩臺rs(真實服務器)網關(要和dir分發器的內網一致)
vim /etc/sysconfig/network-scripts/ifcfg-ens33
!!當這兩臺機器rs的網關修改成dir內網的ip時則不能上網。
修改完後重啟服務和查看網關
systemctl restart network
route -n
4.三臺機器上都執行執行
(1)systemctl stop firewalld;
systemc disable firewalld
(2)yum install -y iptables-services
(3)systemctl start iptables
(4)iptables -F;
(5)service iptables save
關閉selinux
vim /etc/selinux/config
(如果在使用yum下載的時候發現很慢,則先吧rpel改了名字再下載,需要用到rpel
再把名字改回來
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo1
)
開始 NAT模式搭建
1.只要在分發器dir上安裝ipvsadm (實現lvs功能的重要工具)
yum install -y ipvsadm
2.在dir上編寫腳本,vim /usr/local/sbin/lvs_nat.sh//內容如下
(寫這個腳本是為了更快執行所需命令,不寫則下列命令每行執行一次)
#! /bin/bash
# director 服務器上開啟路由轉發功能(對內核實現轉發)
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
# 註意區分網卡名字,我的兩個網卡分別為ens33和ens37(根據自己的網卡名設定)
echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects
# director 設置nat防火墻
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 192.168.136.0/24 -j MASQUERADE //實現讓同網段的內網實現上網
# director設置ipvsadm
IPVSADM='/usr/sbin/ipvsadm'
$IPVSADM -C //清空ipvsadm規則
$IPVSADM -A -t 192.168.243.144:80 -s lc -p 3 //添加一個規則,並指定調度算法為lc ,-p指定超時時間(單位秒,建議不加)
$IPVSADM -a -t 192.168.243.144:80 -r 192.168.136.134:80 -m -w 1 //-m:表示NAT模式;-i:ip Tunnel;-g:DR模式-w:表示權重
$IPVSADM -a -t 192.168.243.144:80 -r 192.168.136.135:80 -m -w 1 //-a:添加rs;-t:TCP
(-p的設置會是請求在指定的時間內請求在同一臺rs上)
寫完腳本執行一下:
sh /usr/local/sbin/lvs_nat.sh
(執行腳本任何輸出表示正確)
NAT模式效果測試
1. 兩臺rs上都安裝nginx,並開啟服務
2.設置兩臺rs的主頁,做一個區分,也就是說直接curl兩臺rs的ip時,得到不同的結果
A:對rs1機器操作
> /usr/share/nginx/html/index.html (清空文件內容)
vim /usr/share/nginx/html/index.html
B:對rs2機器操作:
> /usr/share/nginx/html/index.html (清空文件內容)
vim /usr/share/nginx/html/index.html
3. 瀏覽器裏訪問192.168.243.144,多訪問幾次看結果差異
瀏覽器中輸入公網ip
使用curl測試:curl 192.168.243.144
(可看出請求均衡在兩臺rs上)
使用命令 ipvadm -ln 可以看到相應的規則
DR模式搭建
(在生產環境中,使用較多的是DR模式,但是使用公網ip資源大。
在生產中也可以搭建一個內網,使用一個公網ip,映射到公網的VIP上,從而減少公網資金支出
)
準備工作
把上面實驗的兩臺rs的網關修改回來
DR模式搭建
1.dir上編寫腳本 vim /usr/local/sbin/lvs_dr.sh //內容如下
#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/usr/sbin/ipvsadm
vip=192.168.136.200
rs1=192.168.136.134
rs2=192.168.136.135
#註意這裏的網卡名字
ifdown ens33
ifup ens33
ifconfig ens33:2 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev ens33:2
$ipv -C
$ipv -A -t $vip:80 -s wrr
$ipv -a -t $vip:80 -r $rs1:80 -g -w 1
$ipv -a -t $vip:80 -r $rs2:80 -g -w 1
執行腳本:sh /usr/local/sbin/lvs_dr.sh
(這個提示是正常的。因為我們執行了ifdown 和ifup)
2.兩臺rs上也編寫腳本 vim /usr/local/sbin/lvs_rs.sh//內容如下
#/bin/bash
vip=192.168.136.200
#把vip綁定在lo上,是為了實現rs直接把結果返回給客戶端
ifdown lo
ifup lo
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
#以下操作為更改arp內核參數,目的是為了讓rs順利發送mac地址給客戶端
#參考文檔www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html
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
兩臺rs都執行腳本: sh /usr/local/sbin/lvs_rs.sh
檢測VIP
ip addr
3.測試:
測試最好是用另外一臺不同ip網段的虛擬機測試最好。
(當我們的訪問量很大時,自然起到均衡的作用。)
keepalived+ lvs
(在LVS架構中,NAT和DR模式,當後端的RS宕機時,調度器依然會把請求轉發到宕機的RS上。使用keepalived可以解決此問題,keepalived能實現高可用和負載均衡)
一般的情況下,使用這個keepalived做負載均衡,首先就是要做高可用再做負載均衡
所以最少要準備四臺機器:兩臺做keepalived,兩臺作為真實機器
(本次實驗用三臺機器
dir(安裝keepalived)136.133
rs1 136.134
rs2 133.135
vip 133.200
)
步驟
(在實驗之前,我們甚至是不需要使用ipvsadm 即可ipvsadm -c 卸載)
1. 編輯keepalived配置文件:
vim /etc/keepalived/keepalived.conf (先把之前內容清空)
/內容請到https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/lvs_keepalived.conf 獲取
內容:
vrrp_instance VI_1 {
#備用服務器上為 BACKUP
state MASTER
#綁定vip的網卡為ens33,你的網卡和阿銘的可能不一樣,這裏需要你改一下
interface ens33
virtual_router_id 51
#備用服務器上為90
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass aminglinux
}
virtual_ipaddress { #虛擬ip:VIP
192.168.136.200
}
}
virtual_server 192.168.136.200 80 { #端口根據具體監控的端口確定
#(每隔10秒查詢realserver狀態)
delay_loop 10
#(lvs 算法)
lb_algo wlc
#(DR模式)
lb_kind DR
#(同一IP的連接60秒內被分配到同一臺realserver)
persistence_timeout 60
#(用TCP協議檢查realserver狀態)
protocol TCP
real_server 192.168.136.134 80 {
#(權重)
weight 100
TCP_CHECK {
#(10秒無響應超時)
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.136.135 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
添加完內容後: 啟動keepalived服務
systemctl start keepalived
2.其他兩臺真實機器rs的nginx服務要啟動起來
systemctl start nginx
同時也要把之前的vip清空掉:systemctl restart network
3.使用 ipvsadm -ln :可以查看到設定的VIP和兩臺rs機器
此時我們嘗試著把氣筒一臺或兩臺rs機器的nginx服務停止,可以發現
keepalived會把宕機的rs機器踢出,這樣就可以保證到,當rs真實服務器
宕機後,請求不在發送到其上。
(1)停掉rs1機器後的效果:
(2)把兩臺的rs機器都停了
當我們把rs機器再次啟動的時候,keepalived會自動的把負載的機器添加回來
!!!!使用keepalived+LVS DR需要註意的事項.
(1)兩臺rs上,依然要執行/usr/local/sbin/lvs_rs.sh腳本
兩臺rs上也編寫腳本 vim /usr/local/sbin/lvs_rs.sh//內容如下
#/bin/bash
vip=192.168.136.200
#把vip綁定在lo上,是為了實現rs直接把結果返回給客戶端
ifdown lo
ifup lo
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up //命令行下添加ip。臨時添加,重啟失去
route add -host $vip lo:0
#以下操作為更改arp內核參數,目的是為了讓rs順利發送mac地址給客戶端
#參考文檔www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html
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
分別在dir上和兩個rs上執行這些腳本
(2)在dir分發器需執行
執行:echo 1 >/proc/sys/net/ipv4/ip_forward
瀏覽器測試:
Linux集群架構(2)LVS介紹、LVS的調度算法、NAT模式搭建、 DR模式、keepalive