keepalive笔记之三:keepalived通知脚本进阶示例

下面的脚本可以接受选项,其中:

-s, --service SERVICE,...:指定服务脚本名称,当状态切换时可自动启动、重启或关闭此服务;

-a, --address VIP: 指定相关虚拟路由器的VIP地址;

-m, --mode {mm|mb}:指定虚拟路由的模型,mm表示主主,mb表示主备;它们表示相对于同一种服务而方,其VIP的工作类型;

-n, --notify {master|backup|fault}:指定通知的类型,即vrrp角色切换的目标角色;

-h, --help:获取脚本的使用帮助;

#!/bin/bash
# Author: MageEdu <linuxedu@foxmail.com>
# description: An example of notify script
# Usage: notify.sh -m|--mode {mm|mb} -s|--service SERVICE1,... -a|--address VIP  -n|--notify {master|backup|falut} -h|--help 
 
#contact='linuxedu@foxmail.com'
helpflag=0
serviceflag=0
modeflag=0
addressflag=0
notifyflag=0
 
contact='root@localhost'
 
Usage() {
  echo "Usage: notify.sh [-m|--mode {mm|mb}] [-s|--service SERVICE1,...] <-a|--address VIP>  <-n|--notify {master|backup|falut}>" 
  echo "Usage: notify.sh -h|--help"
}
 
ParseOptions() {
  local I=1;
  if [ $# -gt 0 ]; then
    while [ $I -le $# ]; do
      case $1 in
  -s|--service)
[ $# -lt 2 ] && return 3
         serviceflag=1
         services=(`echo $2|awk -F"," '{for(i=1;i<=NF;i++) print $i}'`)
shift 2 ;;
  -h|--help)
         helpflag=1
return 0
        shift
;;
  -a|--address)
[ $# -lt 2 ] && return 3
    addressflag=1
vip=$2
shift 2
;;
  -m|--mode)
[ $# -lt 2 ] && return 3
mode=$2
shift 2
;;
  -n|--notify)
[ $# -lt 2 ] && return 3
notifyflag=1
notify=$2
shift 2
;;
  *)
echo "Wrong options..."
Usage
return 7
;;
       esac
    done
    return 0
  fi
}
 
#workspace=$(dirname $0)
 
RestartService() {
  if [ ${#@} -gt 0 ]; then
    for I in $@; do
      if [ -x /etc/rc.d/init.d/$I ]; then
        /etc/rc.d/init.d/$I restart
      else
        echo "$I is not a valid service..."
      fi
    done
  fi
}
 
StopService() {
  if [ ${#@} -gt 0 ]; then
    for I in $@; do
      if [ -x /etc/rc.d/init.d/$I ]; then
        /etc/rc.d/init.d/$I stop
      else
        echo "$I is not a valid service..."
      fi
    done
  fi
}
 
 
Notify() {
    mailsubject="`hostname` to be $1: $vip floating"
    mailbody="`date '+%F %H:%M:%S'`, vrrp transition, `hostname` changed to be $1."
    echo $mailbody | mail -s "$mailsubject" $contact
}
 
 
# Main Function
ParseOptions $@
[ $? -ne 0 ] && Usage && exit 5
 
[ $helpflag -eq 1 ] && Usage && exit 0
 
if [ $addressflag -ne 1 -o $notifyflag -ne 1 ]; then
  Usage
  exit 2
fi
 
mode=${mode:-mb}
 
case $notify in
'master')
  if [ $serviceflag -eq 1 ]; then
      RestartService ${services[*]}
  fi
  Notify master
  ;;
'backup')
  if [ $serviceflag -eq 1 ]; then
    if [ "$mode" == 'mb' ]; then
      StopService ${services[*]}
    else
      RestartService ${services[*]}
    fi
  fi
  Notify backup
  ;;
'fault')
  Notify fault
  ;;
*)
  Usage
  exit 4
  ;;
esac

在keepalived.conf配置文件中,其调用方法如下所示:

notify_master "/etc/keepalived/notify.sh -n master -a 172.16.100.1"  
notify_backup "/etc/keepalived/notify.sh -n backup -a 172.16.100.1"  
notify_fault "/etc/keepalived/notify.sh -n fault -a 172.16.100.1"  

 

转载于:https://www.cnblogs.com/djoker/p/6396685.html

Keepalived是一个开源的高可用软件包,它主要用于在服务器集群中提供冗余服务,通过VRRP(Virtual Router Redundancy Protocol)协议实现网络服务的负载均衡和故障切换。当配置keepalived以支持双活模式时,`/etc/keepalived/keepalived.conf` 文件会包含几个关键部分,包括虚拟路由器(VR),VRRP组定义,以及服务和监视器设置。 以下是一个简单的`keepalived.conf` 配置示例: ```conf vrrp_script chk_mysql { script "/usr/local/bin/check_mysql.sh" interval 2 weight 2 } virtual_router_id 51 vrrp_instance VI_1 { state MASTER interface eth0 virtual_ipaddress { 192.168.1.100/24 } authentication { auth_type PASS auth_pass your_password } virtual_router_mac MAC_ADDRESS priority 100 notify_script chk_mysql } ! Configuration for the secondary server (add this block and change MASTER to BACKUP) vrrp_instance VI_1 { state BACKUP interface eth0 virtual_ipaddress { 192.168.1.100/24 } ... } ``` - `vrrp_script`: 定义了一个检查脚本,比如检查MySQL服务是否运行正常。 - `virtual_router_id`: 每个VRRP实例的唯一标识符。 - `vrrp_instance`: 每个服务的实例,定义了主备状态、网络接口、VIP(虚拟IP地址)、认证方式(如果启用)和优先级。 - `notify_script`: 设置在状态改变时执行的脚本,如上面的`chk_mysql`。 - `state MASTER` 或 `state BACKUP`: 指定当前节点是主节点还是备节点。 请确保替换`eth0`为实际的网络接口,`MAC_ADDRESS`为网卡的MAC地址,`your_password`为指定的认证密码。在实际环境中,可能还需要配置监控策略、心跳间隔、网络策略等其他细节。 相关问题: 1. Keepalived如何通过VRRP实现双活? 2. 何时需要使用`auth_pass`字段? 3. 如何在备份节点上配置相同的服务?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值