keepalived和单点故障
1.keepalived介绍
单点故障:一变多
- 多个LVS服务器同时提供服务
- 多个LVS服务器中只有一个服务器提供服务,当提供服务的LVS故障时,随机换另一台LVS提供服务(LVS中只能有一台服务器配上VIP)(主备模型)
简介
Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。
1.需要心跳机制探测后端RS是否提供服务
- 探测down,需要从lvs中删除该RS
- 探测发送从down到up,需要从lvs中再次添加该RS
2.LVS DR,需要主备(HA)
KeepAlived原理
VRRP协议(虚拟路由冗余协议)- Virtual Router Redundancy Protocal
IP漂移
工作原理
Layer3,4&7工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下:
Layer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被 非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。
Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。
Layer7:Layer7就是工作在具体的应用层了,比Layer3,Layer4要复杂一点,在网络上占用的带宽也要大一些。Keepalived将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除。
注意:需要禁用防火墙
keepalived(用户空间程序)安装
ipvs(内核模块包)
- 可以不用安装ipvsadm -lnc
- keepalived(ipvsadm,自身高可用)
- yum -y install keepalived
- service keepalived keepalived
- 配置文件:/etc/keepalived/keepalived.conf
- 查看日志:tail /var/log/message
2.keepalived实验
1.RS服务器的配置
#调整RS的响应,通告级别(每一台RS都配)
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
#给每个RS配置VIP
ifconfig lo:8 192.168.159.120 netmask 255.255.255.255
#启动RS上的httpd
service start httpd
2.LVS主机配置
#1.安装keepalived
yum -y install keepalived
#2.安装ipvsadm(可以不装)
yum -y install ipvsadm
#3.备份并修改keepalived的配置文件
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vi /etc/keepalived/keepalived.conf
#-------------------------------------------主LVS-------------------------------------------------#
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS