【keepalived】keepalived初识

keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。

Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模型的第三、第四层、第五层交换机制检测每个服务节点的状态。

Keepalived又加入了VRRP的功能,VRRP(Vritrual Router Redundancy Protocol,虚拟路由冗余协议)出现的目的是解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行

因此Keepalvied 一方面具有服务器状态检测和故障隔离功能,另外一方面也有HA cluster功能。

keepalived工作原理

keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
将N台提供相同功能的服务器组成一个服务器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该服务器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master

VRRP协议

VRRP协议的简单介绍

虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由/网关为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。

在网络环境中主机之间的通信都是通过配置静态路由或者(默认网关)来完成的,而主机之间的路由器一旦发生故障,通信就会失效,因此这种通信模式当中,路由器就成了一个单点瓶颈,为了解决这个问题,就引入了VRRP协议。

VRRP协议是一种容错的主备模式的协议,保证当主机的下一跳路由出现故障时,由另一台路由器来代替出现故障的路由器进行工作,通过VRRP可以在网络发生故障时透明的进行设备切换而不影响主机之间的数据通信。

VRRP协议中的一些简单概念

虚拟路由器:VRRP备份组中所有路由器的集合,它是一个逻辑概念,并不是正真存在的。可以理解为在一个组中: 主路由器+所有备份路由器=虚拟路由器

主路由器:在虚拟路由器内部同一时间只有一台物理路由器对外提供服务,这台提供服务的物理路由器被称为主路由器。一般情况下主路由器是由选举算法产生,它拥有对外服务的虚拟IP,提供各种网络功能,如:ARP请求,ICMP数据转发等

备份路由器:其他物理路由器不拥有对外的虚拟IP,也不对外提供网络功能,仅接受MASTER的VRRP状态通告信息。当主路由器失败时,处于BACKUP角色的备份路由器将重新进行选举,产生一个新的主路由器进入MASTER角色,继续提供对外服务,整个切换对用户来说是完全透明的。

VRRP选举机制

VRRP路由器运行中的状态:

  • Initialize状态:系统启动后就进入Initialize,此状态下路由器不对VRRP报文做任何处理

  • Master状态:一般主路由器处于Master状态

  • Backup状态:一般备份路由器处于Backup状态

VRRP使用选举机制来确定路由器的状态,优先级选举:

  • VRRP组中IP拥有者。如果虚拟IP地址与VRRP组中的某台VRRP路由器IP地址相同,则此路由器为IP地址拥有者,这台路由器将被定位主路由器。

  • 比较优先级。如果没有IP地址拥有者,则比较路由器的优先级,优先级的范围是0~255,优先级大的作为主路由器

  • 比较IP地址。在没有Ip地址拥有者和优先级相同的情况下,IP地址大的作为主路由器。

在这里插入图片描述
如图所示,虚拟IP为10.1.1.254,在VRRP组中没有IP地址拥有者,则比较优先级,很明显RB和RA的优先级要大于RC,则比较RA和RB的IP地址,RB的IP地址大。所以RB为组中的主路由器

工作原理:

  1. 路由器使用VRRP 功能后,会根据优先级确定自己在备份组中的角色。优先级高的路由器成为Master 路由器,优先级低的成为Backup 路由器。

  2. Master 拥有对外服务的虚拟IP,提供各种网络功能,并定期发送VRRP 报文,通知备份组内的其他设备自己工作正常;Backup 路由器只接收Master 发来的报文信息,用来监控Master 的运行状态。

  3. 当Master 失效时,Backup 路由器进行选举,优先级高的Backup 将成为新的Master。

注意:

  1. 如果Backup 路由器的定时器超时后仍未收到Master 路由器发送来的VRRP报文,则认为Master 路由器已经无法正常工作,备份组内的路由器根据优先级选举出Master 路由器,承担报文的转发功能。

  2. VRRP存在抢占方式和非抢占方式:

    抢占方式:当Backup 路由器收到VRRP 报文后,会将自己的优先级与报文中的优先级进行比较。如果大于通告报文中的优先级,则成为Master 路由器;否则将保持Backup状态;

    非抢占方式:只要Master 路由器没有出现故障,备份组中的路由器始终保持Master 或Backup 状态,Backup 路由器即使随后被配置了更高的优先级也不会成为Master 路由器;

