keepalived Keepalived高可用集群应用实践 一,keepalived 二.搭建 二

keepalived
Keepalived高可用集群应用实践
一,keepalived
二.搭建
二

Keepalived三大功能   专门为lvs做的软件

1管理lvs负载均衡软件

2实现lvs集群节点健康检查功能

3作为系统高可用功能

未分类


  • 为什么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
Keepalived高可用集群应用实践
一,keepalived
二.搭建
二

  • 脑裂现象(出现两个VIP) 
    如果不是主坏了,而是其它原因(网络原因,网线原因,交换机原因),那么备也会给自己增加VIP,这样用户发送的数据(通过ARP协议,获取MAC地址进行数据的发送,那么就会获取到两个MAC地址),就找不到目标。这就是keepalived的脑裂现象。
 

keepalived在网络中是怎么连接的

  • MySQL只有内网网卡
  • 心跳连接 
    keepalived高可用对之间是用真的线进行连接的,这种用线直连的方式就叫做心跳连接。发送的广播包,不叫广播包,而是叫心跳包
  • 冗余线 
    主备之间用真的线进行连接,那么如果线出了问题,那么就会出现脑裂现象,那么一般还要再在主备上再加一块网卡,然后再用线进行连接,这条线就叫做冗余线。
  • bond 
    把两块网卡进行绑定,这是对网卡进行高可用。linux也可以针对网卡做高可用。绑在一起就叫bond0,如果一块坏了,还可以通过另一块进行数据传输
 

二.搭建

 

2.1准备

4台虚拟机: 
1台做反向代理负载均衡 
1台做备份 
2台做web节点

 

2.2增加网卡


启动网卡 
(3)给主备安装keepalived 
yum -y install keepalived 
(4)启动keepalived服务

装完keepalived,它的启动脚本就在/etc/init.d下,配置文件在/etc/keepalived/keepalived.conf


keepalived
Keepalived高可用集群应用实践
一,keepalived
二.搭建
二

 

2.3修改配置文件

虽然keepalived配置文件内容有很多,但是只能用它的高可用功能(前20行左右) 
初始配置文件 
keepalived
Keepalived高可用集群应用实践
一,keepalived
二.搭建
二
keepalived
Keepalived高可用集群应用实践
一,keepalived
二.搭建
二

  • VIP要注意 :VIP是绑在eth0上的,因为用户的数据是从eth0上过来的


(2)对从的配置文件进行修改 
keepalived
Keepalived高可用集群应用实践
一,keepalived
二.搭建
二
(3)在主上开启keepalived 
/etc/init.d/keepalived start 
ifconfig 
keepalived
Keepalived高可用集群应用实践
一,keepalived
二.搭建
二
(4) 在从上开启keepalived,用ifconfig查看会发现没有 
(没有说明正确,因为主还活着,所以从上不会出现)

  • 接下来在主上关闭keepalived服务,从上才会出现,如果主再开启那么VIP就又会从备上跳到主上

下来启动主和节点的nginx服务,并且在浏览器上进行测试(如果主死了,访问是不受影响的)。 
这就是VIP漂移(高可用)

 

问题

用户访问时通过VIP的,那么,如果主不坏,那么备份的永远在备份,什么事情也不做,这在工作中是一种浪费。

搭建双实例高可用

主的配置文件 
keepalived
Keepalived高可用集群应用实践
一,keepalived
二.搭建
二
keepalived
Keepalived高可用集群应用实践
一,keepalived
二.搭建
二

修改第二个实例主的配置文件 
keepalived
Keepalived高可用集群应用实践
一,keepalived
二.搭建
二
keepalived
Keepalived高可用集群应用实践
一,keepalived
二.搭建
二

之后启动keepalived服务,会发现eth0:2,会回到主上

 

 

如果在master上打开防火墙,那么备的VIP会漂移过来。如果关闭防火墙,又会切回去

 

如果在工作中必须开防火墙那么怎么办?

  • tcpdump -n -i eth1 vrrp 
    keepalived
Keepalived高可用集群应用实践
一,keepalived
二.搭建
二
    keepalived
Keepalived高可用集群应用实践
一,keepalived
二.搭建
二

因此防火墙必须开启了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服务宕了)

 

当备上出现VIP是怎么最大可能防止裂脑问题