Linux基礎(chǔ)及總結(jié)19之LVS、keepalived

1、簡述lvs四種集群特點及使用場景
  LVS工作在內(nèi)核的PREROUTING和INPUT鏈之間,當請求經(jīng)過PREROUTING鏈時,llvs發(fā)現(xiàn)請求是自己,會截取請求不在往INPUT鏈轉(zhuǎn)發(fā),而是查詢路由表經(jīng)過POSTROUTING鏈將請求轉(zhuǎn)發(fā)給后端的real server
  LVS-NAT模型
  NAT模型是多目標IP的DNAT,通過將請求報文中的目標地址和目標端口修改為某挑

出的RS的RIP和PORT實現(xiàn)轉(zhuǎn)發(fā)
(1)RIP和DIP應(yīng)在同一個IP網(wǎng)絡(luò),且應(yīng)使用私網(wǎng)地址,RS的網(wǎng)關(guān)要指向DIP
(2)請求報文和響應(yīng)報文都必須經(jīng)由Director轉(zhuǎn)發(fā),高并發(fā)場景下Director易于成為整個集群的性能瓶頸
(3)支持端口映射,可修改請求報文的目標PORT
(4)VS必須是Linux系統(tǒng),RS可以是任意OS系統(tǒng)

LVS-DR:Direct Routing,直接路由,LVS默認模式,應(yīng)用最廣泛,通過為請求報

文重新封裝一個MAC首部進行轉(zhuǎn)發(fā),源MAC是DIP所在的接口的MAC,目標
MAC是某挑選出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目標
IP/PORT均保持不變
(1) Director和各RS都配置有VIP
(2) 確保前端路由器將目標IP為VIP的請求報文發(fā)往Director
? 在前端網(wǎng)關(guān)做靜態(tài)綁定VIP和Director的MAC地址
? 在RS上使用arptables工具
arptables -A IN -d $VIP -j DROP
arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
? 在RS上修改內(nèi)核參數(shù)以限制arp通告及應(yīng)答級別
/proc/sys/net/ipv4/conf/all/arp_ignore
/proc/sys/net/ipv4/conf/all/arp_announce
(3)RS的RIP可以使用私網(wǎng)地址,也可以是公網(wǎng)地址;RIP與DIP在同一IP網(wǎng)絡(luò);
RIP的網(wǎng)關(guān)不能指向DIP,以確保響應(yīng)報文不會經(jīng)由Director
(4)RS和Director要在同一個物理網(wǎng)絡(luò)
(5)請求報文要經(jīng)由Director,但響應(yīng)報文不經(jīng)由Director,而由RS直接發(fā)往
Client,該方案在高并發(fā)場景下不會造成Director的性能瓶頸
(6)不支持端口映射(端口不能修?。?br> (7)RS可使用大多數(shù)OS系統(tǒng)

LVS-TUN模型
轉(zhuǎn)發(fā)方式:不修改請求報文的IP首部(源IP為CIP,目標IP為VIP),而在原IP報文

之外再封裝一個IP首部(源IP是DIP,目標IP是RIP),將報文發(fā)往挑選出的目標RS;RS直接響應(yīng)給客戶端(源IP是VIP,目標IP是CIP)
(1) DIP, VIP, RIP都應(yīng)該是公網(wǎng)地址
(2) RS的網(wǎng)關(guān)一般不能指向DIP
(3) 請求報文要經(jīng)由Director,但響應(yīng)不經(jīng)由Director
(4) 不支持端口映射
(5) RS的OS須支持隧道功能

lvs-fullnat模式

? lvs-fullnat:通過同時修改請求報文的源IP地址和目標IP地址進行轉(zhuǎn)發(fā)
CIP --> DIP
VIP --> RIP
(1) VIP是公網(wǎng)地址,RIP和DIP是私網(wǎng)地址,且通常不在同一IP網(wǎng)絡(luò);因此,
RIP的網(wǎng)關(guān)一般不會指向DIP
(2) RS收到的請求報文源地址是DIP,因此,只需響應(yīng)給DIP;但Director還
要將其發(fā)往Client
(3) 請求和響應(yīng)報文都經(jīng)由Director,在高并發(fā)場景下Director同樣會成為整個集群的性能瓶頸
(4) 支持端口映射
(5) 此類型kernel默認不支持

LVS工作模式總結(jié)
  lvs-nat與lvs-fullnat:請求和響應(yīng)報文都經(jīng)由Director
  lvs-nat:RIP的網(wǎng)關(guān)要指向DIP
  lvs-fullnat:RIP和DIP未必在同一IP網(wǎng)絡(luò),但要能通信

? lvs-dr與lvs-tun:請求報文要經(jīng)由Director,但響應(yīng)報文由RS直接發(fā)往Client
lvs-dr:通過封裝新的MAC首部實現(xiàn),通過MAC網(wǎng)絡(luò)轉(zhuǎn)發(fā),Director和RS要在同一物理網(wǎng)絡(luò)
lvs-tun:通過在原IP報文外封裝新IP頭實現(xiàn)轉(zhuǎn)發(fā),支持遠距離通信

2、描述LVS-DR工作原理,并配置實現(xiàn)。
  DR模型是LVS默認工作模型,生產(chǎn)中應(yīng)用最廣泛,通過為請求報文重新封裝一個MAC首部進行轉(zhuǎn)發(fā),源MAC是DIP所在的接口的MAC,目標MAC是某挑選出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目標IP/PORT均保持不變
 client  10.0.35.52 GW:10.0.35.16    
 route  10.0.35.16,192.168.10.10  
 LVS  DIP:192.168.10.20/24  GW:192.168.10.10  VIP:192.168.10.100/32    
 realserver1  DIP:192.168.10.11/24    GW:192.168.10.10  VIP:192.168.10.100/32 
 realserver2  DIP:192.168.10.11/24    GW:192.168.10.10  VIP:192.168.10.100/32 
     1)配置兩臺realserver
      RS1
      在回環(huán)網(wǎng)卡上添加vip
      ifconfig lo:1 192.168.10.100/32
      在RS上修改內(nèi)核參數(shù)以限制arp通告及應(yīng)答級別,內(nèi)核轉(zhuǎn)發(fā)
      echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
      echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
      echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
      echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
      安裝httpd,并分別創(chuàng)建網(wǎng)頁文件
      yum -y install httpd
      echo "real server 1" > /var/www/html/index.html
      RS2
      在回環(huán)網(wǎng)卡上添加vip
      ifconfig lo:1 192.168.10.100/32
      在RS上修改內(nèi)核參數(shù)以限制arp通告及應(yīng)答級別
      echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
      echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
      echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
      echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
      安裝httpd,并分別創(chuàng)建網(wǎng)頁文件
      yum -y install httpd
      echo "real server 1" > /var/www/html/index.html