keepalived 工作模式

Keepalived工作在TCP/IP参考模型的三层、四层、五层(物理层,链路层):

网络层:Keepalived通过ICMP协议向服务器集群中的每一个节点发送一个ICMP数据包(有点类似与Ping的功能),如果某个节点没有返回响应数据包,那么认为该节点发生了故障,Keepalived将报告这个节点失效,并从服务器集群中剔除故障节点。

传输层:Keepalived在传输层里利用了TCP协议的端口连接和扫描技术来判断集群节点的端口是否正常,比如对于常见的WEB服务器80端口。或者SSH服务22端口,Keepalived一旦在传输层探测到这些端口号没有数据响应和数据返回,就认为这些端口发生异常,然后强制将这些端口所对应的节点从服务器集群中剔除掉。

应用层:Keepalived的运行方式也更加全面化和复杂化,用户可以通过自定义Keepalived工作方式,例如:可以通过编写程序或者脚本来运行Keepalived,而Keepalived将根据用户的设定参数检测各种程序或者服务是否允许正常,如果Keepalived的检测结果和用户设定的不一致时,Keepalived将把对应的服务器从服务器集群中剔除。

keepalived架构图

在这里插入图片描述
简单模块介绍:

  1. SchedulerI/OMultiplexer是一个I/O复用分发调度器,它负载安排Keepalived所有内部的任务请求;

  2. Memory Mngt是一个内存管理机制,这个框架提供了访问内存的一些通用方法;

  3. Control Plane 是keepalived的控制版面,可以实现对配置文件编译和解析;

Core componets 这部分主要包含了5个部分;

a)看门狗—Watchdog:是计算机可靠领域中极为简单又非常有效的检测工具,Keepalived正是通过它监控Checkers和VRRP进程的。

b)检查者—Checkers:是Keepalived最基础、最主要的功能,可以实现对服务器运行状态检测和故障隔离。

c)VRRP模块—VRRP Stack:是keepalived引用VRRP功能,可以实现HA集群中失败切换功能。负责负载均衡器之间的失败切换FailOver;

d)IPVS模块—IPVS wrapper:是IPVS功能的一个实现,IPVSwarrper模块将可以设置好的IPVS规则发送的内核空间并且提供给IPVS模块,最终实现IPVS模块的负载功能。

e)VIP切换—Netlink Reflector:用来实现高可用集群Failover时虚拟IP(VIP)的设置和切换

Keepalived启动后会有三个进程:

  • 父进程core:内存管理,子进程管理等等

  • 子进程 vrrp:vrrpd子进程

  • 子进程check:healthchecker子进程

由上图可知,两个子进程都被系统WatchDog看管,healthchecker子进程实现检查各自服务器的健康程度,例如HTTP,LVS等等,如果healthchecker子进程检查到MASTER上服务不可用,就会通知本机上的兄弟VRRP子进程,让它删除通告,并且去掉虚拟IP,转换为BACKUP状态

keepalived与heartbeat的区别:

Keepalived中实现轻量级的高可用,一般用于前端高可用,且不需要共享存储,一般常用于两个节点的高可用。而Heartbeat用于服务的高可用,且需要共享存储,一般用于多节点的高可用。

配置

安装:

:apt-get install keepalived

配置文件:

! Configuration File for keepalived              

global_defs {                        #全局定义部分
   notification_email {              #设置警报邮箱
     [email protected]            #邮箱
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]      #设置发件人地址
   smtp_server 192.168.50.1        #设置smtp server地址
   smtp_connect_timeout 30          #设置smtp超时连接时间    以上参数可以不配置
   router_id LVS_DEVEL               #是Keepalived服务器的路由标识在一个局域网内,这个标识(router_id)是唯一的
}

