昔我往矣

keepalived的简单配置

2015年12月22日

Keepalived是一款流行的高可用软件,通过为keepalived集群设置虚IP和健康检测脚本,当检查失败的时候,根据keepalived的策略使虚IP在服务器之间漂移。由于虚IP漂移过程中可能有交换机arp缓存导致请求失效,所以在切换到master之后,应立刻自动执行脚本刷新交换机的缓存。

安装和配置过程

首先在主备两台服务器上安装keepalived,然后设置健康检查脚本,修改配置文件,最后做故障切换测试。

安装keepalived

解决keepalived安装过程的依赖

yum -y install popt-devel sendmail
/etc/init.d/sendmail start
chkconfig sendmail on

下载安装keepalived

cd /data/install/
wget http://www.keepalived.org/software/keepalived-1.2.19.tar.gz
tar xvf keepalived-1.2.19.tar.gz
cd keepalived-1.2.19
./configure --prefix=/data/program/keepalived
make -j 4 && make install && echo ok

# 系统环境
cp /data/program/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /data/program/keepalived/sbin/keepalived /usr/sbin/
cp /data/program/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived
chkconfig keepalived on

健康检查脚本范例

自此,服务器环境准备完成,然后编辑健康检查脚本,这里以tomcat http服务为例,脚本文件如下/etc/keepalived/check_tomcat.sh:

#!/bin/bash

service=localhost:8080
count=0

for (( k=0; k<2; k++ ))
do
    check_code=$(curl --connect-timeout 2 -sL -w "%{http_code}\\n" $service  -o /dev/null)
    if [[ $check_code -ne 200 ]]; then
        let count=$count+1
        continue
    else
        count=0
        break
    fi
done

if [ $count -ne 0 ]; then
    exit 1
else
    exit 0
fi

然后还必须给该脚本可执行权限

chmod +x /etc/keepalived/check_tomcat.sh

脚本的作用是检查本机的8080端口,如果返回码是200就认为健康,然后退出。如果连续两次检查都不是200,则脚本返回1。刷新交换机缓存的脚本如下/etc/keepalived/fresh_arp.sh:

#!/bin/bash

VIP=192.168.1.1
GATEWAY=192.168.1.254
/sbin/arping -I eth0 -c 3 -s $VIP $GATEWAY &> /dev/null

这里的VIP是192.168.1.1,也就是在主备两台服务器上漂移的虚拟IP地址,发生漂移之后,要使用arping命令到交换机上刷新mac地址表缓存。

编辑配置文件

编辑keepalived的配置文件/etc/keepalived/keepalived.conf,内容如下:

global_defs {
   notification_email {
    admin@xnow.me
   }
   notification_email_from root@localhost
   smtp_server localhost
   smtp_connect_timeout 30
   router_id keepalived1.xnow.me
}
vrrp_script chk_tomcat {
    script "/etc/keepalived/check_tomcat.sh"
    interval 2
    weight -5
    fall 3  
    rise 2
}
vrrp_instance tomcat_cluster {
    state MASTER
    interface eth0
    mcast_src_ip 192.168.1.10
    virtual_router_id 51
    priority 101
    #nopreempt
    advert_int 1
    smtp_alert

    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.1.1/24
    }
    track_script {
       chk_tomcat
    }
    notify_master "/etc/keepalived/fresh_arp.sh"
}
  • global_defs 里面定义了全局的配置,MASTER和BACKUP的配置可以完全一样,也可以完全不一样或部分一样。

    • 发送邮件的信息,notification_email定义把邮件发给谁
    • notification_email_from 指定发送邮件的来源地址
    • smtp_server 定义smtp服务器地址,这里指定为localhost,所以本地需要开启一个sendmail或者postfix来发送邮件
    • smtp_connect_timeout 是发送邮件的超时信息
    • router_id 本节点的标示,通常为hostname(可以不是),通知邮件里会用到。
  • vrrp_script 中定义脚本执行的行为,chk_tomcat是本实例的名字

    • script 指定脚本路径
    • interval 指定脚本检查频率
    • weight 如果检查失败,该节点的权重-5
    • fall 如果连续3次检查失败,认为节点服务不可用
    • rise 如果连续2次检查成功则认为节点正常
  • vrrp_instance 定义对外提供服务的VIP区域及其相关属性

    • state state 可以是MASTER或BACKUP,但集群启动时会将priority比较大的节点选举为MASTER。
    • interface 节点固有IP(非VIP)的网卡,用来发VRRP包
    • mcast_src_ip 修改vrrp组播包的源地址,默认源地址为master的IP。
    • virtual_router_id 取值0-255之间,区分多个instance的VRRP组播,同instance该值相同
    • priority 优先级,数字越大,优先级越高
    • nopreempt 使用非抢占模式,这样,只要 Master 没坏,即使 Backup 的优先级更高,也不会触发选举。比如Master挂了,ip漂移到Backup机子上后,原Master恢复,ip不会漂移回原Master机子。因为切换中有丢包,如果Backup机子可以稳定工作就避免频繁切换。
    • advert_int 发VRRP包的时间间隔,即多久进行一次master选举
    • smtp_alert 启用邮箱发送切换报警
  • authentication 定义节点间的认证,MASTER和BACKUP的这部分配置必须一致

    • auth_type 认证方式
    • auth_pass 认证密码
  • virtual_ipaddress 虚拟IP
  • track_script 指定前面脚本模块里面定义的名字
  • notify_master 当keepalived检查到本节点是master的时候,执行脚本。类似功能的配置项还有notify_backup。

tips

BACKUP的配置和MASTER大致相同,修改如下几项即可:

  • router_id 建议设置为主机名,发送报警邮件的时候方便排查问题。
  • state 备机的state设置为BACKUP
  • mcast_src_ip 本机发送vrrp的地址,不能是vip
  • priority 优先级,BACKUP的优先级应该比MASTER低

测试

根据以上配置keepalived会每2秒钟检查一次本机的8080端口,如果要配置其它服务,可以修改该脚本,或者不使用脚本完成其它服务的健康检查。
测试的时候,通过关闭MASTER上的tomcat,优先级-5,MASTER的priority变成96,虚IP会切换到BACKUP上去。
同时,配置的admin@xnow.me邮箱会收到报警邮件。

当前暂无评论 »

添加新评论 »