高可用 - 06 Keepalived基础功能应用实例

Posted 小小工匠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高可用 - 06 Keepalived基础功能应用实例相关的知识,希望对你有一定的参考价值。

文章目录


概述

作为一个高可用集群软件,Keepalived提供了vrrp_script、notify_master、notify_backup等多个功能模块,通过这些模块也可以实现对集群资源的托管以及集群服务的监控。

Keepalived基础HA功能演示

在默认情况下,Keepalived可以实现对系统死机、网络异常及Keepalived本身进行监控。也就是说,当系统出现死机、网络出现故障或Keepalived进程异常时,Keepalived会进行主备节点的切换。

但这些还是不够的,因为集群中运行的服务也随时可能出现问题,所以,还需要对集群中运行服务的状态进行监控,当服务出现问题时也进行主备切换。作为一个优秀的高可用集群软件,Keepalived提供了一个vrrp_script模块专门用来对集群中服务资源进行监控。


配置Keepalived

这里我们要部署一套基于HTTPD的高可用集群系统。


keepalived-master节点的keepalived.conf文件

# 全局配置
global_defs 
  # 邮件通知信息
  notification_email 
   acassen@firewall.loc
   failover@firewall.loc
   sysadmin@firewall.loc
  
  # 定义发件人
  notification_email_from Alexandre.Cassen@firewall.loc
  # SMTP服务器地址
  smtp_server 192.168.200.1
  smtp_connect_timeout 30
  # 路由器标识,一般不用改,也可以写成每个主机自己的主机名
  router_id LVS_DEVEL
  # VRRP的ipv4和ipv6的广播地址,配置了VIP的网卡向这个地址广播来宣告自己的配置信息,下面是默认值
   vrrp_mcast_group4 224.0.0.18
   vrrp_mcast_group6 ff02::12


# 定义用于实例执行的脚本内容,比如可以在线降低优先级,用于强制切换  名称自定义
vrrp_script check_httpd 
  script "killall -0 httpd"
  interval 2
  

# 一个vrrp_instance就是定义一个虚拟路由器的,实例名称
vrrp_instance HA_1 
   # 定义初始状态,可以是MASTER或者BACKUP
  state MASTER
  # 工作接口,通告选举使用哪个接口进行
  interface eth0
  # 虚拟路由ID,如果是一组虚拟路由就定义一个ID,如果是多组就要定义多个,而且这个虚拟
    # ID还是虚拟MAC最后一段地址的信息,取值范围0-255
  virtual_router_id 80
  # 使用哪个虚拟MAC地址
    use_vmac XX:XX:XX:XX:XX
    # 监控本机上的哪个网卡,网卡一旦故障则需要把VIP转移出去
    track_interface 
        eth0
        ens33
    
   # 如果你上面定义了MASTER,这里的优先级就需要定义的比其他的高
  priority 100
  # 通告频率,单位为秒
  advert_int 2
  # 通信认证机制,这里是明文认证还有一种是加密认证
  authentication 
    auth_type PASS
    auth_pass qwaszx
  

	# 设置虚拟VIP地址,一般就设置一个,在LVS中这个就是为LVS主机设置VIP的,这样你就不用自己手动设置了
	virtual_ipaddress 
		# IP/掩码 dev 配置在哪个网卡
        192.168.66.80/24 dev eth0 
  

	# 工作模式,nopreempt表示工作在非抢占模式,默认是抢占模式 preempt
    nopreempt|preempt
    # 如果是抢占默认则可以设置等多久再抢占,默认5分钟
    preempt delay 300
    # 追踪脚本,通常用于去执行上面的vrrp_script定义的脚本内容
  track_script 
 	 check_httpd
  


	# 三个指令,如果主机状态变成Master|Backup|Fault之后会去执行的通知脚本,脚本要自己写
  notify_master "/etc/keepalived/master.sh "
  notify_backup "/etc/keepalived/backup.sh"
  notify_fault "/etc/keepalived/fault.sh"

  


其中,master.sh文件的内容如下。

#!/bin/bash
LOGFILE=/var/log/keepalived-mysql-state.log
echo "[Master]" >> $LOGFILE
date >> $LOGFILE

backup.sh文件的内容如下。

#!/bin/bash
LOGFILE=/var/log/keepalived-mysql-state.log
echo "[Backup]" >> $LOGFILE
date >> $LOGFILE

fault.sh文件的内容如下。

#!/bin/bash
LOGFILE=/var/log/keepalived-mysql-state.log
echo "[Fault]" >> $LOGFILE
date >> $LOGFILE

这三个脚本的作用是监控Keepalived角色的切换过程,进一步理解notify参数的执行过程。


keepalived-backup节点的keepalived.conf文件

keepalived-backup节点上的keepalived.conf配置文件内容与keepalived-master节点上的基本相同,需要修改的地方有两个。

  • 将“state MASTER”更改为“state BACKUP”。
  • priority 100更改为一个较小的值,这里改为“priority 80”。

Keepalived启动过程分析

将配置好的keepalived.conf文件及master.sh、backup.sh、fault.sh三个文件一起复制到keepalived-backup备用节点对应的路径下,然后在两个节点启动http服务,最后启动Keepalived服务。

首先在keepalived-master节点启动keepalived服务,执行如下操作。

[root@keepalived-master keepalived]# chkconfig --level 35 httpd on
[root@keepalived-master keepalived]# /etc/init.d/httpd start
[root@keepalived-master keepalived]# /etc/init.d/keepalived start

Keepalived正常运行后共启动了3个进程,其中一个进程是父进程,它负责监控其余两个子进程(分别是vrrp子进程和healthcheckers子进程)。然后观察keepalived-master上Keepalived的运行日志


【keepalived-master上Keepalived的启动日志】

以上是关于高可用 - 06 Keepalived基础功能应用实例的主要内容,如果未能解决你的问题,请参考以下文章

高可用keepalived基础

Nginx+Keepalived高可用集群应用实践

高可用 - 07 Keepalived 通过 vrrp_script实现对集群资源的监控的几种方式

HaProxy + Keepalived 实现高可用负载均衡

LVS+Keepalived高可用集群(CentOS7)

keepalived高可用方案