title: LVS系列之四:部署LVS的DR模式+KeepAlive高可用
categories: Linux
tags:
- LVS
timezone: Asia/Shanghai
date: 2019-02-04
簡介
LVS可以實(shí)現(xiàn)負(fù)載均衡,但是不能夠進(jìn)行健康檢查,比如一個(gè)rs出現(xiàn)故障,LVS 仍然會(huì)把請求轉(zhuǎn)發(fā)給故障的rs服務(wù)器,這樣就會(huì)導(dǎo)致請求的無效性。keepalive 軟件可以進(jìn)行健康檢查,而且能同時(shí)實(shí)現(xiàn) LVS 的高可用性,解決 LVS 單點(diǎn)故障的問題,其實(shí) keepalive 就是為 LVS 而生的。
環(huán)境
[root@centos181001 ~]# cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core)
準(zhǔn)備4臺(tái)服務(wù)器:
Keepalived1 + lvs1(Director1):11.11.11.61
Keepalived2 + lvs2(Director2):11.11.11.62
Real server1:11.11.11.111
Real server2:11.11.11.112
VIP: 11.11.11.60
第零步:關(guān)閉系統(tǒng)默認(rèn)防火墻并設(shè)置本地YUM(by all)
setenforce 0
sed -i -r "/^SELINUX=/c SELINUX=disabled" /etc/selinux/config
which systemctl && systemctl stop firewalld
which systemctl && systemctl disable firewalld
which systemctl && systemctl stop iptables || service iptables stop
which systemctl && systemctl disable iptables || chkconfig iptables off
mv /etc/yum.repos.d/* /home/
# 配置本地yum
mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
cat <<EOF >/etc/yum.repos.d/local.repo
[local]
name=local
baseurl=file:///mnt/cdrom
gpgcheck=0
enabled=1
EOF
yum clean all #清理本地緩存
yum clean plugins #清理插件緩存
yum makecache #構(gòu)建緩存
第二步:配置兩個(gè)Real server節(jié)點(diǎn)
跟普通單Director節(jié)點(diǎn)設(shè)置方法完全一樣
注意:在 DR 模式下,2臺(tái) rs 節(jié)點(diǎn)的 gateway 不需要設(shè)置成 dir 節(jié)點(diǎn)的 IP 。
1.Real server節(jié)點(diǎn)1:
yum install -y httpd
systemctl start httpd
echo "1111111111" > /var/www/html/index.html
2.Real server節(jié)點(diǎn)2:
yum install -y httpd
systemctl start httpd
echo "2222222222" > /var/www/html/index.html
3.兩個(gè)Real server節(jié)點(diǎn)配置腳本并執(zhí)行
# 如果你的RS的外部網(wǎng)絡(luò)接口是eth0,那么
# echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
# echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
# 其實(shí)真正要執(zhí)行的是:
# echo "1">/proc/sys/net/ipv4/conf/eth0/arp_ignore
# echo "2">/proc/sys/net/ipv4/conf/eth0/arp_announce
# 所以我個(gè)人建議把上面兩條也加到你的腳本里去,因?yàn)槿f一系統(tǒng)里上面兩條默認(rèn)的值不是0,那有可能是會(huì)出問題滴。
cat <<EOF >/usr/local/sbin/lvs_dr_rs.sh
#!/bin/bash
vip=11.11.11.60
# 關(guān)閉arp響應(yīng)
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
ip route add \$vip dev lo
ip address add \$vip/32 dev lo
EOF
chmod +x /usr/local/sbin/lvs_dr_rs.sh
/usr/local/sbin/lvs_dr_rs.sh
第三步:配置兩個(gè)KeepAlive節(jié)點(diǎn)
1. 兩個(gè)KeepAlive節(jié)點(diǎn)安裝ipvsadm和keepalived并開啟轉(zhuǎn)發(fā)功能
yum install -y ipvsadm keepalived
echo 1 > /proc/sys/net/ipv4/ip_forward
2.KeepAlive節(jié)點(diǎn)1
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
cat <<EOF >/etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
## 唯一標(biāo)識,不同機(jī)器不能一樣
router_id LVS_node1
}
vrrp_instance VI_1 {
## 這里只能接受MASTER和BACKUP,而且必須為大寫
state MASTER
## 綁定虛擬IP的網(wǎng)卡接口
interface ens34
## 虛擬ID,同一個(gè)ID之間互相通訊,兩個(gè)節(jié)點(diǎn)之間必須保持一致
virtual_router_id 51
## 優(yōu)先級(0-254),一般設(shè)置100左右,主節(jié)點(diǎn)要比從節(jié)點(diǎn)高
priority 100
## 發(fā)VRRP包的時(shí)間間隔,即多久進(jìn)行一次master選舉(可以認(rèn)為是健康查檢時(shí)間間隔)。
advert_int 1
## 設(shè)置驗(yàn)證方式,這里采用的是明文密碼認(rèn)證,兩個(gè)節(jié)點(diǎn)必須保持一致
authentication {
auth_type PASS
auth_pass 1111
}
## 虛擬IP,可以設(shè)置多個(gè)
virtual_ipaddress {
11.11.11.60
# 192.168.200.16
# 192.168.200.17
# 192.168.200.18
}
}
virtual_server 11.11.11.60 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 0
protocol TCP
real_server 11.11.11.111 80 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 11.11.11.112 80 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
EOF
3.KeepAlive節(jié)點(diǎn)2
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
# COPY節(jié)點(diǎn)1配置文件到節(jié)點(diǎn)2服務(wù)器并修改以下幾項(xiàng):
vim /etc/keepalived/keepalived.conf
router_id LVS_node1 -----> router_id LVS_node2
state MASTER -----> state BACKUP
priority 100 -----> priority 90
4.先主后從分別啟動(dòng)KeepAlive
如果配置文件有錯(cuò)誤的話,啟動(dòng)程序的時(shí)候不會(huì)提示的,所以啟動(dòng)程序的時(shí)候一定要注意觀察日志是否正常。
keepalived -D
5.查看運(yùn)行狀態(tài)和日志
通過ip a可以看到11.11.11.60只綁定在MASTER節(jié)點(diǎn)
inet 11.11.11.60/32 scope global eth1
ps命令查看進(jìn)程,yum方式安裝的有3個(gè)進(jìn)程,源碼安裝的有2個(gè)進(jìn)程
ps -ef | grep keepalived
日志默認(rèn)保存在/var/log/messages文件
tail -f -n 5 /var/log/messages
通過抓包軟件檢測
tcpdump -i ens34 -n 'host 11.11.11.61'
tcpdump -i ens34 -n 'host 11.11.11.62'
第四步:測試(用另外節(jié)點(diǎn)來進(jìn)行測試)
## 1.4臺(tái)服務(wù)器均正常開機(jī)的情況下
[root@rehl6801 ~]# curl http://11.11.11.60
2222222222
[root@rehl6801 ~]# curl http://11.11.11.60
1111111111
[root@rehl6801 ~]# curl http://11.11.11.60
2222222222
[root@rehl6801 ~]# curl http://11.11.11.60
1111111111
## 2.關(guān)閉KeepAlive中的任意一臺(tái)
[root@rehl6801 ~]# curl http://11.11.11.60
2222222222
[root@rehl6801 ~]# curl http://11.11.11.60
1111111111
[root@rehl6801 ~]# curl http://11.11.11.60
2222222222
[root@rehl6801 ~]# curl http://11.11.11.60
1111111111
## 3.關(guān)閉Real server中任意一臺(tái)
[root@rehl6801 ~]# curl http://11.11.11.60
2222222222
[root@rehl6801 ~]# curl http://11.11.11.60
2222222222
[root@rehl6801 ~]# curl http://11.11.11.60
2222222222
[root@rehl6801 ~]# curl http://11.11.11.60
2222222222