1. 程式人生 > >Keepalived結合LVS-DR實現負載均衡高可用集群

Keepalived結合LVS-DR實現負載均衡高可用集群

table 開啟 strong 部署 toc ifconf cal 指向 protocol

簡介

Keepalived期初是專門針對LVS設計的一款強大的輔助工具,主要用來提供故障切換和健康檢查功能—判斷LVS負載調度器、節點服務器的可用性,及時隔離並替換新的服務器,當故障主機恢復後將其重新加入集群

Keepalived實現原理剖析

技術分享圖片
Keepalived采用VRRP熱備份協議實現Linux服務器的多機熱備功能,VRRP虛擬路由冗余協議,是針對路由器的一種備份解決方案,由多臺路由器組成一個熱備組,通過共用的虛擬IP地址對外提供服務。每個熱備組內同一時刻只有一臺主服務器提供服務,其他服務處於冗余狀態。若當前在線的服務器失效,則其他服務器會根據設置的優先級自動接替虛擬IP地址,繼續提供服務

詳細LVS工作原理以及參數可以查看

實驗環境

主機 操作系統 IP地址
主負載調度器 CentOS 7.4 x86_64 192.168.100.71;VIP:192.168.100.100
從負載調度器 CentOS 7.4 x86_64 192.168.100.72;VIP:192.168.100.100
Web節點服務器 01 CentOS 7.4 x86_64 192.168.100.73
Web節點服務器 02 CentOS 7.4 x86_64 192.168.100.74
Client端 CentOS 7.4 x86_64 192.168.100.75

搭建步驟

一、配置主調度器

1、安裝keepalived

[root@redhat7_1 ~]# yum -y install keepalived

2、修改主配置文件

[root@redhat7_1 ~]# vim /etc/keepalived/keepalived.conf

全局配置:

global_defs {
notification_email {
[email protected]

}
notification_email_from [email protected]
smtp_server 127.0.0.1 #郵件服務器,指向的是本地
smtp_connect_timeout 30 #指定連接的超時時間


router_id WEB_HA1 #服務器名稱
}

熱備配置:

vrrp_instance VI_1 {#實例名稱,同一個熱備組保證名稱相同
state MASTER #熱備狀態,主為MASTER;從為BACKUP
interface ens33 #承載VIP地址的物理接口
virtual_router_id 51 #虛擬路由的ID號,同一個熱備組,保持一致
priority 200 #優先級數值越大優先級越,主的優先級要大於從
advert_int 1 #通告的間隔秒數,1秒相當於傳輸一次數據(相當於hello時間,如果問候,沒有回應,說明故障)
authentication {
auth_type PASS #認證類型PASS密碼
auth_pass 1111 #密碼字符串
}
virtual_ipaddress {
192.168.100.100 #指定虛擬IP地址
}
}

定義RealServer地址配置:

virtual_server 192.168.100.100 80 { #虛擬服務器地址(VIP)、端口
delay_loop 6 #健康檢查的間隔時間(秒)
lb_algo rr #調度算法設置為輪詢
lb_kind DR #群集工作模式,DR(直接路由)
persistence_timeout 50 #把同一個的請求信息記錄到lvs的hash表裏,保存時間使用此參數控制,單位為秒
protocol TCP #應用服務器采用TCP協議
real_server 192.168.100.73 80 { #第一臺節點服務器
???weight 1 #權重為1
??TCP_check { #健康檢查
??connet_port 80 #檢查的目標端口
?? connect_timeout 3 #連接的超時時間
??nb_get_retry 3 #重試的次數
??delay_before_retry 3 #重試的間隔
}
}
real_server 192.168.100.74 80 {
?? weight 1
??TCP_check {
????connet_port 80
????connect_timeout 3
?? ??nb_get_retry 3
????delay_before_retry 3
}
}
}

3、啟動服務

[root@redhat7_1 ~]# systemctl start keepalived.service

二、配置從調度器

1、安裝keepalived

[root@redhat7_2 ~]# yum -y install keepalived

2、修改主配置文件

[root@redhat7_2 ~]# cd /etc/keepalived/
[root@redhat7_2 keepalived]# cp keepalived.conf keepalived.conf.bak #將源配置文件進行備份
[root@redhat7_2 keepalived]# scp 192.168.100.71:/etc/keepalived/keepalived.conf . #將主機配置文件下載至本地
技術分享圖片

3、啟動服務

[root@redhat7_2 ~]# systemctl start keepalived.service

三、查看主、從網卡信息

1、查看主調器網卡信息

[root@redhat7_1 ~]# ip addr show ens33
技術分享圖片

2、查看從調器網卡信息

