keepalived的原理和基本实现

一、keepalived的基本原理介绍

keepalived最初设计的目的是为了实现lvs前端director的高可用,非常轻量级。主要的实现的vrrp协议。

VRRP是一种容错协议,它保证当主机的下一跳路由器出现故障时,由另一台路由器来代替出现故障的路由器进行工作,从而保持网络通信的连续性和可靠性。

VRRP具有如下优点:

  • 简化网络管理:在具有多播或广播能力的局域网(如以太网)中,借助VRRP 能在某台设备出现故障时仍然提供高可靠的缺省链路,有效避免单一链路发生故障后网络中断的问题,而无需修改动态路由协议、路由发现协议等配置信息,也无需修改主机的默认网关配置。
  • 适应性强:VRRP 报文封装在 IP 报文中,支持各种上层协议。
  • 网络开销小:VRRP 只定义了一种报文——VRRP 通告报文,并且只有处于Master 状态的路由器可以发送 VRRP 报文。

keepalived的软件架构如下:(图片来源于keepalived官网)

组件简单介绍:

IPVS: 为lvs生成ipvs规则的组件,是内核级别的。

NETLINK:Netlink是套接字家族中的一员,主要用内核与用户空间的进程间、用户进程间的通讯。然而它并不像网络套接字可以用于主机间通讯,Netlink只能用于同一主机上进程通讯,并通过PID来标识它们。Netlink被设计为在Linux内核与用户空间进程传送各种网络信息。网络工具iproute2利用 Netlink从用户空间与内核进行通讯。Netlink由一个在用户空间的标准的Socket接口和内核模块提供的内核API组成。Netlink的设计比ioctl更加灵活,Netlink使用了AF_NETLINK Socket 家族。(摘自维基百科)

IPVS wrapper:借助于Checkers实现后端lvs主机的健康状态检测。

VRRP Stack: 实现VRRP协议,实现虚拟IP地址的转移。

更多详细的介绍,参考官网地址:http://www.keepalived.org/documentation.html

二、keepalived的安装配置

在CentOS6.4以后,keepalived直接收录到内置的rpm仓库中,可以直接安装使用。

yum install keepalived -y

keepalived配置文件:

/etc/keepalived/keepalived.conf

1、简单的实现vrrp协议的配置

配置模式(主从模式):
主节点(Master):172.16.10.9
从节点(Backup):172.16.10.77
虚拟地址:172.16.10.68

配置过程:

### 172.16.10.9:/etc/keepalived/keepalived.conf,实例内容: 
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 10
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass MasBac
    }
    virtual_ipaddress {
        172.16.10.68
    }
}
### 172.16.10.77:/etc/keepalived/keepalived.conf,实例内容: 
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 10
    priority 98
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass MasBac
    }
    virtual_ipaddress {
        172.16.10.68
    }
}

配置完成后,先启动172.16.10.77的keepalived服务,查看日志信息:

此时,启动Master端172.16.10.9的keepalived服务:

配置模式(双主模式):
节点地址:172.16.10.9,172.16.10.77
虚拟地址:172.16.10.68 172.16.10.69
说明:这里的双主模型的实现实际上是配置了2组vrrp的示例。
如下关系:
示例1:
    主节点:172.16.10.9
    从节点:172.16.10.77 
示例2:
    主节点:172.16.10.77
    从节点:172.16.10.9

配置信息:

## 172.16.10.9的vrrp实例信息:
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 10
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass MasBac
    }
    virtual_ipaddress {
        172.16.10.68
    }
}

vrrp_instance VI_2 {
    state BACKUP
    interface eth0
    virtual_router_id 15
    priority 98
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass DouMas
    }
    virtual_ipaddress {
        172.16.10.69
    }
}
## 172.16.10.77的vrrp实例信息:
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 10
    priority 98
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass MasBac
    }
    virtual_ipaddress {
        172.16.10.68
    }
}

vrrp_instance VI_2 {
    state MASTER
    interface eth0
    virtual_router_id 15
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass DouMas
    }
    virtual_ipaddress {
        172.16.10.69
    }
}

