三.keepalived介绍及工作原理

news2024/11/19 1:19:28

keepalived介绍及工作原理

  • keepalived介绍及工作原理
  • 一、keepalived的介绍
  • 二、Keepalived服务的重要功能
    • 1、管理LVS负载均衡软件
    • 2、实现对LVS集群节点健康检查功能(healthcheck)
    • 3、作为系统网络服务的高可用功能(failover)
  • 三、Keepalived高可用故障切换转移原理
  • 四、keepalived的工作原理
    • 1、Keepalived高可用对之间是通过VRRP通信的
    • 2、Keepalived服务的工作原理
  • 五、keepalived配置文件说明
    • 1、HA Cluster 配置准备:
    • 2、keepalived的安装包及程序环境
    • 3、配置文件组成:
    • 4、配置语法
    • 5、单主配置示例
      • 5.1MASTER端配置
      • 5.2BACKUP端配置
    • 6、脚本调用
    • 7、邮件设置
    • 8、双主模型示例
    • 9、虚拟服务器
  • 六、示例
    • 6.1单主模型IPVS示例
    • 6.2双主模式的lvs集群
  • 七、keepalived调用脚本进行资源监控
      • 示例:高可用nginx服务
  • 八、同步组

在这里插入图片描述

keepalived介绍及工作原理

一、keepalived的介绍

Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。

Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual Router Redundancy Protocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。所以,Keepalived一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能。

keepalived:
    vrrp协议:Virtual Router Redundancy Protocol
术语:
  虚拟路由器:Virtual Router
  虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器
  物理路由器:
  master:主设备
  backup:备用设备
  priority:优先级
  VIP:Virtual IP
  VMAC:Virutal MAC (00-00-5e-00-01-VRID)
通告:心跳,优先级等;周期性
工作方式:抢占式,非抢占式
安全工作:
  认证:
  无认证
  简单字符认证:预共享密钥
  MD5
工作模式:
  主/备:单虚拟路径器
  主/主:主/备(虚拟路径器1),备/主(虚拟路径器2)

二、Keepalived服务的重要功能

1、管理LVS负载均衡软件

早期的LVS软件,需要通过命令行或脚本实现管理,并且没有针对LVS节点的健康检查功能。为了解决LVS的这些使用不便的问题,Keepalived就诞生了,可以说,Keepalived软件起初是专为解决LVS的问题而诞生的。因此,Keepalived和LVS的感情很深,它们的关系如同夫妻一样,可以紧密地结合,愉快地工作。Keepalived可以通过读取自身的配置文件,实现通过更底层的接口直接管理LVS的配置以及控制服务的启动、停止等功能,这使得LVS的应用更加简单方便了。

2、实现对LVS集群节点健康检查功能(healthcheck)

Keepalived可以通过在自身的keepalived.conf文件里配置LVS的节点IP和相关参数实现对LVS的直接管理;除此之外,当LVS集群中的某一个甚至是几个节点服务器同时发生故障无法提供服务时,Keepalived服务会自动将失效的节点服务器从LVS的正常转发队列中清除出去,并将请求调度到别的正常节点服务器上,从而保证最终用户的访问不受影响;当故障的节点服务器被修复以后,Keepalived服务又会自动地把它们加入到正常转发队列中,对客户提供服务。

3、作为系统网络服务的高可用功能(failover)

Keepalived可以实现任意两台主机之间,例如Master和Backup主机之间的故障转移和自动切换,这个主机可以是普通的不能停机的业务服务器,也可以是LVS负载均衡、Nginx反向代理这样的服务器。

Keepalived高可用功能实现的简单原理为,两台主机同时安装好Keepalived软件并启动服务,开始正常工作时,由角色为Master的主机获得所有资源并对用户提供服务,角色为Backup的主机作为Master主机的热备;当角色为Master的主机失效或出现故障时,角色为Backup的主机将自动接管Master主机的所有工作,包括接管VIP资源及相应资源服务;而当角色为Master的主机故障修复后,又会自动接管回它原来处理的工作,角色为Backup的主机则同时释放Master主机失效时它接管的工作,此时,两台主机将恢复到最初启动时各自的原始角色及工作状态。

