keepalived介绍
IETF(Internet Engineering Task Force)推出了VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议,来解决局域网主机访问外部网络的可靠性问题。VRRP可以通过在一个路由器组(一个VRRP组)之间共享一个虚拟IP(VIP),此时仅需要客户端以VIP作为其默认网关即可。可以认为VRRP是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个MASTER和多个BACKUP,MASTER上有一个对外提供服务的VIP(该路由器所在局域网内其他机器的默认路由为该VIP),MASTER会发组播,当BACKUP收不到vrrp包时就认为MASTER宕掉了,这时就需要根据VRRP的优先级来选举一个BACKUP当MASTER,及时将业务切换到其它设备,从而保持通讯的连续性和可靠性,消除了静态路由配置的单点故障。VRRP协议对应的是RFC3768,该协议仅适用于IPv4。
keepalived工作原理-vrrp
1、一个VRRP路由器有唯一的标识:
VRID,范围为0-255该路由器对外表现为唯一的虚拟MAC地址,地址的格式为00-00-5E- 00-01-[VRID]主控路由器负责对ARP请求用该MAC地址做应答这样,无论如何切换,保证给终端设备的是唯一一致的IP和MAC地址,减少了切换对终端设备的影响。
2、VRRP控制报文只有一种:
VRRP通告(advertisement)它使用IP多播数据包进行封装,组地址为224.0.0.18,发布范围只限于同一局域网内。这保证了VRID在不同网络中可以重复使用。为了减少网络带宽消耗,只有主控路由器才可以周期性的发送VRRP通告报文,备份路由器在连续三个通告间隔内收不到VRRP或收到优先级为0的通告则启动新的一轮VRRP选举。
3、在VRRP路由器组中按优先级选举主控路由器:
VRRP协议中优先级范围是0-255。若VRRP路由器的IP地址和虚拟路由器的接口IP地址相同,则称该虚拟路由器作VRRP组中的IP地址所有者。IP地址所有者自动具有最高优先级:255。优先级0一般在IP地址所有者主动放弃主控者角色时使用。可配置的优先级范围为1-254,优先级的配置原则可以依据链路的速度、成本、路由器性能和可靠性以及其它管理策略来设定。在主控路由器的选举中,高优先级的虚拟路由器获胜,因此,如果在VRRP组中有IP地址所有者,则它总是作为主控路由的角色出现。对于相同优先级的候选路由器,则按照IP地址大小顺序选举。VRRP还提供了优先级抢占策略,如果配置了该策略,高优先级的备份路由器便会剥夺当前低优先级的主控路由器而成为新的主控路由器。
4、为了保证VRRP协议的安全性,提供了两种安全认证措施:
明文认证和IP头认证明文认证方式要求:在加入一个VRRP路由器组时,必须同时提供相同的VRID和明文密码适合于避免在局域网内的配置错误,但不能防止通过网络监听方式获得密码IP头认证的方式提供了更高的安全性,能够防止报文重放和修改等攻击
VRRP的优势:
- 负载共享:允许来自LAN客户端的流量由多个路由器设备所共享;
- 多VRRP组:在一个路由器物理接口上可配置多达255个VRRP组;
- 抢占:在master故障时允许优先级更高的backup成为master;
- 通告协议:使用IANA所指定的组播地址224.0.0.18进行VRRP通告;
- VRRP追踪:基于接口状态来改变其VRRP优先级来确定最佳的VRRP路由器成为master;
- 冗余:可以使用多个路由器设备作为LAN客户端的默认网关,大大降低了默认网关成为单点故障的可能性;
- 多IP地址:基于接口别名在同一个物理接口上配置多个IP地址,从而支持在同一个物理接口上接入多个子网;
实验
环境:RHEL6 系列 selinux and iptables disabled
实验主机:
LVS ‐ ACTIVE:
172.25.15.4
LVS ‐ BACKUP:
172.25.15.5
LVS ‐ VIP:
172.25.15.100
Realsever:
172.25.15.6 172.25.15.7 + vip
主机备机的软件安装与配置:
yum install ipvsadm kernel-devel openssl-devel popt-devel libnl-devel gcc make -y
tar zxf keepalived-1.2.5.tar.gz
cd keepalived-1.2.5
./configure –prefix=/usr/local/keepalived
make
make install
mkir /etc/keepalived
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/keepalived /etc/
ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin
chmod +x /usr/local/keepalived/etc/rc.d/init.d/keepalived
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost #接收警报的email地址
}
notification_email_from keepalived@server4
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER #备机为BACkUP
interface eth0 #HA检测网络接口
virtual_router_id 115 #路由ID,主备必须相同
priority 100 #优先级,备机数字改小
advert_int 1 #主备之间的通告秒数
authentication {
auth_type PASS #设置验证类型,主要有PASS和A 两种
auth_pass 1111 #设置验证密码,在一个vrrp_instance 下,MASTER 与 BACKUP 必须使用相同的密码才能正常通信
}
virtual_ipaddress {
172.25.15.100/24 #设置虚拟IP地址
}
}
virtual_server 172.25.15.100 80 { #定义虚拟服务器
delay_loop 6 #每戈6秒查询realserver状态
lb_algo rr #lvs调度算法
lb_kind DR #LVS使用的模式
# persistence_timeout 50
#会话保持时间,单位是秒,这个选项对于动态网页是非常有用的,为集群系统中 session 共享提供了一个很好的解决方案。
#需要注意的是,这个会话保持时间,是最大无响应超时时间,也就是说用户在操作动态页面时,如果在 50 秒内没有执行任何操作,
#那么接下来的操作会被分发到另外节点,但是如果一直在操作动态页面,则不受 50 秒的时间限制。
protocol TCP #使用协议
real_server 172.25.15.6 80 { #配置服务节点
weight 1 #配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值的大小可以为不同性能的服务器分配不同的负载,可以对性能高的服务器设置较高的权值,而对性能较低的服务器设置相对较低的权值,这样就合理的利用和分配了系统资源
TCP_CHECK { #realserve 的状态检测设置部分,单位是秒
connect_timeout 3 #3 秒无响应超时
nb_get_retry 3 #重试次数
delay_before_retry 3 #重试间隔
}
}
real_server 172.25.15.7 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
real_server:
链接:lvs-dr配置
安装apache,写入不同的测试html,并开启服务
yum install arptables_jf -y
arptables -A IN -d 172.25.15.100 -j DROP
arptables -A OUT -s 172.25.15.100 -j mangle –mangle-ip-s 172.25.15.7
/etc/init.d/arptables_jf save
测试:
ip addr show #查看是否有vip
ipvsadmIP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.15.100:http rr
-> 172.25.15.6:http Route 1 0 0
-> 172.25.15.7:http Route 1 0 0
1. 高可用测试:停止 master 上的 keepalived 服务,看 backup 是否接管。
2. 负载均衡测试:访问 vip`,看到页面在两个 realserver 上切换表示成功!
你也可以通过 ipvsadm -Lnc 查看详细连接情况!
3. 故障切换测试:任意关闭 realserver 上的 httpd 服务,Keepalived 监控模块是否能及时发现,
然后屏蔽故障节点,同时将服务转移到正常节点来执行。
添加ftp服务
vim /etc/keepalived/keepalived.conf
virtual_server 172.25.15.100 21 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 10
protocol TCP
real_server 172.25.15.6 21 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.25.15.7 21 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}