重新启动keepalived服务:

此时,如果 172.16.10.77 出现故障,172.16.10.9会拥有2个虚拟ip地址,实现真正的冗余

2、配置keepalived为实现lvs高可用

环境说明:
keepalived采用双主模型:节点是172.16.10.9 172.16.10.77
后端的realserver:172.16.10.122 172.16.10.133

配置说明:

## 配置后端节点:172.16.10.122 172.16.10.133
## ifconfig eth0 172.16.10.122/16 up 
## ifconfig eth0 172.16.10.122/16 up  # 这个也可以写到配置文件

echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
ifconfig lo:0 172.16.10.68 netmask 255.255.255.255 broadcast 172.16.10.68
route add -host 172.16.10.68  dev lo:0
ifconfig lo:1 172.16.10.69 netmask 255.255.255.255 broadcast 172.16.10.69
route add -host 172.16.10.69  dev lo:1

配置keepalived:

### 172.16.10.9:/etc/keepalived/keepalived.conf的配置:
global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 172.16.10.9
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 10
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass MasBac
    }
    virtual_ipaddress {
        172.16.10.68    
    }
}

vrrp_instance VI_2 {
    state BACKUP
    interface eth0
    virtual_router_id 15
    priority 98
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass DouMas
    }
    virtual_ipaddress {
        172.16.10.69
    }
}

virtual_server 172.16.10.68 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP 
    sorry_server 172.16.10.77 80

    real_server 172.16.10.122 80 {
        weight 1
        HTTP_GET {
	    url {
		path /
		status_code 200
	    }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }   
    }
    real_server 172.16.10.133 80 {
        weight 1
        HTTP_GET {
            url {
                path /
                status_code 200 
            }   
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }   
    } 
}