三、Keepalived高可用故障切换转移原理

Keepalived高可用服务对之间的故障切换转移,是通过VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议)来实现的。

在Keepalived服务正常工作时,主Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活着,当主Master节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主Master节点的心跳了,于是调用自身的接管程序,接管主Master节点的IP资源及服务。而当主Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。

四、keepalived的工作原理

1、Keepalived高可用对之间是通过VRRP通信的

1)VRRP,全称Virtual Router Redundancy Protocol,中文名为虚拟路由冗余协议,VRRP的出现是为了解决静态路由的单点故障。

2)VRRP是通过一种竞选协议机制来将路由任务交给某台VRRP路由器的。

3)VRRP用IP多播的方式(默认多播地址(224.0.0.18))实现高可用对之间通信。

4)工作时主节点发包,备节点接包,当备节点接收不到主节点发的数据包的时候,就启动接管程序接管主节点的资源。备节点可以有多个,通过优先级竞选,但一般Keepalived系统运维工作中都是一对。

5)VRRP使用了加密协议加密数据,但Keepalived官方目前还是推荐用明文的方式配置认证类型和密码。

2、Keepalived服务的工作原理

1)Keepalived高可用对之间是通过VRRP进行通信的,VRRP是通过竞选机制来确定主备的,主的优先级高于备,因此,工作时主会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。

2)在Keepalived服务对之间,只有作为主的服务器会一直发送VRRP广播包,告诉备它还活着,此时备不会抢占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性。接管速度最快可以小于1秒。

keepalived:
  vrrp协议的软件实现,原生设计目的为了高可用ipvs服务
功能:
  1、vrrp协议完成地址流动
  2、为vip地址所在的节点生成ipvs规则(在配置文件中预先定义)
  3、为ipvs集群的各RS做健康状态检测
  4、基于脚本调用接口通过执行脚本完成脚本中定义的功能,进而影响集群事务,以此支持nginx、haproxy等服务

五、keepalived配置文件说明

1、HA Cluster 配置准备:

(1) 各节点时间必须同步:ntp, chrony``(2) 确保iptables及selinux不会成为阻碍``(3) 各节点之间可通过主机名互相通信(对KA并非必须):建议使用``/etc/hosts``文件实现``(4) 各节点之间的root用户可以基于密钥认证的``ssh``服务完成互相通信(对KA并非必须)

2、keepalived的安装包及程序环境

keepalived.x86_64 0:1.3.5-16.el7

程序环境:

主配置文件:/etc/keepalived/keepalived.conf
主程序文件:/usr/sbin/keepalived
Unit File:/usr/lib/systemd/system/keepalived.service
Unit File的环境配置文件:/etc/sysconfig/keepalived

3、配置文件组成:

TOP HIERACHY`` ``GLOBAL CONFIGURATION`` ``Global definitions``   ``Static routes``/addresses`` ``VRRPD CONFIGURATION`` ``VRRP synchronization group(s):vrrp同步组`` ``VRRP instance(s):即一个vrrp虚拟路由器``LVS CONFIGURATION`` ``Virtual server group(s)`` ``Virtual server(s):ipvs集群的vs和rs

4、配置语法

配置虚拟路由器:
vrrp_instance <STRING> {
....
}
#专用参数:
#state MASTER|BACKUP:当前节点在此虚拟路由器上的初始状态;只能有一个是MASTER,余下的都应该为BACKUP
#interface IFACE_NAME:绑定为当前虚拟路由器使用的物理接口
#virtual_router_id VRID:当前虚拟路由器惟一标识,范围是0-255
#priority 100:当前物理节点在此虚拟路由器中的优先级;范围1-254
#advert_int 1:vrrp通告的时间间隔,默认1s