2)LVS server配置
      安裝ipvsadm包
       yum -y install ipvsadm
      添加VIP
      ifconfig lo:1 192.168.10.100/32
      添加lvs集群規(guī)則
      ipvsadm -A -t 192.168.10.100:80 -s rr
      ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.11 
      ipvsadm -a -t 192.168.10.100:80 -r 192.168.1.12
      查看規(guī)則
      ipvsadm -Ln
image.png

3)客戶端訪問驗證lvs集群服務(wù)
while true;do crul 192.168.10.100; sleep 0.5;done


image.png
3、實現(xiàn)LVS+Keepalived高可用

10.0.30.120 client
10.0.30.122 lvs1+keepalived-master
10.0.30.123 lvs1+keepalived-slave
10.0.30.124 realserver1
10.0.30.125 realserver2
10.0.30.130 VIP
部署前各節(jié)點配置IP,關(guān)閉防火墻,iptables,同步時間
1)配置兩臺realserver
RS1
在回環(huán)網(wǎng)卡上添加vip
ifconfig lo:1 10.0.30.130
在RS上修改內(nèi)核參數(shù)以限制arp通告及應(yīng)答級別
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
安裝httpd,并分別創(chuàng)建網(wǎng)頁文件
yum -y install httpd
echo "real server 1" > /var/www/html/index.html
RS2
在回環(huán)網(wǎng)卡上添加vip
ifconfig lo:1 10.0.30.130
在RS上修改內(nèi)核參數(shù)以限制arp通告及應(yīng)答級別
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
安裝httpd,并分別創(chuàng)建網(wǎng)頁文件
yum -y install httpd
echo "real server 1" > /var/www/html/index.html
2)配置keepalived和lvs
keepalived-master 主節(jié)點配置
開啟內(nèi)核轉(zhuǎn)發(fā)功能
echo 1 > /rpoc/sus/net/ipv4/ip_forward
安裝keepalive和ipvsadm
yum -y install keepalived ipvsadm httpd
配置keepalived
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
? global_defs {
notification_email {
? root@localhost
}
notification_email_from keepalived@localhost
smtp_server localhost
smtp_connect_timeout 30
router_id keepalived-master #必須唯一
? }

