keepalived学习

本文详细介绍了keepalived在HA集群中的作用,包括相关术语如节点、资源、事件和动作,以及keepalived的体系结构、VRRP协议的工作原理。通过实例展示了keepalived的安装配置,如何实现主备物理路由器的高可用,以及web网站的负载均衡。重点讲解了VRRP协议避免主用路由恢复后的服务影响,并提供了配置示例。
摘要由CSDN通过智能技术生成

一、HA集群中的相关术语

HA是High Available缩写,是双机集群系统简称,指高可用性集群,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点。

1.节点(node)

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

2.资源(resource)

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

  • (1)磁盘分区、文件系统
  • (2)IP地址VIP
  • (3)应用程序服务
  • (4)NFS文件系统
3.事件(event)

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

4.动作(action)

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

二、keepalived简介

keepalived是linux下一个轻量级的高可用解决方案,它与HACMP实现功能类似,都可以实现服务或者网络的高可用,但是又有差别:

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

三、keepalived用途

keepalived起初是为lvs设计的,专门用来监控集群系统中各个服务节点的状态,它根据layer3,4 & 5交换机制检测每个服务节点的状态,如果某个服务节点出现异常,或工作出现故障,keepaived将检测到,并将出现故障的服务节点从集群系统中剔除,而在故障节点恢复正常后,keepalived又可以自动将此服务节点重新加入到集群中,这些工作全部自动完成,不需要人工干预,需要人工完成的只是修复故障节点。
keepalived后来又加入了VRRP 的功能,VRRP是Virtual Router Redundancy Protocol(虚拟路由器冗余协议)的缩写,它出现的目的是为了解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断的、稳定的运行,因此,keepalived一方面具有服务器状态监测和故障隔离功能,另一方面也具有HA Cluster(高可用集群)功能,下面详细介绍下VRRP协议的实现过程

四、VRRP协议与工作原理

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

VRRP协议是一种主备模式的协议,通过VRRP可以在网络发生故障时透明地进行设备切换不影响主机间的数据通信,这其中涉及两个概念:物理路由器和虚拟路由器
VRRP可以将两台或者多台物理路由器设备虚拟成一个虚拟路由器,这个虚拟路由器通过虚拟IP(一个或多个)对外提供服务,二在虚拟路由器内部,是多个物理路由器协同工作,同一时间只有一台物理路由器对外提供服务,这台物理路由器被称之为主路由器(处于master状态角色)。它拥有对外提供的虚拟ip,提供各种网络功能,比如arp请、icmp、数据转发等,二其他物理路由器不拥有对外提供的虚拟ip,也不提供对外网络功能,仅仅接收master的vrrp状态通告信息,这些路由器被统称为备份路由器(处于backup角色)。当主路由器失效时,处于backup角色的备份路由器将重新进行选举,产生一个新的主路由器进入master角色继续对外服务,整个切换过程对于用户来说完全同名
在一个虚拟路由器中,只有处于master角色的路由器会一直发送vrrp数据包,处于backup角色的路由器只接受master发过来的报文信息,用来监控master运行状态,因此,不会发生master抢占的现象,除非它的优先级更高,而当master不可用时,backup也就无法收到master发过来的报文信息,于是就认定master出现故障,接着多台backup就会进行选举,优先级最高的backup将成为新的master,这种选举并进行角色的过程非常快,因此也就保证了服务的持续可用性

五、keepalived的体系结构

keepalived是一个高度模块化的软件,结构简单,但扩展性很强,下面是官方给出的keepalived的体系结构
在这里插入图片描述

可以看出来,keepalived的体系结构从整体上分为两层,分别是用户空间层内核空间层。下面介绍一个keepalived两层结构的详细组成及实现的功能。

内核空间层处于最底层,它包括ipvs和netlink两个模块。ipvs模块是keepalived引入的一个第三方模块,通过ipvs可以实现基于ip的负载均衡集群。ipvs默认包含在lvs集群软件中
这里有一个误区,由于keepalived可以和ipvs一起很好的工作,所以很多初学者都认为keepalived是一个负载均衡的软件,这种理解是错误的

SchedulerI/OMultiplexer是一个I/O复用分发调度器,它负载安排Keepalived所有内部的任务请求;
Memory Mngt是一个内存管理机制,这个框架提供了访问内存的一些通用方法;
Control Plane 是keepalived的控制版面,可以实现对配置文件编译和解析;
Core componets 这部分主要包含了5个部分;
Watchdog:是计算机可靠领域中极为简单又非常有效的检测工具,Keepalived正是通过它监控Checkers和VRRP进程的。
Checkers:这是Keepalived最基础的功能,也是最主要的功能,可以实现对服务器运行状态检测和故障隔离。
VRRP Stack:这是keepalived后来引用VRRP功能,可以实现HA集群中失败切换功能。负责负载均衡器之间的失败切换FailOver;
==IPVS wrapper:==这个是IPVS功能的一个实现,IPVSwarrper模块将可以设置好的IPVS规则发送的内核空间并且提供给IPVS模块,最终实现IPVS模块的负载功能。
Netlink Reflector:用来实现高可用集群Failover时虚拟IP(VIP)的设置和切换,

