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


title: LVS系列之四:部署LVS的DR模式+KeepAlive高可用
categories: Linux
tags:
- LVS
timezone: Asia/Shanghai
date: 2019-02-04


简介

LVS可以实现负载均衡,但是不能够进行健康检查,比如一个rs出现故障,LVS 仍然会把请求转发给故障的rs服务器,这样就会导致请求的无效性。keepalive 软件可以进行健康检查,而且能同时实现 LVS 的高可用性,解决 LVS 单点故障的问题,其实 keepalive 就是为 LVS 而生的。

环境

[root@centos181001 ~]# cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core) 

准备4台服务器:
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

第零步:关闭系统默认防火墙并设置本地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 </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       #构建缓存

第二步:配置两个Real server节点

跟普通单Director节点设置方法完全一样

注意:在 DR 模式下,2台 rs 节点的 gateway 不需要设置成 dir 节点的 IP 。

1.Real server节点1:

yum install -y httpd
systemctl start httpd
echo "1111111111" > /var/www/html/index.html

2.Real server节点2:

yum install -y httpd
systemctl start httpd
echo "2222222222" > /var/www/html/index.html

3.两个Real server节点配置脚本并执行

# 如果你的RS的外部网络接口是eth0,那么
# echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
# echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
# 其实真正要执行的是:
# echo "1">/proc/sys/net/ipv4/conf/eth0/arp_ignore
# echo "2">/proc/sys/net/ipv4/conf/eth0/arp_announce
# 所以我个人建议把上面两条也加到你的脚本里去,因为万一系统里上面两条默认的值不是0,那有可能是会出问题滴。
cat </usr/local/sbin/lvs_dr_rs.sh
#!/bin/bash
vip=11.11.11.60
# 关闭arp响应
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

第三步:配置两个KeepAlive节点

1. 两个KeepAlive节点安装ipvsadm和keepalived并开启转发功能

yum install -y ipvsadm keepalived
echo 1 > /proc/sys/net/ipv4/ip_forward

2.KeepAlive节点1

cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

cat </etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   ## 唯一标识,不同机器不能一样
   router_id LVS_node1
}

vrrp_instance VI_1 {
    ## 这里只能接受MASTER和BACKUP,而且必须为大写
    state MASTER

    ## 绑定虚拟IP的网卡接口
    interface ens34

    ## 虚拟ID,同一个ID之间互相通讯,两个节点之间必须保持一致
    virtual_router_id 51
    ## 优先级(0-254),一般设置100左右,主节点要比从节点高
    priority 100

    ## 发VRRP包的时间间隔,即多久进行一次master选举(可以认为是健康查检时间间隔)。
    advert_int 1

    ## 设置验证方式,这里采用的是明文密码认证,两个节点必须保持一致
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    ## 虚拟IP,可以设置多个
    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节点2

cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

# COPY节点1配置文件到节点2服务器并修改以下几项:
vim /etc/keepalived/keepalived.conf
router_id LVS_node1     ----->  router_id LVS_node2
state MASTER            ----->  state BACKUP
priority 100            ----->  priority 90

4.先主后从分别启动KeepAlive

如果配置文件有错误的话,启动程序的时候不会提示的,所以启动程序的时候一定要注意观察日志是否正常。

keepalived -D

5.查看运行状态和日志

通过ip a可以看到11.11.11.60只绑定在MASTER节点
inet 11.11.11.60/32 scope global eth1

ps命令查看进程,yum方式安装的有3个进程,源码安装的有2个进程
ps -ef | grep keepalived

日志默认保存在/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'

第四步:测试(用另外节点来进行测试)

## 1.4台服务器均正常开机的情况下

[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.关闭KeepAlive中的任意一台

[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.关闭Real server中任意一台

[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

结论:KeepAlive和Real server均允许一台服务器宕机,并能正常对外提供服务。

你可能感兴趣的:(LVS系列之四:部署LVS的DR模式+KeepAlive高可用)