keepalived高可用调度器配置详解

一、VRRP概述

 1.VRRP协议

        虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称VRRP)是由IETF提出的解决局域网中配置静态网关出现单点失效现象的路由协议,1998年已推出正式的RFC2338协议标准。VRRP广泛应用在边缘网络中,它的设计目标是支持特定情况下IP数据流量失败转移不会引起混乱,允许主机使用单路由器,以及及时在实际第一跳路由器使用失败的情形下仍能够维护路由器间的连通性。

 

  2.vrrp术语

参考:H3C VRRP技术白皮书


虚拟路由器

由一个Master路由器和多个Backup路由器组成。主机将虚拟路由器当作默认网关。

VRID

虚拟路由器的标识。有相同VRID的一组路由器构成一个虚拟路由器

Master路由器

虚拟路由器中承担报文转发任务的路由器,主节点(仅能有一个)

Backup路由器

Master路由器出现故障时,能够代替Master路由器工作的路由器,备用节点(可以有多个)

虚拟IP地址(VIP)

虚拟路由器的IP地址。已改为虚拟路由器可以拥有一个或多个IP地址

IP地址拥有者

接口IP地址与虚拟IP地址相同的路由器被称为IP地址拥有者

虚拟MAC地址(VMAC)

一个虚拟路由器拥有一个虚拟MAC地址。虚拟路由器回应APR请求使用的是细腻MAC地址,只有虚拟路由器做特护配置的时候,才会回应接口的真实MAC地址

优先级

VRRP根据优先级来确定虚拟路由器中每台路由器的地位

非抢占方式

Backup路由器工作在非抢占方式下,只要Master路由器每出现故障,Backup即使随后被配置更高的优先级也不会成为Master路由器

抢占方式

Backup路由器工作在抢占方式下,当收到VRRP报文后,会将自己的优先级与通告报文中的优先级进行比较。若当前的Master路由器的优先级高,就会主动抢占成为Master路由器;否则保持Backup状态

       

  3.工作过程

      (1) 虚拟路由器中的路由器根据优先级选举出MasterMaster路由器通过发送ARP报文,将自己的虚拟MAC地址通知给与它连接的设备或者主机,从而承担报文转发任务。

      (2) Master路由器周期性发送VRRP报文,以公布其配置信息(优先级等)和工作状况

      (3) Master路由器出现故障,虚拟路由器中的Backup路由器将根据优先级重新选举新的Master

      (4) 虚拟路由器状态切换时,Master路由器由一台设备切换为另一台设备,新的Master路由器知识简单地发送一个携带虚拟路由器的MAC地址和虚拟IP地址信息的ARP此昂管信息。网络中的主机感知不到Master路由器已经切换为另外一台设备

      (5) Backup路由器的优先级高于Master路由器时,由Backup路由器的工作方式(抢占和非抢占)决定是否重新选举Master

 

 4.VRRP功能

      (1)Master路由器选举

      (2)Master路由器状态通告

      (3)VRRP认证功能

 

 5.VRRP高可用工作模型

    (1)主备备份

              业务仅由Master路由器承担。当Master路由器出现故障时,才会由选举出来的Backup路由器接替它工作

keepalived高可用调度器配置详解_第1张图片

    (2)主主备份

            在路由器的一个接口上可创建多个虚拟路与其,使得该路由器可以在一个虚拟路由器中作为Master路与其,同时在其他的虚拟路由器中做为Backup路由器。主主备份方式能实现负载分担的功能

 

 

 

二、keepalived高可用调度器

 1.keepalived功能

         keepalived程序是vrrp协议在Linux主机上以守护进程方式的实现能够根据配置文件生成ipvs规则,并对各Real Server的健康做检测,以及LoadBalance主机和BackUP主机之间failover的实现

         keepalivedCentOS 6.4+收录到发行版光盘内,佛在需要编译安装或者第三方RPM    

                                                                                                                                                                                                                                                                                                                                                                                               

  2.程序组件

          核心程序、IO复用器内存管理配置文件分析器