keepalived运行时,会启动3个进程,分别为:core(核心进程),check和vrrp
core:负责主进程的启动,维护和全局配置文件的加载;
check:负责健康检查
vrrp:用来实现vrrp协议

六、keepalived的安装与配置

1.安装
yum -y install keepalived

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

2.配置模拟虚拟路由中主备物理路由器的高可用
实验环境准备:
master:192.168.30.149
backup:192.168.30.157
vip:192.168.30.250(虚拟出来的)用户访问的地址

(1)master和backup分别下载keepalived

 vim /etc/keepalived/keepalived.conf

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

1)全局配置
2)VRRP配置
3)LVS配置

(2)配置master上VRRP配置

先把不需要的注释即可不必删除。

#全局配置
global_defs {
   notification_email {
      #收件人地址
   }
      #邮件服务器
}

#VRRP配置
vrrp_instance VI_1 {
    state MASTER                #角色类型MASTER|BACKUP
    interface ens33             #网卡名称
    virtual_router_id 55        #虚拟路由id(需要与BACKUP一致)
    priority 100                #优先级,数字大的优先级高
    advert_int 1                #1秒检查一次
    authentication { 
        auth_type PASS          #认证类型 主备之间必须一样
        auth_pass 3333          #认证密码 主备之间必须一样
    }
    virtual_ipaddress {
        192.168.30.250          #虚拟ip(vip)
    }
}

(3)配置backup上VRRP配置

#全局配置
global_defs {
   notification_email {
   }
}

#VRRP配置
vrrp_instance VI_1 {
    state BACKUP                #角色类型MASTER|BACKUP
    interface ens33             
    virtual_router_id 55        
    priority 99               
    advert_int 1                
    authentication { 
        auth_type PASS          
        auth_pass 3333         
    }
    virtual_ipaddress {
        192.168.30.250         
    }
}

(4)启用master和backup的keepalived,查看ip

systemctl start keepalived

#master
[root@c2 ~]# ip a 
......
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:3b:68:61 brd ff:ff:ff:ff:ff:ff
    inet 192.168.30.149/24 brd 192.168.30.255 scope global noprefixroute dynamic ens33
       valid_lft 1392sec preferred_lft 1392sec
    inet 192.168.30.250/32 scope global ens33   #vip已在master上启用
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe3b:6861/64 scope link 
       valid_lft forever preferred_lft forever

#backup
[root@c1 ~]# ip a 
......
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:38:23:71 brd ff:ff:ff:ff:ff:ff
    inet 192.168.30.157/24 brd 192.168.30.255 scope global noprefixroute dynamic ens33
       valid_lft 1313sec preferred_lft 1313sec  #backup为备用状态

(5)模拟master路由宕机,backup路由会接管服务

#master
[root@c2 ~]# ip a 
......
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:3b:68:61 brd ff:ff:ff:ff:ff:ff
    inet 192.168.30.149/24 brd 192.168.30.255 scope global noprefixroute dynamic ens33
       valid_lft 1382sec preferred_lft 1382sec

#backup
[root@c1 ~]# ip a 
......
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:38:23:71 brd ff:ff:ff:ff:ff:ff
    inet 192.168.30.157/24 brd 192.168.30.255 scope global noprefixroute dynamic ens33
       valid_lft 1389sec preferred_lft 1389sec
    inet 192.168.30.250/32 scope global ens33     #vip在backup上启用
       valid_lft forever preferred_lft forever
3.配置模拟虚拟路由中主备互备物理路由器的高可用

master:

#全局配置
global_defs {
   notification_email {
   }
}

#VRRP配置
vrrp_instance VI_1 {
    state MASTER                #角色类型MASTER|BACKUP
    interface ens33             
    virtual_router_id 55        
    priority 100               
    advert_int 1                
    authentication { 
        auth_type PASS          
        auth_pass 3333         
    }
    virtual_ipaddress {
        192.168.30.250         
    }
}

#添加的新配置
vrrp_instance VI_2 {            #vrrp配置的名称要不同
    state BACKUP                #角色类型BACKUP
    interface ens33             
    virtual_router_id 56        #虚拟路由id56
    priority 99               
    advert_int 1                
    authentication { 
        auth_type PASS          
        auth_pass 6666          #修改新的密码
    }
    virtual_ipaddress {
        192.168.30.200          #在虚拟出一个ip(vip)
    }
}

backup:

#全局配置
global_defs {
   notification_email {
   }
}