virtual_server 172.16.10.69 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR 
    #persistence_timeout 50
    protocol TCP
    sorry_server 172.16.10.77 80

    real_server 172.16.10.122 80 {
        weight 1
        HTTP_GET {
            url {
                path /
                status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.16.10.133 80 {
        weight 1
        HTTP_GET {
            url {
                path /
                status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
### 172.16.10.77:/etc/keepalived/keepalived.conf的配置:
! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 172.16.10.9
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 10
    priority 98
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass MasBac
    }
    virtual_ipaddress {
        172.16.10.68
    }
}

vrrp_instance VI_2 {
    state MASTER
    interface eth0
    virtual_router_id 15
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass DouMas
    }
    virtual_ipaddress {
        172.16.10.69
    }
}

virtual_server 172.16.10.68 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP
    sorry_server 172.16.10.77 80

    real_server 172.16.10.122 80 {
        weight 1
        HTTP_GET {
            url {
                path /
                status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.16.10.133 80 {
        weight 1
        HTTP_GET {
            url {
                path /
                status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

virtual_server 172.16.10.69 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP
    sorry_server 172.16.10.77 80

    real_server 172.16.10.122 80 {
        weight 1
        HTTP_GET {
            url {
                path /
                status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.16.10.133 80 {
        weight 1
        HTTP_GET {
            url {
                path /
                status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

补充 对于后端健康状态的检测,还有:

TCP_CHECK {
     connect_port 80
     connect_timeout 3
}

测试:

测试前,重启keepalived服务。

当后端realserver都出现故障时:

配置完成。

时间: 2024-10-08 11:13:23

keepalived的原理和基本实现的相关文章

keepalived工作原理

keepalived是一款c语言写的实现在linux系统上实现负载均衡和高可用的软件.它遵从于GNU是一款优秀的开源软件. 一:两个关键词的解释 1:负载均衡 keepalived内置了对ipvs函数的调用支持.可以直接在keepalived中按照语法配置ipvs然后keepalived就可以实现对ipvs的配置. 2:高可用 keepalived是以VRRP(Virtual Router Redundancy Protocol)协议为实现基础的即虚拟路由冗余协议.虚拟路由冗余协议可以认为是实现

keepalived工作原理和配置说明

keepalived是什么 keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障. keepalived工作原理 keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议. 虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提

Keepalived 介绍 原理

keepalived是什么: 这里先和前面的LVS 联系一下,我们平时使用一台机器运行 LVS 进行数据的转发,这里会有两个问题1.如果这台LVS 故障了怎么办?整个集群系统都会停止工作2.LVS后端一般有多台 real  server ,如果其中的一台(多台)real server 故障了 怎么办? keepalived  就可以解决上面两个问题,对应功能1 和 功能2 功能1.使用VRRP协议 来控制一组高可用(HA) 主备系统,一台master工作,一台slave热备:master失效后s

keepalived简单原理及配置参数介绍_2015101601

>>>keepalived是什么? keepalive是HA(High Available)高可用集群的一种实现方案,用来防止系统架构中的单点故障.其是vrrp协议的实现. >>>vrrp协议工作简介 vrrp(Virtual Router Redundancy Protocol),即是虚拟路由冗余协议.用于实现多个路由器的高可用性.其工作原理是将一组路由器虚拟成一个虚拟路由器对外提供一个或多个IP地址.在这组路由器当中,实际对外提供IP地址的路由器被称为MASTER,

keepalived工作原理及裂脑

1. keepalived服务的工作原理(重点) ükeepalived高可用对之间是通过VRRP协议通信的,因此,我们从VRRP协议介绍: üvrrp协议,全称virtual  router redundancy protocol ,中文名名为虚拟路由冗余协议,VRRP的出现时为了解决静态路由的单点故障. üVRRP是通过一种竞选协议机制来将路由任务交给某台VRRP路由器的. üVRRP是用IP多播的方式(默认多播地址224.0.0.18)实现高可用对之间通信的. ü工作时主节点发包,备节点接

keepalived的原理以及配置使用详解

内容 1.vrrp协议简介 2.keepalived的工作架构以及工作原理 3.keepalived的安装使用详解 一.vrrp协议简介 VRRP(Virtual Router Redundancy Protocol)协议是用于实现路由器冗余的协议. VRRP协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP(一个或多个),而在路由器组内部,如果实际拥有这个对外IP的路由器如果工作正常的话就是MASTER,或者是通过算法选举产生,MASTER实现针对虚拟路由器IP的各种网络功能,如

keepalived 工作原理与配置文件讲解

1.简介 Keepalived:高可用或热备软件,用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构不可用)的发生,keepalived就是VRRP协议的实现. 2.原理 keepalived采用是模块化设计,不同模块实现不同的功能,keepalived主要有三个模块,分别是core.check和vrrp. core:是keepalived的核心,负责主进程的 启动和维护,全局配置文件的加载解析等 check: 负责healthchecker(健康检查),包括了各种健康检查方式

keepalived基础原理

keepalived介绍 设置初衷是为了高可用ipvs 通过脚本可以实现高可用nginx或者haproxy调度器, 基于vrrp协议完成一个固定的IP可以在集群中不同的节点进行流动.为ipvs集群的各RS做健康状态检测 工作模式:              主/备: 单虚拟路径器:              主/主:主/备(虚拟路径器1)      备/主(虚拟路径器2) keepalived会根据配置文件优先级最高的主机会不断向同一个组播域中的所有主机发送组播信息当前的虚拟ip地址就会被分配给

Keepalived工作原理(简单概述)

keepalived这项服务简单来说,就是来防止单点故障的. 所谓单点故障,再简单点来说就是老大挂了手下的小弟过来接班,老大复活了,继续当小弟,保证服务的高可用. 官方一点来说就是进行故障的切换转移,是通过VRRP虚拟路由器冗余协议来实现的,VRRP是通过一种竞选机制来将路由的任务交给某台VRRP路由器. 通常情况下,keepalived和LVS负载均衡软件一起出现,用来管理和监控整个集群的节点状态,这里就不详细介绍了. 看一下keepalived的配置文件,以及各个模块的作用功能 /etc/k