基於keepalived的LVS-DR模型構建
基礎環境的準備:
兩臺keepalived的高可用服務器,兩臺real server用於配置httpd服務
在兩臺real server上安裝httpd服務並創建測試頁面:
關閉防火墻跟selinux之後開始配置
yum install -y httpd
systemctl start httpd
systemctl enable httpd
vim /var/www/html/index.html //創建測試頁面
This httpd-1 Page
另一臺real server做同樣配置
配置兩臺高可用服務器,在安裝keepalived之前先驗證以下LVS-DR模型,驗證完之後在安裝keepalived進行高可用的配置
添加vip地址
ip addr add 192.168.153.100/32 dev ens33
配置兩個real server 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 將vip地址配置在兩臺real server的回環接口的別名上 ifconfig lo:0 192.168.153.100 netmask 255.255.255.255 broadcast 192.168.153.100 up route add -host 192.168.153.100 dev lo:0
在LVS調度器上面添加規則
ipvsadm -A -t 192.168.153.100:80 -s rr
ipvsadm -a -t 192.168.153.100:80 -r 192.168.153.7 -g -w 1
ipvsadm -a -t 192.168.153.100:80 -r 192.168.153.8 -g -w 2
將會話連接時長設置為1秒
ipvsadm --set 1 1 1
使用客戶端瀏覽器驗證一下
備註:這裏有一個註意事項,我們自己平時在做練習的時候習慣使用vmware虛擬出幾臺主機進行使用,有時候我們在使用同一個vmware軟件虛擬出來的主機進行LVS-DR模型構建時有可能造成MAC地址錯亂,導致實驗失敗致使調度器只能將請求調度到一臺後端服務器上面,此時我們可以在windews的客戶端上面查看一下arp地址解析,如果VIP物理地址跟調度器的DIP物理地址一樣則配置成功,如果不一樣就需要進行故障排查了。這裏建議如果實驗機器不夠用的話使用兩臺不同的物理主機安裝兩個vmware軟件,讓負載均衡調度器跟real server服務器在兩個環境中進行實驗。
然後將這臺調度器的ipvs規則清空,在另一臺負載均衡調度器上面配置ipvs規則進行測試,當測試完畢後我們清空兩臺調度器的所有規則,因為keepalived的LVS高可用性不需要ipvsadm工具進行規則配置。
此時安裝keepalived軟件包並配置高可用服務器的錯誤頁面
yum install -y keepalived
systemctl start keepalived
systemctl enable keepalived
yum install -y httpd
vim /var/www/html/index.html
Sorry,The httpd-1 page is not have
修改keepalived的配置文件
cp /etc/keepalived/keepalivd.conf keepalived.conf.bak
vim keepalived.conf
配置信息如下:
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL //定義router_id
}
vrrp_script chk_file {
script "/etc/keepalived/chk_file.sh" //定義服務啟動關閉腳本文件
interval 1
weight -2
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 43 //虛擬路由id,兩臺高可用服務器路由id保持一致
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass qwer
}
virtual_ipaddress {
192.168.153.100/32 dev ens33 label ens33:0 //將VIP地址配置在virtual中
}
track_script {
chk_file //調用腳本
}
}
virtual_server 192.168.153.100 80 { //定義虛擬服務器的配置信息
delay_loop 6
lb_algo wrr //調度方法
lb_kind DR //LVS類型
nat_mask 255.255.255.0
persistence_timeout 50 //會話連接時長
protocol TCP //使用TCP協議
sorry_server 127.0.0.1 80 //定義錯誤頁面,當後端服務器全部宕機則返回此頁面
real_server 192.168.153.7 80 { //定義後端的real server信息
weight 1 //權重為1
HTTP_GET { //使用健康狀態檢測
url {
path / //路徑為根目錄
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.153.8 80 { //另一臺real server
weight 2 //權重為2
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
重啟keepalived服務,查看ip地址
使用ipvsadm -L -n查看規則發現ipvs的規則自動生成
在keepalived配置文件目錄下創建chk_file.sh腳本文件
#!/bin/bash
if [ -f /etc/keepalived/down ];then
exit 1
fi
exit 0
~
復制文件到另一臺高可用服務器,並修改vrrp_instance VI_1中的 state 為BACKUP, priority 為99,保存配置文件並重新啟動第二臺高可用服務器的keepalived服務。
使用客戶端瀏覽器訪問
這時發現只能訪問到一個節點,是因為我們開啟了keepalived的會話連接功能,我們現在將配置文件中的 persistence_timeout 50 一項註釋掉
然後再次使用客戶端瀏覽器重新請求
根據定義的腳本信息,在keepalived配置文件的目錄下touch一個down文件讓第一臺高可用宕掉
查看第二臺高可用服務器
使用客戶端訪問依然可以訪問到後端的real server
這裏我們手動停止兩臺real server的httpd服務
查看一下高可用服務器的ipvs規則
使用客戶端請求法發現返回sorry_server信息
此時配置完畢,所有服務運行正常
基於keepalived的LVS-DR模型構建