keepalived
Keepalived三大功能 专门为lvs做的软件
1管理lvs负载均衡软件
2实现lvs集群节点健康检查功能
3作为系统高可用功能
Keepalived高可用集群应用实践
未分类
- 为什么VIP要绑定到eth0而不能绑定到eth1上?
如果绑定到eth1上,会接收不到用户发送过来的数据。eth1是为了发送广播包的,那么数据就只会从主上往备上发
一,keepalived
1.1介绍
keepalived是专门为Lvs负载均衡软件设计的(用在LVS上比用在其他软件上效果要好),用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx,Harpoxy,MySQL等)的高可用解决方案软件
1.2三大功能(都是为LVS服务。对其他软件只能实现高可用功能)
(1)管理LVS负载均衡软件
(2)实现对LVS集群节点健康检查功能(LVS本身不对后方节点进行检测)
(3)作为系统网络服务的高可用功能
1.3keepalived高可用故障切换转移原理
原理可分为两部分
(1)VRRP协议:虚拟路由冗余协议
(2)由VRRP协议实现的故障转移
VRRP协议
假设master每隔两秒钟发一个广播包,如果其他备节点接受到广播包,备就认为master是好的,所有的备就不做任何事情。如果备在固定时间内检测不到广播包,那么就认为主坏了,这时,所有的备就开始抢VIP(所有的备都发送广播包,只不过发的时间有先有后),先发广播包的备发送广播包到其他备,其它备收到数据,就认为主又好了。或者都发送数据包,然后按照优先级来判定谁来拿这个VIP。
keepalived就延用了这种机制
- 脑裂现象(出现两个VIP)
如果不是主坏了,而是其它原因(网络原因,网线原因,交换机原因),那么备也会给自己增加VIP,这样用户发送的数据(通过ARP协议,获取MAC地址进行数据的发送,那么就会获取到两个MAC地址),就找不到目标。这就是keepalived的脑裂现象。
keepalived在网络中是怎么连接的
- MySQL只有内网网卡
- 心跳连接
keepalived高可用对之间是用真的线进行连接的,这种用线直连的方式就叫做心跳连接。发送的广播包,不叫广播包,而是叫心跳包 - 冗余线
主备之间用真的线进行连接,那么如果线出了问题,那么就会出现脑裂现象,那么一般还要再在主备上再加一块网卡,然后再用线进行连接,这条线就叫做冗余线。 - bond
把两块网卡进行绑定,这是对网卡进行高可用。linux也可以针对网卡做高可用。绑在一起就叫bond0,如果一块坏了,还可以通过另一块进行数据传输
二.搭建
2.1准备
4台虚拟机:
1台做反向代理负载均衡
1台做备份
2台做web节点
2.2增加网卡
(1)给主和备新增加一块网卡,不能和另一块网卡同一网段,但是这两个网卡得是同一网段(设置成V1模式就不在同一网段)。目的是为了发送广播包
(2)在主和备上给新增的网卡配置网卡文件 cd /etc/sysconfig/network-scripts
cp ifcfg-eth0 ifcfg-eth1
启动网卡
(3)给主备安装keepalived yum -y install keepalived
(4)启动keepalived服务
装完keepalived,它的启动脚本就在/etc/init.d下,配置文件在/etc/keepalived/keepalived.conf
2.3修改配置文件
虽然keepalived配置文件内容有很多,但是只能用它的高可用功能(前20行左右)
初始配置文件
- VIP要注意 :VIP是绑在eth0上的,因为用户的数据是从eth0上过来的
(1)对主的配置文件进行修改 vim /etc/keepalived/keepalived.conf
(2)对从的配置文件进行修改
(3)在主上开启keepalived /etc/init.d/keepalived start
ifconfig
(4) 在从上开启keepalived,用ifconfig查看会发现没有
(没有说明正确,因为主还活着,所以从上不会出现)
- 接下来在主上关闭keepalived服务,从上才会出现,如果主再开启那么VIP就又会从备上跳到主上
下来启动主和节点的nginx服务,并且在浏览器上进行测试(如果主死了,访问是不受影响的)。
这就是VIP漂移(高可用)
问题
用户访问时通过VIP的,那么,如果主不坏,那么备份的永远在备份,什么事情也不做,这在工作中是一种浪费。
可以通过双实例高可用来解决。(一个keepalived对起双实例,可以架设双网站)
搭建双实例高可用
主的配置文件
在主上启动keepalived服务,会发现有两个VIP
修改第二个实例主的配置文件
之后启动keepalived服务,会发现eth0:2,会回到主上
二
如果在master上打开防火墙,那么备的VIP会漂移过来。如果关闭防火墙,又会切回去
如果在工作中必须开防火墙那么怎么办?
- tcpdump -n -i eth1 vrrp
因此防火墙必须开启了VRRP协议的组播地址,数据包才能发送过来,否则,它是过不来的
- 打开防火墙其实也能发现网卡能收到数据包,只不过是防火墙给拒绝了。因为网卡在第一层,而防火墙在第四层。
- VRRP协议的组播地址要么是224.0.0.19,要么是224.0.0.18,所以一般要把224.0.0.0的网段打开
- 单开一块网卡出来是为了防止keepalived广播发送到多个keepalived对
- 网卡问题不会造成keepalived对之间的切换(就是VIP的切换)
如:关闭eth1的网卡,VIP会发生漂移(但是如果关闭eth0,那么VIP不会发生漂移。前提是VIP是绑定在eth0上的)
- keepalived具有网卡的自动检测功能,如果自身的物理网卡发生问题,它不会去抢VIP
- 导致裂脑的主要原因:
(1)网线出现问题()
------------如果网线出现问题,那么master会发送数据包,但是slave接受不到数据包,所以它就会去抢VIP,而master认为自己没有出现问题,所以就不会去掉自己的VIP,这样两端都会有VIP,导致裂脑
(2)防火墙的问题
如何在一个网段防止keepalived对之间的冲突
如果只有一个网段,也能解决它冲突的问题:每个keepalived对用不同的组播IP地址。
怎么防备由于网线原因造成的裂脑问题?
(1)建立多根冗余线
如果master上的nginx服务掉线,那么VIP是不会发生漂移的,这种情况怎么解决?
- keepalived解决的是物理服务器的问题,(如:服务器宕机,网卡出现问题)。但是keepalived解决不了服务的问题(如:nginx服务宕了)
因此需要在master上写一个脚本,用来监听nginx服务,如果nginx服务宕了,那么也把keepalived服务给关闭,这样master上的VIP就会漂移到slave上
当备上出现VIP是怎么最大可能防止裂脑问题
当主上出现VIP时,肯定是master发生了问题。
(1)ping msater上的eth1网卡,如果能通说明网线没有问题,ping主的eth0网卡,如果也能ping通(物理服务器没有问题),那么可能是master上的keepalived服务掉线(也可能是nginx服务掉线,因为在主上有当nginx掉线,那么会去关闭keepalived服务的脚本,),这种情况应该不会发生裂脑。
(2)如果ping不通主机上的eth1,然后ping主上的eth0,如果能ping通(物理服务器没有问题),然后用tenet去扫一下80端口(nginx负载均衡监听的80),如果存在,说明nginx服务没有掉线。当出现这种情况时,最大的可能是出现了裂脑。