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