authentication { #认证机制
  auth_type AH|PASS
  auth_pass <PASSWORD> 仅前8位有效
}
virtual_ipaddress { #虚拟IP
  <IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
  192.168.200.17/24 dev eth1
  192.168.200.18/24 dev eth2 label eth2:1
}
track_interface { #配置监控网络接口,一旦出现故障,则转为FAULT状态 实现地址转移
  eth0
  eth1
  …
}

#nopreempt:定义工作模式为非抢占模式
#preempt_delay 300:抢占式模式,节点上线后触发新选举操作的延迟时长,默认模式

#定义通知脚本:
#notify_master <STRING>|<QUOTED-STRING>:
#当前节点成为主节点时触发的脚本

#notify_backup <STRING>|<QUOTED-STRING>:
#当前节点转为备节点时触发的脚本

#notify_fault <STRING>|<QUOTED-STRING>:
#当前节点转为“失败”状态时触发的脚本

#notify <STRING>|<QUOTED-STRING>:
#通用格式的通知触发机制,一个脚本可完成以上三种状态的转换时的通知

5、单主配置示例

5.1MASTER端配置

! Configuration File for keepalived
global_defs {
  notification_email {
    root@localhost
  }
  notification_email_from keepalived@localhost
  smtp_server 127.0.0.1
  smtp_connect_timeout 30
  router_id node1 #主机名,在另一结点为node2
  vrrp_mcast_group4 224.0.100.100
}

vrrp_instance VI_1 {
  state MASTER #在另一个结点上为BACKUP
  interface eth0
  virtual_router_id 6 #多个节点必须相同
  priority 100 #在另一个结点上为90
  advert_int 1 #通告间隔1s
  authentication {
    auth_type PASS #预共享密钥认证
    auth_pass 571f97b2
  }
  virtual_ipaddress {
    172.18.100.66/16 dev eth0 label eth0:0
  }
  track_interface {
    eth0
  }
}

5.2BACKUP端配置

! Configuration File for keepalived
global_defs {
  notification_email {
    root@localhost
  }
  notification_email_from keepalived@localhost
  smtp_server 127.0.0.1
  smtp_connect_timeout 30
  router_id node2 #主机名,在另一结点为node1
  vrrp_mcast_group4 224.0.100.100
}

vrrp_instance VI_1 {
  state BACKUP#在另一个结点上为MASTER
  interface eth0
  virtual_router_id 6 #多个节点必须相同
  priority 90 #在另一个结点上为100
  advert_int 1 #通告间隔1s
  authentication {
    auth_type PASS #预共享密钥认证
    auth_pass 571f97b2
  }
  virtual_ipaddress {
    172.18.100.66/16 dev eth0 label eth0:0
  }
  track_interface {
    eth0
  }
}

6、脚本调用

在vrrp_instance VI_1 语句块最后面加下面行

notify_master “/etc/keepalived/notify.sh master”

notify_backup “/etc/keepalived/notify.sh backup”

notify_fault “/etc/keepalived/notify.sh fault”

master与backup配置一样

! Configuration File for keepalived
global_defs {
  notification_email {
    root@localhost
  }
  notification_email_from keepalived@localhost
  smtp_server 127.0.0.1
  smtp_connect_timeout 30
  router_id node2 #主机名,在另一结点为node1
  vrrp_mcast_group4 224.0.100.100
}

vrrp_instance VI_1 {
  state BACKUP#在另一个结点上为MASTER
  interface eth0
  virtual_router_id 6 #多个节点必须相同
  priority 90 #在另一个结点上为100
  advert_int 1 #通告间隔1s
  authentication {
    auth_type PASS #预共享密钥认证
    auth_pass 571f97b2
  }
  virtual_ipaddress {
    172.18.100.66/16 dev eth0 label eth0:0
  }
  track_interface {
    eth0
  }
  notify_master "/etc/keepalived/notify.sh master"
  notify_backup "/etc/keepalived/notify.sh backup"
  notify_fault "/etc/keepalived/notify.sh fault"
}

通知脚本

