keepalived中vrrp_script,track_script,notify的使用方法
转自:https://blog.51cto.com/liuzhengwei521/1929589 可以在keepalived.conf文件中定义的脚本,用以实现某个检测功能;
例:检测/etc/keepalived目录下down文件是否存在,如果存在则优先级减20,如果不存在表示正常
vrrp_script chk {
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
interval
weight -
注:这个脚本的作用是用于维护MASTER,使MASTER手动下线
如何调用上面定义的脚本呢?
在vrrp实例中(vrrp_instance VI_1)加上track_script用于追踪脚本
track_script {
chk
}
notify的用法:
notify_master:当当前节点成为master时,通知脚本执行任务(一般用于启动某服务,比如nginx,haproxy等)
notify_backup:当当前节点成为backup时,通知脚本执行任务(一般用于关闭某服务,比如nginx,haproxy等)
notify_fault:当当前节点出现故障,执行的任务;
例:当成为master时启动haproxy,当成为backup时关闭haproxy
notify_master "/etc/keepalived/start_haproxy.sh start"
notify_backup "/etc/keepalived/start_haproxy.sh stop"
一个完整的实例:
MASTER:初始priority为100
BACKUP:初始priority为90
模拟MASTER产生故障:
当检测到/etc/keepalived目录下有down文件时,priority减少20,变为80;低于BACKUP的priority;
此时MASTER变成BACKUP,同时执行notify_backup的脚本文件(关闭haproxy);
同时BACKUP变成MASTER,同时执行notify_master的脚本文件(启动haproxy);
模拟MASTER故障恢复:
当删除/etc/keepalived目录下的down文件时,原MASTER的优先级又变为100,高于原BACKUP的priority;
此时原MASTER由BACKUP又抢占成了MASTER,同时执行notify_master的脚本文件(启动haproxy);
同时原BACKUP由MASTER又变了BACKUP,同时执行notify_backup的脚本文件(关闭haproxy);
MASTER的配置:
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout
router_id LVS_DEVEL
}
vrrp_script chk {
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
interval
weight -
}
vrrp_instance VI_1 {
state MASTER
interface eth1
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
10.0.22.245
}
track_script {
chk
}
notify_master "/etc/keepalived/start_haproxy.sh start"
notify_backup "/etc/keepalived/start_haproxy.sh stop"
BACKUP的配置:
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout
router_id LVS_DEVEL
} vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
10.0.22.245
}
notify_master "/etc/keepalived/start_haproxy.sh start"
notify_backup "/etc/keepalived/start_haproxy.sh stop" }
start_haproxy.sh的脚本内容:
#!/bin/bash
case "$1" in
start)
/etc/init.d/haproxy start
;;
stop)
/etc/init.d/haproxy stop
;;
restart)
/etc/init.d/haproxy stop
/etc/init.d/haproxy start
*)
echo "Usage:$0 start|stop|restart"
;;
esac
keepalived检测nginx,当nginx服务不正常时自动降级,当nginx恢复时自动升级:
check_nginx.sh脚本
#!/bin/bash
nmap localhost -p | grep "80/tcp open"
if [ $? -ne ];then
exit
fi
notify.sh脚本:
#!/bin/bash
VIP=$
sendmail (){
subject="${VIP}'s server keepalived state is translate"
content="`date +'%F %T'`: `hostname`'s state change to master"
echo $content | mail -s "$subject" zhengwei.liu@staples.cn
}
case "$1" in
master)
nmap localhost -p | grep "80/tcp open"
if [ $? -ne ];then
/etc/init.d/nginx start
fi
sendmail
;;
backup)
nginx_psr=`ps -C nginx --no-header | wc -l`
if [ $nginx_psr -ne ];then
/etc/init.d/nginx stop
fi
;;
*)
echo "Usage:$0 master|backup VIP"
;;
esac
MASTER配置
! Configuration File for keepalived global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout
router_id https
}
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh"
interval
weight -
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
172.16.8.19/
}
track_script {
chk_nginx
}
notify_master "/etc/keepalived/notify.sh master 172.16.8.19"
notify_backup "/etc/keepalived/notify.sh backup 172.16.8.19"
}
BACKUP配置:
backup无需检测nginx是否正常,默认nginx是未启动的,当升级为MASTER时启动nginx,当降级为BACKUP时关闭
! Configuration File for keepalived global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout
router_id https
} vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
172.16.8.19/
}
notify_master "/etc/keepalived/notify.sh master 172.16.8.19"
notify_backup "/etc/keepalived/notify.sh backup 172.16.8.19"
}

