VRRP script

VRRP script

  • VRRP的检测脚本

1)在keepalived学习总结中已经说过,keepalived只是提供一个VIP,但高可用的是服务,因此keepalived一般会与lvs、nginx、haproxy、mysql…等服务器联合使用,以实现服务的高可用,但是若keepalived与之联合使用的服务异常时,此处keepalived提供的VIP也就没有任何意义了,因此此时的VIP我们希望它可以自动检测与keepalived连用的服务是否正常,若服务不正常,VIP实现自动飘移至backup节点,此时可以使用VRRP scripts实现。

2)keepalived调用外部的辅助脚本进行资源监控,并根据监控的结果状态能实现优先动态调整。

3)vrrp_script:自定义资源监控脚本,vrrp实例根据脚本返回值进行下一步操作,脚本可被多个实例调用。track_script:调用vrrp_script定义的脚本去监控资源,定义在实例之内,调用事先定义的vrrp_script。

4)VRRP scripts的实现:分两步:

  • (1) 先定义一个脚本
    vrrp_script script_name

vrrp_script <SCRIPT_NAME> {
    script <STRING>|<QUOTED-STRING> #script后面可以直接接shell命令或一个可执行脚本
    OPTIONS  #对于上面script的执行状态结果:(0:成功|true  非0:失败|false)
}
  • (2) 调用此脚本
track_script {
    SCRIPT_NAME_1
    SCRIPT_NAME_2
}
定义脚本
vrrp_script <SCRIPT_NAME> {             #定义一个检测脚本,在global_defs 之外配置
    script <STRING>|<QUOTED-STRING>     # shell命令或脚本路径
    interval <INTEGER>                  # 间隔时间,单位为秒,默认1秒
    timeout <INTEGER>                   # 超时时间
    weight <INTEGER:-254..254>          # 权重,当脚本成功或失败对当前节点的优先级是增加还是减少,这个值会与定义的优先级做加法例:-80时则为priority+(-80)
    fall <INTEGER>                      #脚本几次失败转换为失败
    rise <INTEGER>                      # 脚本连续监测成果后,把服务器从失败标记为成功的次数
    user USERNAME [GROUPNAME]           # 执行监测的用户或组
    init_fail                           # 设置默认标记为失败状态,监测成功之后再转换为成功状态
}
#基于第三方仲裁设备实现VRRP script
  • 基于第三方仲裁设备主要用于检测lvs服务(lvs服务特点:无端口、无进程)

  • 因此对于lvs进程,端口进程就没有办法判断lvs的异常还是正常。

  • 使用方法:
    ①仲裁设备检测keepalived的master节点是否正常,然后故障时做出什么样的操作。比如:仲裁设备某目录创建一个文件?
    ②master节点或者backup节点去检测仲裁设备文件是否存在然后对应做出什么样的操作。比如:若文件存在则VIP迁移。
    注:主要看你使用的什么样的逻辑咯。

【实验规划:】

  • keepalived+lvs
    VIP:192.168.38.88
    master:192.168.38.17
    backup:192.168.38.27
    仲裁设备和web server:192.168.38.37

【实验现象:】

  • 当仲裁设备检测web 首页是否能够访问,web首页能访问,master正常;反之,VIP需要飘移至backup。(当然这里的前提是web server好的哈 <控制变量>)。
  • 仲裁设备检测web 不存在时,将在/etc/keepalived/check/目录创建down文件。
  • 仲裁设备/etc/keepalived/check/目录将共享给master 和 backup节点。

【实验过程:】

  • ①将keepalived+lvs和web server实现
  • ②仲裁设备搭建nfs服务,将/etc/keepalived/check/共享
  • ③修改keepalived配置文件添加VRRP script部分内容,检测/etc/keepalived/check/down文件是否存在
①keepalived+lvs和web server实现
[root@centos7-17 keepalived]# cat /etc/keepalived/conf/lvs-web.conf 
vrrp_instance VI_2 {
    state MASTER
    interface eth0
    virtual_router_id 77
    priority 100
    advert_int 1
    unicast_src_ip 192.168.38.17
	unicast_peer { 
	192.168.38.27
	}
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.38.88 dev eth0 label eth0:0
    }
	notify_master "/etc/keepalived/notify.sh master"
	notify_backup "/etc/keepalived/notify.sh backup"
	notify_fault "/etc/keepalived/notify.sh fault"
}