[root@redhat7_2 ~]# ip addr show ens33
技術分享圖片

四、部署主調器LVS_DR

1、安裝ipvsadm工具

[root@redhat7_1 ~]# yum -y install ipvsadm

2、編輯sysctl配置文件

[root@redhat7_1 ~]# vim /etc/sysctl.conf
#添加以下參數:
net.ipv4.ip_forward=1 #開啟路由轉發功能
net.ipv4.conf.all.send_redirects = 0 #以下三處設定響應關閉重定向功能
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

[root@redhat7_1 ~]# sysctl -p #重新讀取配置文件

3、配置調度器虛擬IP地址

[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0 #創建虛擬子接口網卡配置文件
[root@localhost network-scripts]# vim ifcfg-ens33:0 #編輯虛擬網卡配置文件

添加以下參數:

DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.100.100
NETMASK=255.255.255.255
BROADCAST=192.168.100.100 #廣播地址

[root@localhost ~]# ifup ens33:0 #啟動虛擬網卡
[root@localhost ~]# ifconfig ens33:0
技術分享圖片

4、編輯調度器負載分配策略腳本
[root@redhat7_1 ~]# cd /etc/init.d/
[root@redhat7_1 init.d]# vim dr.sh

#!/bin/bash
GW=192.168.100.254 #網關
VIP=192.168.100.100 #虛擬IP地址
RIP1=192.168.100.73
RIP2=192.168.100.74
case "$1" in
start)
/sbin/ipvsadm --save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
/sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up #重新加載網卡
/sbin/route add -host $VIP dev ens33:0 #添加路由
/sbin/ipvsadm -A -t $VIP:80 -s rr #添加虛擬服務器,並指定輪詢算法
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g #添加一臺真真實服務器,並指定工作模式為DR
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
echo "ipvsadm starting --------------------[ok]"
;;
stop)
/sbin/ipvsadm -C
systemctl stop ipvsadm
ifconfig ens33:0 down
route del $VIP
echo "ipvsamd stoped----------------------[ok]"
;;
status)
if [ ! -e /var/lock/subsys/ipvsadm ];then
echo "ipvsadm stoped---------------"
exit 1
else
echo "ipvsamd Runing ---------[ok]"
fi
;;
*)
echo "Usage: $0 {start|stop|status}"
exit 1
esac
exit 0

[root@redhat7_1 init.d]# chmod +x dr.sh #添加執行權限
[root@redhat7_1 ~]# service dr.sh start #啟動腳本

五、部署從調器LVS_DR

操作步驟與部署主調器LVS_DR相同。略……

六、配置Web節點01服務器

1、配置虛擬IP地址

[root@redhat7_3 ~]# cd /etc/sysconfig/network-scripts/
[root@redhat7_3 network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@redhat7_3 network-scripts]# vim ifcfg-lo:0

添加以下參數:

DEVICE=lo:0
IPADDR=192.168.100.100
NETMASK=255.255.255.255
BROADCAST=192.168.100.100
ONBOOT=yes

[root@redhat7_3 network-scripts]# ifup lo:0
[root@redhat7_3 ~]# ifconfig lo:0
技術分享圖片

2、配置Web服務器

[root@redhat7_3 ~]# yum -y install httpd
[root@redhat7_3 ~]# systemctl start httpd.service #啟動服務
[root@redhat7_3 ~]# cd /var/www/html/
[root@redhat7_3 html]# echo "<h1>Hello World</h1>" > index.html #編輯網站首頁

3、編輯啟動腳本

[root@redhat7_3 ~]# cd /etc/init.d/
[root@redhat7_3 init.d]# vim web.sh

添加以下腳本信息:

#!/bin/bash
VIP=192.168.100.100
case "$1" in
start)
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:0
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
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK "
;;
stop)
ifconfig lo:0 down
route del $VIP /dev/null 2>&1
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
echo "RealServer Stopd"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0

[root@redhat7_3 init.d]# chmod +x web.sh #添加權限
[root@redhat7_3 init.d]# service web.sh start #啟動服務

七、配置Web節點02服務器

1、配置Web服務器

[root@redhat7_4 ~]# yum -y install httpd
[root@redhat7_4 ~]# systemctl start httpd.service #啟動服務
[root@redhat7_4 ~]# cd /var/www/html/
[root@redhat7_4 html]# echo "<h1>I Believe I Can Fly</h1>" > index.html #編輯網站首頁

其他操作步驟與配置Web節點01服務器基本相同。略……

八、測試群集

技術分享圖片

1、模擬主調度器故障

[root@redhat7_1 ~]# ifdown ens33

2、再次測試

技術分享圖片

Keepalived結合LVS-DR實現負載均衡高可用集群