#VRRP配置
vrrp_instance VI_1 {
    state BACKUP                #角色类型MASTER|BACKUP
    interface ens33             
    virtual_router_id 55        
    priority 99               
    advert_int 1                
    authentication { 
        auth_type PASS          
        auth_pass 3333         
    }
    virtual_ipaddress {
        192.168.30.250         
    }
}
#添加的新配置
vrrp_instance VI_2 {            
    state MASTER                #角色类型MASTER
    interface ens33             
    virtual_router_id 56        #虚拟路由id56
    priority 100               
    advert_int 1                
    authentication { 
        auth_type PASS          
        auth_pass 6666          
    }
    virtual_ipaddress {
        192.168.30.200          
    }
}
4.设置非抢占模式防止主用路由恢复后会影响正在运行的业务,master会把vip抢过来后继续提供服务

master:

vrrp_instance VI_1 {
    state MASTER               
    interface ens33             
    virtual_router_id 55        
    priority 100               
    advert_int 1 
    nopreempt            #非抢占模式 

如果像上面这样只添加非抢占模式是不会解决这个问题,我们将配置中state都配置成BACKUP,让它们在状态一样的情况下纯利用priorit优先级判断主备

vrrp_instance VI_1 {
    state BACKUP               
    interface ens33             
    virtual_router_id 55        
    priority 100               
    advert_int 1 
    nopreempt 
5.基于web网站的负载均衡高可

实验环境:

master(主):192.168.30.149
backup(备):192.168.30.157
real server1 :192.168.30.150
real server2:192.168.30.151

在这里插入图片描述
(1)master上配置

global_defs {
   notification_email {

   }
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 55
    priority 100
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 3333
    }
    virtual_ipaddress {
        192.168.30.250/24
    }
}
vrrp_instance VI_2 {
    state BACKUP
    interface ens33
    virtual_router_id 56
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 6666
    }
    virtual_ipaddress {
        192.168.30.200/24
    }
}
#LVS配置
virtual_server 192.168.30.250 80 {
    delay_loop 3            #健康检查时间间隔
    lb_algo rr              #负载均衡调度算法
    lb_kind DR              #负载均衡转发规则
    protocol TCP           #协议
     real_server 192.168.30.150 80 {      #要监控的real_server的ip和端口号
        weight 1                         #权重
        HTTP_GET {                        #基于HTTP协议的检查
            connect_timeout 3             #连接时间超时
            nb_get_retry 3                #重连次数
            delay_before_retry 3          #重连间隔时间
        }
    }
    real_server 192.168.30.151 80 {
        weight 1
        HTTP_GET {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

(2)backup上配置

global_defs {
   notification_email {
   }
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 55
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 3333
    }
    virtual_ipaddress {
        192.168.30.250/24
    }
}
vrrp_instance VI_2 {
    state BACKUP
    interface ens33
    virtual_router_id 56
    priority 100
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 6666
    }
    virtual_ipaddress {
        192.168.30.200/24
    }
}
virtual_server 192.168.30.250 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    protocol TCP

    real_server 192.168.30.150 80 {
        weight 1
        HTTP_GET {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
     }
}
    real_server 192.168.30.151 80 {
            weight 1
            HTTP_GET {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
     }
}

(3)两个real server 上执行如下脚本配置lvs的DR模式

#!/bin/bash

case $1 in

start)
        #禁止real server向外宣告地址
        echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore      
        echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce      
        echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
       echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
       #添加网卡的子网口为vip
       ifconfig ens33:0 192.168.30.250 broadcast 192.168.30.250 netmask 255.255.255.255 up
       if [ $? -eq 0 ] ;then
               #添加路由(访问192.168.254.250都走ens33:0这个网卡)
                route add -host 192.168.30.250 dev ens33:0
       fi
       echo "start success!"
;;
stop)
        echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
        echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
        ifconfig ens33:0 down
        if [ $? -eq 0 ];then
                route del -host 192.168.30.250
        fi
        echo "stop success!"
;;
*)
        echo "usage: start|stop"
;;
esac

arp_ignore:定义接收到ARP请求时的响应级别

  • 0:默认,只用本地配置的有响应地址都给予响应
  • :仅仅在目标IP是本地地址,并且是配置在请求进来的接口上的时候才给予响应 (仅在请求的目标地址配置请求到达的接口上的时候,才给予响应)

arp_announce:定义将自己的地址向外通告时的级别

  • 默认,表示使用配置在任何接口的任何地址向外通告
  • 尽量仅向目标网络通告与其网络匹配的地址
  • 仅向与本地接口上地址匹配的网络进行通告

(4)real server端开启httpd服务并向网站根目录写入内容以区分,我们用Windows命令提示符测试抓取网站页面内容测试
在这里插入图片描述
模拟主调度器宕机后再进行测试
在这里插入图片描述
测试达到结果!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值