virtual_server 192.168.38.88 80 {                  
        delay_loop 3
        lb_algo rr                                 
        lb_kind DR                                
        protocol TCP

        real_server 192.168.38.47 80 {             
                weight 1
		TCP_CHECK {
			connect_timeout 5
			nb_get_retry 3
			delay_before_retry 3
			connect_port 80                           
        	}
	}
        real_server 192.168.38.37 80 {             
                weight 1
		TCP_CHECK {
			connect_timeout 5
			nb_get_retry 3
			delay_before_retry 3
			connect_port 80                           
        	}
	}
}



web server端:绑定VIP
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore;echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce;echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
# ip a a 192.168.38.88/24 dev eth0


测试:
[root@centos7-77 ~]# curl 192.168.38.88
web1  37
②仲裁设备搭建nfs服务,将/etc/keepalived/check/共享
    此处实现,当然我是收到往共享目录中创建down文件,并未实现什么检测,然后在自动生成down文件!


NFS共享/etc/keepalived/check/目录和挂载过程 略~~
  • 实现逻辑:/etc/keepalived/check/down文件存在表示master服务器故障、使用backup节点去检测/etc/keepalived/check/down文件时是否存在,backup节点检测到文件存在,需要提升自己的优先级。
backup配置文件:

[root@centos7-27 conf]# cat lvs-web.conf 

################################# vrrp_script  setting ##########################################
vrrp_script chk_down {
    script "/bin/bash -c '[[ -f /etc/keepalived/down ]]' && exit 7 || exit 0"
    interval 1
    weight  +80
    fall 3
    rise 5
    timeout 2
}

vrrp_instance VI_2 {
    state MASTER
    interface eth0
    virtual_router_id 77
    priority 80
    advert_int 1
    unicast_src_ip 192.168.38.27
	unicast_peer { 
	192.168.38.17
	}
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.38.88 dev eth0 label eth0:0
    }
################################# 调用VRRP_scripts ##########################################
    track_script {
	chk_down
    }
}

virtual_server 192.168.38.88 80 {                  
        delay_loop 3
        lb_algo rr                                 
        lb_kind DR                                
        protocol TCP

        real_server 192.168.38.47 80 {             
                weight 1
		TCP_CHECK {
			connect_timeout 5
			nb_get_retry 3
			delay_before_retry 3
			connect_port 80                           
        	}
	}
        real_server 192.168.38.37 80 {             
                weight 1
		TCP_CHECK {
			connect_timeout 5
			nb_get_retry 3
			delay_before_retry 3
			connect_port 80                           
        	}
	}
}

【测试现象:】

  • 手动在仲裁设备创建/etc/keepalived/check/down文件
  • backup节点:
    提升优先级 --> 提升为master节点 --> 设置VIP

高可用HAProxy

  • keepalived与HAProxy联用时,可直接检测HAProxy进程是否存在。

  • 检测haproxy进程:
    ps aux | grep haproxy | grep -v grep
    /usr/bin/killall -0 haproxy

  • 0) 发送0信号 对进程做错误检查

################################# vrrp_script  setting ##########################################
vrrp_script chk_haproxy {
    script " /usr/bin/killall -0 haproxy"
    interval 1
    weight  +80
    fall 3
    rise 5
    timeout 2
}

vrrp_instance VI_2 {
################################# 调用VRRP_scripts ##########################################
    track_script {
	chk_down
    }
}
  • 也可以使用脚本方式实现
vrrp_script chk_nginx {
script "/etc/keepalived/chk_nginx.sh"
interval 1
weight -80
fall 3
rise 5
timeout 2
}


track_script {
chk_haproxy
}


# yum install psmisc -y
# cat /etc/keepalived/chk_nginx.sh
	#!/bin/bash
	/usr/bin/killall -0 nginx
# chmod a+x /etc/keepalived/chk_nginx.sh
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值