#!/bin/bash
#
contact='root@localhost'
notify() {
  mailsubject="$(hostname) to be $1, vip floating"
  mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
  echo "$mailbody" | mail -s "$mailsubject" $contact
}
case $1 in
master)
  notify master
  ;;
backup)
  notify backup
  ;;
fault)
  notify fault
  ;;
*)
  echo "Usage: $(basename $0) {master|backup|fault}"
  exit 1
  ;;
esac

7、邮件设置

配置发送邮件的邮箱设置:
vim ~/.mailrc 或 /etc/mail.rc
set from=29308620@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=29308620@qq.com
set smtp-auth-password=lzhdjmtznbftbiai
set smtp-auth=login
set ssl-verify=ignore
测试:echo test mail | mail –s test 29308620@qq.com

8、双主模型示例

node1

! Configuration File for keepalived
global_defs {
  notification_email {
    root@localhost
  }
  notification_email_from keepalived@localhost
  smtp_server 127.0.0.1
  smtp_connect_timeout 30
  router_id node1
  vrrp_mcast_group4 224.0.100.100
  }
  vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 6
    priority 100
    advert_int 1
  authentication {
    auth_type PASS
    auth_pass 571f97b2
  }
  virtual_ipaddress {
    172.16.0.10/16 dev eth0
  }
}

 vrrp_instance VI_2 {
    state BACKUP
    interface eth0
    virtual_router_id 8
    priority 98
    advert_int 1
    authentication {
      auth_type PASS
      auth_pass 578f07b2
    }
    virtual_ipaddress {
      172.16.0.11/16 dev eth0
    }
}

node2

! Configuration File for keepalived
global_defs {
  notification_email {
    root@localhost
  }
  notification_email_from keepalived@localhost
  smtp_server 127.0.0.1
  smtp_connect_timeout 30
  router_id node2
  vrrp_mcast_group4 224.0.100.100
  }
  vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 6
    priority 98
    advert_int 1
  authentication {
    auth_type PASS
    auth_pass 571f97b2
  }
  virtual_ipaddress {
    172.16.0.10/16 dev eth0
  }
}

 vrrp_instance VI_2 {
    state MASTER
    interface eth0
    virtual_router_id 8
    priority 100
    advert_int 1
    authentication {
      auth_type PASS
      auth_pass 578f07b2
    }
    virtual_ipaddress {
      172.16.0.11/16 dev eth0
    }
}

9、虚拟服务器

配置参数:
virtual_server IP port | virtual_server fwmark int
{
...
real_server {
...
}
...
}


delay_loop <INT>:检查后端服务器的时间间隔
lb_algo rr|wrr|lc|wlc|lblc|sh|dh:定义调度方法
lb_kind NAT|DR|TUN:集群的类型
persistence_timeout <INT>:持久连接时长
protocol TCP:服务协议,仅支持TCP
sorry_server <IPADDR> <PORT>:所有RS故障时,备用服务器地址
real_server <IPADDR> <PORT>
{
  weight <INT> RS权重
  notify_up <STRING>|<QUOTED-STRING> RS上线通知脚本
  notify_down <STRING>|<QUOTED-STRING> RS下线通知脚本
  HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHEC K { ... }:定义当前主机的健康状态检测方法
}

HTTP_GET|SSL_GET:应用层检测
HTTP_GET|SSL_GET {
   url {
   path <URL_PATH>:定义要监控的URL
   status_code <INT>:判断上述检测机制为健康状态的响应码
   digest <STRING>:判断为健康状态的响应的内容的校验码
   }
connect_timeout <INTEGER>:连接请求的超时时长
nb_get_retry <INT>:重试次数
delay_before_retry <INT>:重试之前的延迟时长
connect_ip <IP ADDRESS>:向当前RS哪个IP地址发起健康状态检测请求
connect_port <PORT>:向当前RS的哪个PORT发起健康状态检测请求
bindto <IP ADDRESS>:发出健康状态检测请求时使用的源地址
bind_port <PORT>:发出健康状态检测请求时使用的源端口
}