核心组件具体如下:


Watch  dog

高可用监视器

checkers

健康状态检测器(TCPHTTPSSLMISC…  ...)

smtp

支持发送邮件通告机制

System  call

支持系统调用机制,作出管理操作

vrrp stack

VRRP栈的实现,实现VRRP协议调用

Netlink  Reflectior

VRRP借助于Netlink监控网络,实现网络功能配置

ipvs wrapper

ipvs控制

 

 3.keepalived高可用集群配置前提  

         (1)各节点时间要同步;必须不能超过一秒,一般使用网络偶时间服务器(ntp server)

         (2)确保iptables及selinux不会成为障碍;

         (3)各节点之间可通过主机名互相通信;节点的名称设定与hosts文件中解析的主机名都要保持一致;

     #uname -n 获得的主机,与解析的主机名要相同;

         (4)各节点之间基于密钥认证的方式通过ssh互信通信;

   说明:第三条和第四条非必须

 

 

 

三、keepalived程序环境配置

  1.主配置文件:/etc/keepalived/keepalived.conf

     (1)GLOBALCONFIGURATION全局配置

global_defs          # Block id

{

...

}

    常用配置:

notification_email  {  …  }

收件人邮箱地址

notification_email_from

发件人邮箱地址

smtp_server

邮件发送服务器IP;

smtp_connect_timeout

邮件服务器建立连接的超时时长;默认30

router_id  LVS_DEVEL

物理节点的标识符;建立使用主机名;

vrrp_mcast_group4

IPV4多播地址,默认224.0.0.18;

     (2)VRRPDCONFIGURATION配置vrrp实例

vrrp instance:虚拟路由器

vrrp_instance NAME {

...

}

vrrp synchronization group

vrrp_sync_group NAME  {

...

}

     1)常用配置:

state    MASTER|BACKUP

在当前VRRP实例中此节点的初始状态;

interface   IFACE_NAME

vrrp用于绑定vip的接口;

virtual_router_id  #

当前VRRP实例的VRID,可用范围为0-255,默认为51;

priority #

当前节点的优先级,可用范围0-255;

advert_int 1

通告时间间隔;默认1

    2)认证方式配置:

authentication{     # Authentication block

#PASS||AH

#PASS - Simple Passwd (suggested)

#AH - IPSEC (not recommended))

auth_typePASS

#Password for accessing vrrpd.

#should be the same for all machines.

#Only the first eight (8) characters are used.

auth_pass1234

}

    3)虚拟IP配置:

virtual_ipaddress{

<IPADDR>/<MASK>brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>

}

       (3)LVSCONFIGURATIONipvs的相关配置集群服务,服务内的RS;

 

  2.双主备份VRRP配置实例

          第一步:node1节点配置

vrrp_instanceVI_1 {

stateMASTER

interfaceeno16777736

virtual_router_id101

priority100

advert_int1

authentication{

auth_typePASS

auth_passZPNnTQ6F

}

virtual_ipaddress{

172.16.100.9/16

}

}

vrrp_instanceVI_2 {

stateBACKUP

interfaceeno16777736

virtual_router_id102

priority99

advert_int1

authentication{

auth_typePASS

auth_passIWyijM5Q

}

virtual_ipaddress{

172.16.100.10/16

}

}                                

          第二步:node2节点配置

vrrp_instanceVI_1 {

stateBACKUP

interfaceeno16777736

virtual_router_id101

priority99

advert_int1

authentication{

auth_typePASS

auth_passZPNnTQ6F

}

virtual_ipaddress{

172.16.100.9/16

}

}

