Keepalived 原理与实战

2022-03-23  本文已影响0人  宏势

简介

Keepalived 是一个用 C 语言编写的路由软件。基于linux的基础架构提供简单而强大的负载平衡和高可用性设施。

安装

yum install keepalived -y
#如果需要负载均衡,安装ipvs,ipvs是linux lvs的实现模块,ipvsadm是管理工具
yum install ipvsadm -y

配置文件

vim /etc/keepalived/keepalived.conf #默认配置文件

场景应用

典型的高可用场景是keepalived+vip,vip作为对外服务的ip,当vip所在服务器出现故障时(keepalived停止),vip会自动漂移到备服务器,从而保证服务的高可用,常用有 Nginx+keepalived 双机主从模式, Nginx+keepalived 双机主主模式,Mysql+Keepalived 双击主从模式等,负载均衡方案采用LVS目前比较少,大部分都是采用nginx或者HAProxy,所以LVS配置就不往下说了

HA模式

Keepalived 模式分为非抢占模式和抢占模式

非抢占模式(推荐)

两台都是BACKUP,master从故障恢复后变成backup

初始化启动,优先启动主节点(优先级比较高的),确保vip绑定到高优先级的节点,推荐使用非抢占模式,防止故障恢复,vip出现漂移

抢占模式

MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来

设定keepalived的master和backup值主要是在priority(优先级)相同的前提下才有意义,如果优先级不同的话,不管其设定了master还是backup,最终vip漂移的位置都是优先级比较高的机器,因此我们两个节点最好指定不同的优先级

Nginx+keepalived 双机主从模式

主机器172.31.22.30 配置如下:

# 全局定义
global_defs {
   router_id vip_nginx #名称
}
 
vrrp_script nginx_check#自定义脚本进行业务监控
{
    script "/usr/local/bin/nginx_check.sh"  #探测脚本,如果当前机器是主,并且脚本执行失败(成功退出状态码为0,失败为非0),则转化为备,集群重新选主
    interval 5 #指定脚本执行的间隔,默认为1s
    fall 3 #失败多少次才认为失败
    rise 2 #成功多少次才认为是成功
}
 
vrrp_instance VI_51 #监控一个对象(比如nginx)需要定义一个虚拟路由,保持唯一
{
    state BACKUP  #当前节点在此虚拟路由器上的初始状态(MASTER|BACKUP);
    nopreempt #定义工作模式为非抢占模式;
    interface eth0 #绑定网卡;
    virtual_router_id 51 #当前虚拟路由器的惟一标识,范围是0-255;
    priority 100 #当前主机在此虚拟路径器中的优先级;范围1-254;
    advert_int 1  #MASTER与BACKUP节点间同步检查的时间间隔,单位为秒;
    authentication { #安全认证,同一vrrp_instance使用相同的密码才能正常通信;
        auth_type PASS #类型主要有 PASS、AH 两种,通常使用PASS类型;
        auth_pass 1024
    }
    track_script { #引用上面定义名称叫other_check的vrrp脚本,进行主备切换
        nginx_check
    }
    virtual_ipaddress { #虚拟IP地址池,可以有多个IP,每个IP占一行
        172.31.0.100
    }
    #以下脚本可以作为后置动作
    notify_master /usr/local/bin/nginx_master.sh #当前节点成为主节点时触发的脚本
    notify_backup /usr/local/bin/nginx_backup.sh #当前节点转为备节点时触发的脚本
    notify_fault  /usr/local/bin/nginx_fault.sh #当前节点转为fault状态时触发的脚本
    notify_stop   /usr/local/bin/nginx_stop.sh  #当前节点转为stop状态时触发的脚本
}

vim nginx_check.sh

#!/bin/bash
ALIVE=`ps -ef | grep "nginx: master process"| grep -v grep`
if [ "$ALIVE" == "" ]; then
    exit 1
else
    exit 0
fi

备机器172.31.22.31 配置如下:

#一样配置,只需修改优先级
priority 50

Nginx+Keepalived 双机主主模式

只需要增加一个vip 172.31.0.101,172.31.22.30绑定vip(172.31.0.100),172.31.22.31绑定vip(172.31.0.101)

备机器172.31.22.31 增加配置如下

vrrp_instance VI_52 #监控一个对象(比如nginx)需要定义一个虚拟路由,保持唯一
{
    state BACKUP  #当前节点在此虚拟路由器上的初始状态(MASTER|BACKUP);
    nopreempt #定义工作模式为非抢占模式;
    interface eth0 #绑定网卡;
    virtual_router_id 52 #当前虚拟路由器的惟一标识,范围是0-255;
    priority 150 #当前主机在此虚拟路径器中的优先级;范围1-254;
    advert_int 1  #MASTER与BACKUP节点间同步检查的时间间隔,单位为秒;
    authentication { #安全认证,同一vrrp_instance使用相同的密码才能正常通信;
        auth_type PASS #类型主要有 PASS、AH 两种,通常使用PASS类型;
        auth_pass 1024
    }
    track_script { #引用上面定义名称叫other_check的vrrp脚本,进行主备切换
        nginx_check
    }
    virtual_ipaddress { #虚拟IP地址池,可以有多个IP,每个IP占一行
        172.31.0.101
    }
    #以下脚本可以作为后置动作
    notify_master /usr/local/bin/nginx_master.sh #当前节点成为主节点时触发的脚本
    notify_backup /usr/local/bin/nginx_backup.sh #当前节点转为备节点时触发的脚本
    notify_fault  /usr/local/bin/nginx_fault.sh #当前节点转为fault状态时触发的脚本
    notify_stop   /usr/local/bin/nginx_stop.sh  #当前节点转为stop状态时触发的脚本
}

主机器172.31.22.30 增加配置如下

#增加和上面一样配置,只需修改优先级
priority 50

Mysql+Keepalived 双击主从模式

配置与Nginx+keepalived 双机主从模式相似(略)

上一篇下一篇

猜你喜欢

热点阅读