LVS系列之四:部署LVS的DR模式+KeepAlive高可用


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

結(jié)論:KeepAlive和Real server均允許一臺(tái)服務(wù)器宕機(jī),并能正常對外提供服務(wù)。

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

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

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