首页 > 技术文章 > linux中级之keepalived概念

renyz 2019-08-22 14:15 原文

一、HA集群中的相关术语

1.节点(node

运行HA进程的一个独立主机,称为节点,节点是HA的核心组成部分,每个节点上运行着操作系统和高可用软件服务,在高可用集群中,节点有主次之分,分别称之为主节点/备份节点,每个节点拥有唯一的主机名,并且拥有属于自己的一组资源,例如,磁盘,文件系统,网络地址和应用服务等,主节点上一般运行着一个或多个应用服务,而备节点一般处于监控状态

2.资源(resource

资源是一个节点可以控制的实体,并且当节点发生故障时,这些资源能够被其他节点接管,HA集群软件中,可以当做资源的实体有:

1)磁盘分区、文件系统

2IP地址VIP

3)应用程序服务

4NFS文件系统

3.事件(event

也就是集群中可能发生的事情,例如节点系统故障,网络连通故障,网卡故障,应用程序故障等,这些事情都会发生节点资源发生转移,HA的测试也是基于这些事情来进行的

4.动作(action

事件发生时HA的响应方式,动作是由shell脚本控制的,例如当某个节点发生故障后,备份节点将通过事先设定好的执行脚本进行服务的关闭或启动,进而接管故障节点的资源

二、keepalived简介

keepalived linux下一个轻量级的高可用解决方案,它与HACMP实现功能类似,都可以实现服务或者网络的高可用,但是又有差别:hacmp是一个专业的、功能完善的高可用软件,它提供了HA软件所需的基本功能,比如心跳检测和资源接管,检测集群中的系统服务,在集群节点间转移共享ip地址所有者等,hacmp功能强大,但是部署和使用相对麻烦,同时也是商业化软件,与hacmp相比,keepalived主要是通过虚拟路由冗余来实现高可用功能,虽然他没有hacmp功能强大,但是keepalived部署使用相对简单,所有配置只需要一个配置文件即可完成.

三、keepalived的用途

keepalived起初是为lvs设计的,专门用来监控集群系统中各个服务节点的状态,它根据layer3,4 & 5交换机制检测每个服务节点的状态,如果某个服务节点出现异常,或工作出现故障,keepaived将检测到,并将出现故障的服务节点从集群系统中剔除,而在故障节点恢复正常后,keepalived又可以自动将此服务节点重新加入到集群中,这些工作全部自动完成,不需要人工干预,需要人工完成的只是修复故障节点。

Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRPVirtual Router RedundancyProtocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。

所以,Keepalived 一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能。

keepalived官网http://www.keepalived.org

四、VRRP协议与工作原理

在现实的网络环境中,主机之间的通信都是通过配置静态路由完成的,而主机之间的路由器一旦出现故障,通信就会失败,因此在这种通信模式中,路由器就成了一个单点瓶颈,为了解决这个问题就引入了VRRP协议

VRRP协议是一种主备模式的协议,通过VRRP可以在网络发生故障时透明地进行设备切换不影响主机间的数据通信,这其中涉及两个概念:物理路由器和虚拟路由器

VRRP可以将两台或者多台物理路由器设备虚拟成一个虚拟路由器,这个虚拟路由器通过虚拟IP(一个或多个)对外提供服务,二在虚拟路由器内部,是多个物理路由器协同工作,同一时间只有一台物理路由器对外提供服务,这台物理路由器被称之为主路由器(处于master状态角色)。它拥有对外提供的虚拟ip,提供各种网络功能,比如arp请求、icmp、数据转发等,二其他物理路由器不拥有对外提供的虚拟ip,也不提供对外网络功能,仅仅接收mastervrrp状态通告信息,这些路由器被统称为备份路由器(处于backup角色)。当主路由器失效时,处于backup角色的备份路由器将重新进行选举,产生一个新的主路由器进入master角色继续对外服务,整个切换过程对于用户来说完全同名

在一个虚拟路由器中,只有处于master角色的路由器会一直发送vrrp数据包,处于backup角色的路由器只接受master发过来的报文信息,用来监控master运行状态,因此,不会发生master抢占的现象,除非它的优先级更高,而当master不可用时,backup也就无法收到master发过来的报文信息,于是就认定master出现故障,接着多台backup就会进行选举,优先级最高的backup将成为新的master,这种选举并进行角色的过程非常快,因此也就保证了服务的持续可用性

五、keepalived的体系结构

keepaived是一个高度模块化的软件,结构简单,但扩展性很强,下图是官方给出的keepalived的体系结构

可以看出来,keepalived的体系结构从整体上分为两层,分别是用户空间层和内核空间层。

内核空间层处于最底层,它包括ipvsnetlink两个模块。ipvs模块是keepalived引入的一个第三方模块,通过ipvs可以实现基于ip的负载均衡集群。ipvs默认包含在lvs集群软件中。

内核模块:

IPVS:主要用于通过IPVSlvs进行整合,是lvs的核心模块,跟lvs一块使用的

NETLINK:主要实现一些网络的功能

用户模块:主要用于高可用

checker:检查服务状态

vrrp stack:用于DS高可用

六、keepalived的安装与配置

yum install keepalived

yum安装keepalived默认配置文件在/etc/keepalived/keepalived.conf

配置文件主要分为三类分别是:

1)全局配置

2VRRP配置

3LVS配置

keepalived的配置文件

 1 第一段:global_defs,全局配置段
 2     global_defs {
 3        notification_email {
 4                237745635@qq.com
 5        }
 6        notification_email_from Alexandre.Cassen@firewall.loc
 7        smtp_server 192.168.200.1
 8        smtp_connect_timeout 30
 9        router_id id1        <<< 当前主机的ID值,这个值必须是唯一的
10     }
11 
12 
13 第二段:vrrp_instance,实例配置段(虚拟服务段)
14     【该段是定义虚拟服务的vip等信息】
15     vrrp_instance VI_1 {       <<< 指定实例的名称
16         state MASTER           <<< 指定节点的状态,MASTER表示主,BACKUP表示备用节点
17         interface eth0         <<< 指定将VIP绑定在哪个网卡上
18         virtual_router_id 51   <<< 虚拟路由ID,用于标识哪些个节点是一组,同一组的主机的虚拟id需要相同
19         priority 100           <<< 指定该节点的优先级(主这节点的优先级大于备节点)
20         advert_int 1           <<< 指定备节点在几秒之内没有接收到主节点的心跳信息,就接管其业务和资源
21         authentication {       <<< 指定keepalived集群中各个主备节点做认证的方式
22             auth_type PASS
23             auth_pass 1111
24         }
25         virtual_ipaddress {   <<< 指定用于提供服务的ip地址(也就是VIP)
26             10.220.5.233
27         }
28     }
29 
30 第三段:virtual_server,虚拟主机配置段
31     【该段主要是给lvs来用,用来定义后端RS节点】
32     virtual_server 10.220.5.222 80 {    #指定实例对应的VIP
33         delay_loop 6                    # 对后端节点做健康检查的时间间隔       
34         lb_algo rr                      # 指定负载均衡调度算法
35         lb_kind DR                      # 指定所使用的lvs模型
36         nat_mask 255.255.255.0    
37         persistence_timeout 50          # 同一IP的请求50秒内被分配到同一台真实主机
38         protocol TCP                    # 用TCP协议对真实节点做健康检查
39 
40         real_server 10.220.5.190 80 {   # 指定一台真实服务器的IP和端口
41             weight 1                    # 设置权重
42             TCP_CHECK {                 # 用建立tcp连接的方式做健康检测
43                 connect_timeout 10      # 设置建立tcp连接的超时时间
44                 delay_before_retry 3    # 超时后多久重试
45                 nb_get_retry 3          # 重试次数
46                 connect_port 80         # 健康检查使用的端口号
47             }
48         }
49 
50 real_server 10.220.5.191 80 {
51     weight 1
52     TCP_CHECK {
53         connect_timeout 10
54         nb_get_retry 3
55         delay_before_retry 3
56         connect_port 80
57     }
58 }
59     }

 

推荐阅读