? vrrp_instance web {
? state MASTER
? interface ens192
? virtual_router_id 51 #keepalived集群同一實例中的節(jié)點該項必須相同
priority 100
? advert_int 1
? authentication {
? auth_type PASS
? auth_pass 1111
? }
? virtual_ipaddress {
? 10.0.30.130
? }
? }
? virtual_server 10.0.30.130 80 {
? delay_loop 6
? lb_algo rr
? lb_kind DR
? #persistence_timeout 50
? protocol TCP
? sorry_server 127.0.0.1 80
real_server 10.0.30.124 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 10.0.30.125 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
keepalive-slave 從節(jié)點配置
開啟內(nèi)核轉(zhuǎn)發(fā)功能
echo 1 > /rpoc/sus/net/ipv4/ip_forward
安裝keepalive和ipvsadm
yum -y install keepalived ipvsadm httpd
配置keepalived
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
? global_defs {
notification_email {
? root@localhost
}
notification_email_from keepalived@localhost
smtp_server localhost
smtp_connect_timeout 30
router_id keepalived-slave #必須唯一
? }

? vrrp_instance web {
? state BACKUP
? interface ens192
? virtual_router_id 51 #keepalived集群同一實例中的節(jié)點該項必須相同
priority 100
? advert_int 1
? authentication {
? auth_type PASS
? auth_pass 1111
? }
? virtual_ipaddress {
? 10.0.30.130
? }
? }
? virtual_server 10.0.30.130 80 {
? delay_loop 6
? lb_algo rr
? lb_kind DR
? #persistence_timeout 50
? protocol TCP
? sorry_server 127.0.0.1 80
real_server 10.0.30.124 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 10.0.30.125 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
3)lvs節(jié)點上啟動httpd服務(wù)配置集群的sorry server,目的是當后端所有的realserver服務(wù)不可用時,給客戶端返回自定義錯誤頁面。
keepalived-master 主節(jié)點
echo "sorry, webserver is not available, keepalived-master!" > /var/www/html/index.html
systemctl start httpd
keepalived-master 主節(jié)點
echo "sorry, webserver is not available, keepalived-slave!" > /var/www/html/index.html
systemctl start httpd
4)驗證keepalived+LVS集群
啟動keepalived主從節(jié)點上的服務(wù),并且驗證keeplived的高可用性
systemctl start keepalived
查看vip綁定情況

image.png

image.png

模擬keepalived主節(jié)點服務(wù)down機vip漂移
image.png

5)驗證web集群服務(wù)
查看lvs規(guī)則(當在配置文件中配置好realserver后,keepalived會根據(jù)后端realserver的監(jiān)控狀態(tài)自動添加或者刪除lvs規(guī)則)
image.png

客戶端訪問驗證后端web服務(wù)
while true;do curl 10.0.30.130;sleep 0.5;done
image.png

驗證lvs自定義錯誤頁面,停止所有realserver的httpd服務(wù)
查看ipvs規(guī)則
image.png

image.png

6)配置keepalived服務(wù)發(fā)生主備切換時,郵件通知
配置發(fā)送郵件的郵箱設(shè)置:
vim ~/.mailrc 或 /etc/mail.rc
set from=515505634@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=515505634@qq.com
set smtp-auth-password=gphyesscchclbhfh
set smtp-auth=login
set ssl-verify=ignore
配置keepalived調(diào)用通知腳本:
編寫郵件通知腳本并添加執(zhí)行權(quán)限:
vim /etc/keepalived/notify.sh
#!/bin/bash
#
contact='root@localhost'
notify() {
mailsubject="1, vip floating"
mailbody="(hostname) changed to be mailbody" | mail -s "contact
}
case (basename $0) {master|backup|fault}"
exit 1
;;
esac
在global_defs語句塊最后添加如下兩行,設(shè)置keepalived執(zhí)行腳本的用戶
script_user root
enable_script_security
? 在vrrp_instance web 語句塊最后面加下面行,主從節(jié)點配置相同
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
重啟主從節(jié)點keepalived服務(wù),模擬一個節(jié)點keepalived服務(wù)故障,驗證郵件通知功能
image.png

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容