vrrp_instance VI_1 {      #VRRP实例定义区块名字是VI_1
    state MASTER          #表示当前实例VI_1的角色状态这个状态只能有MASTER和BACKUP两种状态,并且需要大写这些字符ASTER为正式工作的状态,BACKUP为备用的状态
    interface eth0       
    virtual_router_id 51 #虚拟路由ID标识,这个标识最好是一个数字,在一个keepalived.conf配置中是唯一的, MASTER和BACKUP配置中相同实例的virtual_router_id必须是一致的.
    priority 100                #priority为优先级 越大越优先
    advert_int 1               #为同步通知间隔。MASTER与BACKUP之间通信检查的时间间隔,单位为秒,默认为1.
    authentication {           #authentication为权限认证配置不要改动,同一vrrp实例的MASTER与BACKUP使用相同的密码才能正常通信。
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {         #设置虚拟IP地址
        192.168.50.16         #此格式ip a显示 ifconfig不显示
        192.168.50.17/24 dev eth0 label eth0:1    #绑定接口为eth0,别名为eth0:1
   }
#至此为止以上为实现高可用配置,如只需使用高可用功能下边配置可删除
#以下为虚拟服务器定义部分
virtual_server 192.168.50.16 80 {      #设置虚拟服务器,指定虚拟IP和端口
    delay_loop 6                           #健康检查时间为6秒
    lb_algo rr                               #设置负载调度算法 rr算法
    lb_kind NAT                            #设置负载均衡机制 #有NAT,TUN和DR三种模式可选
    nat_mask 255.255.255.0         #非NAT模式注释掉此行  注释用!号
    persistence_timeout 50           #连接保留时间,50秒无响应则重新分配节点
    protocol TCP                           #指定转发协议为TCP 
    real_server 192.168.5.150 80 {      #RS节点1
        weight 1                #权重
        TCP_CHECK {             #节点健康检查
        connect_timeout 8       #延迟超时时间
        nb_get_retry 3          #重试次数
        delay_before_retry 3    #延迟重试次数
        connect_port 80         #利用80端口检查
    }
    }
    real_server 192.168.50.149 80 {      #RS节点2
        weight 1
        TCP_CHECK {
        connect_timeout 8
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80 
    }
    }
}
:vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 { #虚拟主机名,可以改
   state MASTER #主路由
   interface eth0 #网卡名 ifconfig确定
   virtual_router_id 51 #路由器标识,MASTER和BACKUP必须是一致的
   priority 100 #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级。这样MASTER故障恢复后,就可以将VIP资源再次抢回来
   advert_int 1 #1秒发送1次备发消息
   authentication { #授权文件
       auth_type PASS #加密类型,主备之间必须是同一加密类型、同一密码
       auth_pass 123456 #密码(默认为1111)
   }
   virtual_ipaddress {
       192.168.11.25 # 虚拟ip
   }
}

启动服务:

:service keepalived start

查看是否有进程:

:ps -ef | grep keepalived
root     10133     1  0 04:47 ?        00:00:00 /usr/sbin/keepalived
root     10134 10133  0 04:47 ?        00:00:00 /usr/sbin/keepalived
root     10135 10133  0 04:47 ?        00:00:00 /usr/sbin/keepalived
root     10138  9296  0 04:48 pts/0    00:00:00 grep --color=auto keepalived

其次

ip addr

查看ip信息是否创建成功,ping虚拟ip是否相通。

:ping 192.168.11.25
PING 192.168.11.25 (192.168.11.25) 56(84) bytes of data.
64 bytes from 192.168.11.25: icmp_seq=1 ttl=64 time=0.013 ms
64 bytes from 192.168.11.25: icmp_seq=2 ttl=64 time=0.026 ms

发布了467 篇原创文章 · 获赞 14 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/LU_ZHAO/article/details/105571712
今日推荐