传输层检测 TCP_CHECK
TCP_CHECK {
    connect_ip <IP ADDRESS>:向当前RS的哪个IP地址发起健康状态检测请求
    connect_port <PORT>:向当前RS的哪个PORT发起健康状态检测请求
    bindto <IP ADDRESS>:发出健康状态检测请求时使用的源地址
    bind_port <PORT>:发出健康状态检测请求时使用的源端口
    connect_timeout <INTEGER>:连接请求的超时时长
}

六、示例

6.1单主模型IPVS示例

MASTER节点配置

高可用的ipvs集群示例master节点:
! Configuration File for keepalived
global_defs {
  notification_email {
    root@localhost
  }
  notification_email_from keepalived@localhost
  smtp_server 127.0.0.1
  smtp_connect_timeout 30
  router_id node1
  vrrp_mcast_group4 224.0.100.10
}

vrrp_instance VI_1 {
  state MASTER
  interface eth0
  virtual_router_id 6
  priority 100
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 571f97b2
  }
  virtual_ipaddress {
     172.16.0.10/16 dev eth0
  }
  notify_master "/etc/keepalived/notify.sh master"
  notify_backup "/etc/keepalived/notify.sh backup"
  notify_fault "/etc/keepalived/notify.sh fault"
  }
  
  virtual_server 172.16.0.10 80 {
    delay_loop 3
    lb_algo rr
    lb_kind DR
    protocol TCP
    sorry_server 127.0.0.1 80
    real_server 172.16.0.11 80 {
      weight 1
      HTTP_GET {
          url {
             path /
             status_code 200
         }
         connect_timeout 1
         nb_get_retry 3
         delay_before_retry 1
     }
    }
  
  
   real_server 172.16.0.12 80 {
      weight 1
      HTTP_GET {
         url {
            path /
            status_code 200
         }
        connect_timeout 1
        nb_get_retry 3
        delay_before_retry 1
      }
   }
}

BACKUP节点

高可用的ipvs集群示例BACKUP节点:
! Configuration File for keepalived
global_defs {
  notification_email {
    root@localhost
  }
  notification_email_from keepalived@localhost
  smtp_server 127.0.0.1
  smtp_connect_timeout 30
  router_id node2 
  vrrp_mcast_group4 224.0.100.10
}

vrrp_instance VI_1 {
  state BACKUP
  interface eth0
  virtual_router_id 6
  priority 90
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 571f97b2
  }
  virtual_ipaddress {
     172.16.0.10/16 dev eth0
  }
  notify_master "/etc/keepalived/notify.sh master"
  notify_backup "/etc/keepalived/notify.sh backup"
  notify_fault "/etc/keepalived/notify.sh fault"
  }
  
  virtual_server 172.16.0.10 80 {
    delay_loop 3
    lb_algo rr
    lb_kind DR
    protocol TCP
    sorry_server 127.0.0.1 80
    real_server 172.16.0.11 80 {
      weight 1
      HTTP_GET {
          url {
             path /
             status_code 200
         }
         connect_timeout 1
         nb_get_retry 3
         delay_before_retry 1
     }
    }
  
  
   real_server 172.16.0.12 80 {
      weight 1
      HTTP_GET {
         url {
            path /
            status_code 200
         }
        connect_timeout 1
        nb_get_retry 3
        delay_before_retry 1
      }
   }
}

6.2双主模式的lvs集群

双主模式的lvs集群,拓扑、实现过程;

配置示例(一个节点):

! Configuration File for keepalived
global_defs {
  notification_email {
  root@localhost
  }
  notification_email_from kaadmin@localhost
  smtp_server 127.0.0.1
  smtp_connect_timeout 30
  router_id node1
  vrrp_mcast_group4 224.0.100.100
}