vrrp_instanceVI_2 {

stateMASTER

interfaceeno16777736

virtual_router_id102

priority100

advert_int1

authentication{

auth_typePASS

auth_passIWyijM5Q

}

virtual_ipaddress{

172.16.100.10/16

}




四、keepalived通知脚本检测维护服务

 1.VRRP配置段定义邮件通知

       vrrp_instancenotify_masternotify_backupnotify_faultnotify定义出处理脚路径和传递参数。一般notify_masternotify_backupnotify_fault为一组联合使用,或者notify单独定义使用。

vrrp_instance{

...

notify_master  <STRING>|<QUOTED-STRING>

notify_backup  <STRING>|<QUOTED-STRING>

notify_fault  <STRING>|<QUOTED-STRING>

notify  <STRING>|<QUOTED-STRING>

}        

示例脚本:

#!/bin/bash

# Description: An example of notify script

#

contact='root@localhost'

 

notify() {

mailsubject="$(hostname) to be $1: vipfloating"

mailbody="$(date +'%F %H:%M:%S'): vrrptransition, $(hostname) changed to be $1"

echo $mailbody | mail -s "$mailsubject"$contact

}

case $1 in

master)

notify master

exit 0

;;

backup)

notify backup

exit 0

;;

fault)

notify fault

exit 0

;;

*)

echo "Usage: $(basename $0){master|backup|fault}"

exit 1

;;

esac

 

  2.定义外部脚本来检测高可用功能依赖到的资源的监控

       第一步:global_defs中定义脚本

vrrp_script NAME  {

script

interval  #

weight  #

}

       第二步:vrrp_instance实例追踪定义脚本,用于作为实例的当前节点的监控机制

track_script {

NAME

}

实例:当检测到down文件、监测不到nginx服务是转移

vrrp_script  chk_down {

script  "[[ -f /etc/keepalived/down ]]&& exit 1 || exit 0"

interwval 1

weight -2

}

vrrp_script  chk_nginx {

script  "killall -0 nginx "

interwval 2

weight -5

}

track_script {

chk_down

chk_nginx

}

注意:其转移的方式和服务本身配置没有直接关系

  3.监控关注的网络接口

track_interface {

IFACE_NAME

}

nopreempt

使用非抢占模式

preempt_delay  TIME

使用延迟抢占模式

 

 

五、keepalived高可用ipvs服务

  1.定义集群服务方法

方法一:此方法内部要使用 protocol 指定协议

virutal_server vip  port  {

...

}

方法二:

virtual_server fwmark int  {

...

}

        常用的参数:

delay_loop  #

每延迟多久探测一次

lb_algo   rr|wrr|lc|wlc|lblc|sh|dh

定义调度算法

lb_kind  NAT|DR|TUN

定义集群类型

persistence_timeout  #

持久连接时长

protocol TCP

支持的传输协议

sorry_server  <IPADDR>   <PORT>        

所有RS错误,返回用户信息                

 

 2.定义RS的方法(应用上下文virutal_server)

real_server <IPADDR> <PORT>  {

...

}

      常用的参数:

weight   #

指明当前RS权重

notify_up  <STRING>|<QUOTED-STRING>

定义up脚本

notify_down  <STRING>|<QUOTED-STRING>

定义down脚本

 

 

六、keepalived健康状态检测机制

  1.web应用层检测

HTTP_GET|SSL_GET

{

...

}

检测参数:

url  {

path  <STRING>

status_code  <INT>

digest  <STRING>

}

检测URL

路径

期望返回状态

指纹信息

(注意status_codedigest有其一即可)

nb_get_retry  <INT>

get请求的重试次数

delay_before_retry  <INT>

两次重试之间的时间间隔;

connect_timeout  <INTEGER>

连接超时时长,默认为5s;

warmup <INT>

健康状态检测延迟;

  2.传输层检测(tcp协议层)

TCP_CHECK{

...}

检测参数:connect_timeout  <INTEGER>

connect_ip<IP ADDRESS>

connect_port<PORT>

bindto<IP ADDRESS>

bind_port<PORT>

                            

本文出自 “许鼎的博客” 博客,转载请与作者联系!

你可能感兴趣的:(keepalived,详解,vrrp)