keepalived的原理、LVS负载均衡之DR模式+KeepAlived双机热备架构【原理和配置】
LVS负载均衡之DR模式+KeepAlived双机热备架构
一、keepalived双机热备
【1】keepalived含义
基于VRRP热备份协议,以软件的方式实现Linux服务器的多机热备份功能。是通过共有的虚拟IP地址(VIP)对外提供服务;每个热备组内只能有一个服务器提供服务,其他服务器处于冗余状态,若当前服务器失效后,则其他处于冗余状态的服务器将接替他的工作(优先级高的),以继续提供服务。
【2】keepalived原理图示
(1)keepalived的原理
1,至少需要两台服务器,其中一台为master始终提供服务,另外一台作为backup始终处于空闲状态,只有在主服务器挂掉的时候他就来帮忙了,这是典型的双击热备。2,能根据需求判断服务是否可用,在不可用的时候要即使切换。
(2)keepalived优缺点
1、优点:数据同步非常简单,不像负载均衡对数据一致性要求非常高,实现起来相对复杂维护也颇为不便,双机热备用rsync就可以实现了操作和维护非常简单。2、缺点:服务器有点浪费,始终有一台处于空闲状态。
【3】Keepalived双机热备的应用场景
(1)网站流量不高,压力不大,但是对服务器的可靠性要求极其高,例如实时在线OA系统,*部门网站系统,医院实时报医系统,*局在线报案系统,股市后台网站系统等等,他们的压力不是很大,但是对可靠性要求是非常高的。
(2)有钱没地方花的,典型的*企业,公办学校等等。
二、LVS负载均衡之DR模式+KeepAlived双机热备架构配置
【1】lvs负载均衡之DR模式原理图示
【2】lvs负载均衡之DR模式转发过程
1)client发送请求到vip,real-server配置限制对vip应答arp,而lvs会对vip响应arp,因此client将请求发到LVS。
2)LVS机器收到发往vip的报文后,根据目的IP和目的port匹配ipvs规则,将报文目的mac改为real server的mac,同时将源mac改为LVS的mac后,发送到real server。
3)real server收到之后,mac/IP都是本机的,就将报文交由系统处理。
4)回程报文因real server收到的报文源IP就是client IP,real server直接将请求回给client。如果client和real server是同一个网段,响应报文直接通过二层透传发送给client,报文目的mac即为client mac;如果client和real server不是同一个网段,响应报文先发送到gateway,再走三层转发返回client。
【3】lvs负载均衡之DR+keepalived双机热备原理图示
在LVS负载均衡之DR的基础上增加双机热备解决LVS单点故障。
【4】lvs负载均衡之DR+keepalived双机热备配置
1、项目需求:四台节点+一台客户机
【1-2】DR负载均衡调度器两台,一主一备
192.168.60.80
192.168.60.90
【3-4】web网站服务器两台
192.168.60.50
192.168.60.70
【5】客户机作为访问虚拟地址
192.168.60.250
2、架构部署过程
在部署之前关闭所有服务器的防火防护
systemctl stop firewalld
setenforce 0
【1】DR负载均衡器配置(两台一模一样之配置)
yum install -y keepalived ipvsadm
vim /etc/sysctl.conf
#开启路由功能
net.ipv4.ip_forward=1
#proc响应关闭重定向功能
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0
net.ipv4.conf.ens33.send_redirects=0
sysctl -p //生效命令
添加虚拟网卡
cp ifcfg-ens33 ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.60.250
NETMASK=255.255.255.0
ifup ens33:0
配置DR启动脚本
cd /etc/init.d/
——————————————————————————————————————————————————
vim dr.sh
#!/bin/bash
GW=192.168.60.1
VIP=192.168.60.250
WEB1IP=192.168.60.50
WEB2IP=192.168.60.70
case "$1" in
start)
/sbin/ipvsadm --save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
/sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.0 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 $WEB1IP:80 -g
/sbin/ipvsadm -a -t $VIP:80 -r $WEB2IP:80 -g
echo "ipvsadm starting .................[OK]"
;;
stop)
/sbin/ipvsadm -C
systemctl stop ipvsadm
ifconfig ens33:0 down
route delete $VIP
echo "ipvsadm stoped ............[OK]"
;;
status)
if [ ! -e /var/lock/subsys/ipvsadm ];then
echo "ipvsadm stoped"
exit 1
else
echo "ipvsadm running"
fi
;;
*)
echo "Usage: $0 {start|stop|status}"
exit 1
esac
exit 0
————————————————————————————————————————————————
chmod +x /etc/init.d/dr.sh
ifconfig //查看IP地址是否存在,如果不存在使用
systemctl start NetworkManager
//开启成功之后关闭NetworkManager功能
systemctl stop NetworkManager
systemctl restart network
service dr.sh start
【2】Apache服务器配置(两台都一样,不同的会指出)
yum install -y httpd
cd /etc/sysconfig/network-scripts/
cp -p ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.60.10
NETMASK=255.255.255.0
ONBOOT=yes
cd /var/www/html
vim index.html
<h1>this is accp web</h1>
在另一台web节点上面为了验证效果设置不同的网页
cd /var/www/html
vim index.html
<h1>this is benet web</h1>
web节点arp过滤脚本配置
————————————————————————————————————————————————
vim /etc/init.d/web.sh
#!/bin/bash
VIP=192.168.60.250
case "$1" in
start)
ifconfig lo:0 $VIP netmask 255.255.255.0 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 delete $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 stop ok"
;;
*)
echo "Usage:$0 {start|stop}"
exit 1
esac
exit 0
————————————————————————————————————————————————————————
chmod +x /etc/init.d/web/sh
ifconfig //查看IP地址是否存在,如果不存在使用
systemctl start NetworkManager
//开启成功之后关闭NetworkManager功能
systemctl stop NetworkManager
systemctl restart network
service web.sh start
systemctl start httpd
【3】在调度服务器上面部署keepalived部署
vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
aaa@qq.com
aaa@qq.com
aaa@qq.com
}
notification_email_from aaa@qq.com
#指向自己本地
smtp_server 127.0.0.1
smtp_connect_timeout 30
#指定lvs名称,主备不相同
router_id LVS_01
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
#服务器类型master,如果是备份服务器则是BACKUP
state MASTER
#接口网卡名称
interface ens33
#组号,同一组组号相同(主备组号相同)
virtual_router_id 51
#优先级越大越优先,备份服务器的优先级要小于主服务器
priority 100
advert_int 1
#认证,不建议修改,keepalived服务器所有都要相同
authentication {
auth_type PASS
auth_pass 1111
}
#虚拟IP地址
virtual_ipaddress {
192.168.60.250
}
}
virtual_server 192.168.60.250 80 {
delay_loop 6
#lvs算法--轮询
lb_algo rr
#lvs模式DR
lb_kind DR
persistence_timeout 50
protocol TCP
#web1服务器配置信息
real_server 192.168.60.50 80 {
weight 1
#tcp检查,健康自检
TCP_CHECK {
connect_timeout 3
#添加连接端口
connect_port 80
nb_get_retry 3
delay_before_retry 3
}
}
#web2服务器配置信息
real_server 192.168.60.70 80 {
#权重
weight 1
TCP_CHECK {
connect_timeout 3
connect_port 80
nb_get_retry 3
delay_before_retry 3
}
}
}
————————————————————————
systemctl start keepalived
由于主备服务器的配置文件相似所以可以复制本机的配置文件到备份服务器上面去
scp /etc/keepalived/keepalived.conf aaa@qq.com:/etc/keepalived/keepalived.conf
【4】客户机验证
在lvs服务器上面重启网卡
systemctl restart network
测试与漂移地址的连通性
ping 192.168.60.250 -t //时间有点小长
多起几次网卡或者启用网络管理工具
systemctl start NetManager
在浏览器中访问web节点,192.168.60.250,刷新查看效果。