keepalived中vrrp_script,track_script,notify的使用方法的更多相关文章

  1. Java线程和多线程(二)——对象中的wait,notify以及notifyAll方法

    Java对象中的wait,notify以及notifyAll方法 在Java的Object类中包含了3个final的方法,这三个方法允许线程来交流资源是否被锁定.这三个方法就是wait(),notif ...

  2. java中的wait(),notify(),notifyAll(),synchronized方法

    wait(),notify(),notifyAll()三个方法不是Thread的方法,而是Object的方法.意味着所有对象都有这三个方法,因为每个对象都有锁,所以自然也都有操作锁的方法了.这三个方法 ...

  3. java线程中的sleep/wait/notify/yield/interrupt方法 整理

    java线程中的sleep/wait/notify/yield/interrupt方法 sleep 该方法能够使当前线程休眠一段时间 休眠期间,不释放锁 休眠时间结束之后,进入可执行状态,加入到线程就 ...

  4. -1-5 java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait(),notify(),notifyAll()等方法都定义在Object类中

     本文关键词: java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁  sleep()和wait()方法的区别 为什么wait( ...

  5. keepalived之vrrp_script详解

    通常情况下,利用keepalived做热备,其中一台设置为master,一台设置为backup.当master出现异常后,backup自动切换为master.当backup成为master后,mast ...

  6. keepalived 的 vrrp_script

    [root@centos01 keepalived]# cat check_httpd.sh 脚本需要有执行权限 通常情况下,利用keepalived做热备,其中一台设置为master,一台设置为ba ...

  7. 【Java并发系列02】Object的wait()、notify()、notifyAll()方法使用

    一.前言 对于并发编程而言,除了Thread以外,对Object对象的wati和notify对象也应该深入了解其用法,虽然知识点不多. 二.线程安全基本知识 首先应该记住以下基本点,先背下来也无妨: ...

  8. 【多线程】java多线程 测试例子 详解wait() sleep() notify() start() join()方法 等

    java实现多线程,有两种方法: 1>实现多线程,继承Thread,资源不能共享 2>实现多线程  实现Runnable接口,可以实现资源共享 *wait()方法 在哪个线程中调用 则当前 ...

  9. 多线程协作wait、notify、notifyAll方法简介理解使用 多线程中篇(十四)

    在锁与监视器中有对wait和notify以及notifyAll进行了简单介绍 所有对象都有一个与之关联的锁与监视器 wait和notify以及notifyAll之所以是Object的方法就是因为任何一 ...

随机推荐

  1. vue 路由传参中刷新页面参数丢失 及传参的几种方式?

    在页面跳转中,我通过路由传参,结果发现页面参数丢失了.路径返回了根目录.... 1. 先说下路由传参的几种方式吧? 比如:<div v-for="item in items" ...

  2. 装箱与拆箱(TDB)

    装箱:把值类型转换为引用类型 拆箱:把引用类型转换为值类型 只能对之前装箱的变量进行拆箱.需要强制转换.

  3. wpf mvvm datagrid 中button绑定命令方法

    <DataGridTemplateColumn Header="设备状态" IsReadOnly="True" Width="150" ...

  4. sanic之websocket路由

    在某些时候,需要建立websocket路由,来建立长链接,来实时传输数据,就比如一些聊天应用,就有实时音视频,需要实时传出状态 在sanic框架中支持两种websocket路由方式,有一种是再app中 ...

  5. python--hmac

    检测一下客户端是否合法,不依靠登录认证.这样即使知道服务端ip和端口,客户端也不能随便就连接服务端实现机制是在服务端中设置了密钥,借用了hmac os 两个模块 import socket impor ...

  6. JQ基本

    jQuery的入口函数: 特点:1. 等着DOM结构渲染完毕即可执行内部代码,不必等到所有外部资源加载完毕,jQuery帮我们完成了封装. 2. 相当于原生js中的DOMContentLoaded. ...

  7. 记录一次工作中jvm被linux杀死的调查

    首先,以后碰到任何jvm的错误,先看日志!!!!!!!! web项目在tomcat目录下的log里,或者自己设定的errorfile目录下.总之,找到一切可以运用的日志,比如crash日志,cored ...

  8. shell脚本输出九九乘法表

    #!/bin/bash#输出九九乘法表 for ((i=1;i<=9;i++)) do for ((j=1;j<=$i;j++)) do echo -n $j'x'$i=$(($i*$j) ...

  9. Class类的作用?生成Class对象的方法有哪些?

    Class类是Java 反射机制的起源和入口,用于获取与类相关的各种信息,提供了获取类信息的相关方法.Class类继承自Object类 Class类是所有类的共同的图纸.每个类有自己的对象,好比图纸和 ...

  10. Vue.js 样式绑定(1)

    demo <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <titl ...