vrrp_instance VI_1 {
  state MASTER
  interface eth0
  virtual_router_id 6
  priority 100
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass f1bf7fde
  }
  virtual_ipaddress {
    172.16.0.80/16 dev eth0 label eth0:0
  }
  
 track_interface {
    eth0
 }
 notify_master "/etc/keepalived/notify.sh master"
 notify_backup "/etc/keepalived/notify.sh backup"
 notify_fault "/etc/keepalived/notify.sh fault"
}

vrrp_instance VI_2 {
  state BACKUP
  interface eth0
  virtual_router_id 8
  priority 98
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass f2bf7ade
  }
  
virtual_ipaddress {
  172.16.0.90/16 dev eth0 label eth0:1
}
track_interface {
  eth0
}
  notify_master "/etc/keepalived/notify.sh master"
  notify_backup "/etc/keepalived/notify.sh backup"
  notify_fault "/etc/keepalived/notify.sh fault"
}

virtual_server fwmark 3 {
  delay_loop 2
  lb_algo rr
  lb_kind DR
  nat_mask 255.255.0.0
  protocol TCP
  sorry_server 127.0.0.1 80
  real_server 172.16.0.11 80 {
    weight 1
    HTTP_GET {
      url {
        path /
        status_code 200
      }
    connect_timeout 2
    nb_get_retry 3
    delay_before_retry 3
  }
}

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

七、keepalived调用脚本进行资源监控

1、keepalived调用外部的辅助脚本进行资源监控,并根据监控的结果状态能实现优先动态调整
2、vrrp_script:自定义资源监控脚本,vrrp实例根据脚本返回值,公共定义,可被多个实例调用,定义在vrrp实例之外
3、track_script:调用vrrp_script定义的脚本去监控资源,定义在实例之内,调用事先定义的vrrp_script
4、分两步:(1) 先定义一个脚本;(2) 调用此脚本
vrrp_script <SCRIPT_NAME> {
  script ""
  interval INT
  weight -INT
}
track_script {
  SCRIPT_NAME_1
  SCRIPT_NAME_2
}

示例:高可用nginx服务

! Configuration File for keepalived
global_defs {
  notification_email {
    root@localhost
  }
  notification_email_from keepalived@localhost
  smtp_server 127.0.0.1
  smtp_connect_timeout 30
  router_id node1
  vrrp_mcast_group4 224.0.100.100
}

vrrp_script chk_down {
  script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
  interval 1
  weight -20
}
vrrp_script chk_nginx {
  script “/usr/bin/killall -0 nginx "
  interval 1
  weight -20
  fall 2 #2次检测失败为失败
  rise 1 #1次检测成功为成功
}

vrrp_instance VI_1 {
  state MASTER
  interface eth0
  virtual_router_id 14
  priority 100
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 571f97b2
  }
  virtual_ipaddress {
    172.18.0.93/16 dev eth0
  }
  track_script {
    chk_down  #调用前面的vrrp_script chk_down脚本
    chk_nginx #调用前面的vrrp_script chk_nginx脚本
  }
  notify_master "/etc/keepalived/notify.sh master"
  notify_backup "/etc/keepalived/notify.sh backup"
  notify_fault "/etc/keepalived/notify.sh fault"
}

notify.sh脚本

#!/bin/bash
#
contact='root@localhost'
notify() {
  mailsubject="$(hostname) to be $1, vip floating"
  mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
  echo "$mailbody" | mail -s "$mailsubject" $contact
}
case $1 in
master)
  notify master
  ;;
backup)
  notify backup
  ;;
fault)
  notify fault
  ;;
*)
  echo "Usage: $(basename $0) {master|backup|fault}"
  exit 1
  ;;
esac

chk_nginx脚本

#!/bin/bash``killall -0 nginx > ``/dev/null``if` `[ $? -``ne` `0 ];``then``  ``systemctl stop keepalived``fi

八、同步组

LVS NAT模型VIP和DIP需要同步,需要同步组

vrrp_sync_group VG_1 {`` ``group {``  ``VI_1 ``# name of vrrp_instance (below)``  ``VI_2 ``# One for each moveable IP`` ``}``}``vrrp_instance VI_1 {`` ``eth0`` ``vip``}``vrrp_instance VI_2 {`` ``eth1`` ``dip``}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/110990.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis 集合(Sorted Set)方法使用详解

目录一、简介二、常用方法2.1、ZADD2.2、ZREM2.3、ZSCORE2.4、ZINCRBY2.5、ZCARD2.6、ZRANK、ZREVRANK2.7、ZRANGE、ZREVRANGE2.8、ZRANGEBYSCORE、ZREVRANGEBYSCORE2.9、ZCOUNT2.10、ZREMRANGEBYRANK2.11、ZREMRANGEBYSCORE2.12、ZINTERSTORE、ZUNIONSTORE2.13、ZRANGEBYLEX、…

day 9 模拟和高精度

P4924 [1007]魔法少女小Scarlet 题目描述 Scarlet 最近学会了一个数组魔法&#xff0c;她会在 nn 二维数组上将一个奇数阶方阵按照顺时针或者逆时针旋转 90∘。 首先&#xff0c;Scarlet 会把 1 到 n^2 的正整数按照从左往右&#xff0c;从上至下的顺序填入初始的二维数组中…

带您认识spreadsheet专属的数据仓库,助力报表开发好帮手

业务主题是针对业务的一个概念&#xff0c;它将同一数据源中属于同一个分析主题的表或表中的字段组合在一起&#xff0c;为进一步的可视化数据集提供基本元素。 业务主题我们看作是 Smartbi 产品中的数据仓库&#xff0c;主要应用于可视化数据集等操作。 业务主题的应用场景有如…

佳缘线上超市网站

成品详细信息 开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 基于SPRINGBOOTE的佳源线上超市管理系统的设计与实现 模块划分&#xff1a;公告类型模块、公告信息模块…

【Pycharm教程】在 PyCharm 中使用 Emacs 作为外部编辑器

Emacs是一个高级的文本编辑器&#xff0c;可以让你全面地操作你的代码。使用 Emacs 意味着可以根据您用于编码的语言进行完全可调整的编辑。 本文介绍了如何将 Emacs 添加到 PyCharm 并使用它来修改您的代码。 最新版本的 Emacs 可以从官网下载安装。 将 Emacs 配置为外部编…

介绍在全志A40i Ubuntu系统上定制文件系统的操作过程

为了给客户的测试和开发提供便利&#xff0c;飞凌嵌入式的开发板产品一般都支持多种操作系统&#xff0c;以基于全志T507H处理器设计研发的OKT507-C开发板为例&#xff0c;它支持三种操作系统&#xff0c;分别是&#xff1a;Linux、Android 和 Forlinx Desktop&#xff08;Ubun…

stm32cubemx hal学习记录:电机控制

一、基础配置 1、配置RCC、SYS&#xff0c;SYS的Timebase Source选择TIM6 2、配置USART1、时钟84MHz 3、激活FreeRTOS&#xff0c;选择CMSIS_V1&#xff0c;Config parameters种USE_TIMERS选择ENABLE 二、编码器及电机驱动引脚配置 1、选用TIM3的编码器模式 2、驱动使用L2…

以数据赋能业务,qlik为企业搭建透明绩效管理平台

自从各类金融APP出现以来&#xff0c;分支机构网络的性质已经发生了巨大的变化。下一代分支机构通常是围绕着深化客户关系的愿景建立起来的&#xff0c;这些愿景包括理财方面的建议&#xff0c;以及企业和家庭贷款等更大的承诺&#xff0c;同时提供现金和交易设施。由于分支机构…

2022-12-23 工作记录--CSS-超出多行显示省略号ios真机偶失效问题

CSS-超出多行显示省略号ios真机偶失效问题 一、前言 最近帮同事解决一个了bug&#xff1a;在ios真机上&#xff0c;超出多行显示省略号的文本内容&#xff0c;偶然会出现未显示问题。 最开始&#xff0c;我没往 超出多行显示省略号 样式方面进攻&#xff0c;还以为是react渲染…

离散数学图论的练习题详解

文章目录学习技巧图论练习学习技巧 坚持 图论练习 一颗树有2个2度结点&#xff0c;1个3度结点和3个4度结点&#xff0c;则1度结点数为&#xff08;&#xff09; 知识点&#xff1a;握手定理&#xff1a;所有节点度数之和等于边数的两倍解答&#xff1a;221334x2(213x−1)2\…

亚马逊首次亮相中性原子量子计算机Aquila

Aquila处理器内饰&#xff08;图片来源&#xff1a;网络&#xff09; 亚马逊网络服务&#xff08;AWS&#xff09;将在其名为Amazon Braket的特殊云服务器中托管量子计算机Aquila。这是量子计算第一次可以直接从AWS云端访问中性原子量子处理器。 而提供这台量子计算机的公司是Q…

数字化时代,看商业智能BI与业务发展分析

每一家企业我们都可以从模式、问题和求解这三个角度对企业的业务经营管理进行探讨&#xff0c;比如模式&#xff0c;公司目前的管理模式和运营模式效果如何&#xff0c;是否符合公司长期战略目标或中短期业绩增长目标&#xff1f; 数据分析 - 派可数据商业智能BI可视化分析平台…

12项数据安全国标全文来了

二十大报告是新时代党和国家事业发展的理论指南和行动纲领&#xff0c;报告强调&#xff0c;“强化经济、重大基础设施、金融、网络、数据、生物、资源、核、太空、海洋等安全保障体系建设”、“加强个人信息保护”等。“数据安全”与“个人信息保护”被提到前所未有的高度&…

说话人识别的数据需求

概述 机器学习领域名言“Garbage In, Garbage Out!”不论神经网络多么先进&#xff0c;如果输入是垃圾&#xff0c;那么输出也一定是垃圾在说话人识别领域&#xff0c;所需的最小数据单元&#xff0c;包括&#xff1a; 一段只包含单一说话人语音的音频&#xff0c;被称为Utter…

RocketMQ

q RocketMQ 1. RocketMQ简介 官网&#xff1a; http://rocketmq.apache.org/ RocketMQ是阿里巴巴2016年MQ中间件&#xff0c;使用Java语言开发&#xff0c;RocketMQ 是一款开源的分布式消息系统 &#xff0c;基于高可用分布式集群技术&#xff0c;提供低延时的、高可靠的消息…

如何通过链路追踪进行定时任务诊

背景简介 什么是定时任务 定时任务是业务应用系统中存在定时周期性运行的业务逻辑。由于其运行于后端进程中往往存在执行状态和执行链路的不可见性《常见定时任务技术方案》。 什么是链路追踪 随着分布式微服务化架构在企业中大规模运用&#xff0c;业务运行的应用平台是一…

基于GINA/凭证提供程序的自助密码管理

大多数组织依赖于密码自助管理工具来跟踪用户的密码相关日常 事务。但是&#xff0c;另一方面&#xff0c;大多数自助解决方案只能从web浏览器进行访问。因此&#xff0c;已锁定的用户被迫从同事的工作站或用web浏览器从自助服务终端重置其密码。这与自助密码管理的意图背道而驰…

两级电力市场环境下计及风险的省间交易商最优购电模型(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【小程序】声明式和编程式导航传参

目录 声明式导航 1. 导航到 tabBar 页面 2. 导航到非 tabBar 页面 3. 后退导航 编程式导航 1. 导航到 tabBar 页面 ​编辑 2. 导航到非 tabBar 页面 3. 后退导航 ​编辑 导航传参 1. 声明式导航传参 2. 编程式导航传参 ​编辑 3. 在 onLoad 中接收导航参数 声明式…

pandas对于文件数据基本操作,数据处理常用

基本操作 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple &#xff08;安装包&#xff09; 清华安装 例如 pip3 install --index-url https://pypi.douban.com/simple pandas国内的其他镜像源 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/ 阿里云 http://m…