keepalived

收藏

官网:https://keepalived.org/

下载安装

1.官网下载

2.进入解压后的目录,编译安装

shell
# *** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS. ------- 安装前两个解决这个警告
# configure: error: libnfnetlink headers missing ---------- 安装最后那个解决这个错误
yum install -y libnl libnl-devel libnfnetlink-devel

./configure --prefix=/usr/local/keepalived
make && make install

########或者也可以
yum install -y keepalived
 

 配置

 全局配置(global_defs)

global_defs {
    # 通知邮件,当keepalived发送切换时需要发email给具体的邮箱地址
    nitification_email {
        tom@abc.com
        jerry@abc.com
    }
    # 设置发件人的邮箱信息
    notification_email_from zhangsan@abc.com
    # 指定smtp服务地址
    smtp_server 192.168.200.1
    # 指定smtp服务连接超时时间
    smtp_connect_timeout 30
    
    # 运行keepalived服务器的一个标识,可以用作发送邮件的主题信息
    router_id keepalived1

    # 默认是不跳过检查,检查收到的VRRP通告中的所有地址可能会比较耗时,设置此命令的意思是
    # 如果通告与接收的上一个通告来自相同的master路由器,则不执行检查(跳过检查)
    vrrp_skip_check_adv_addr
    # 严格遵守VRRP协议
    vrrp_strict
    # 在一个接口发送的两个免费ARP之间的延迟。可以精确到毫秒级,默认是0
    vrrp_garp_interval 0
    # 设置非请求消息的发送延迟时间,默认为0
    vrrp_gna_interval 0
}

 高可用配置(vrrp_instance)


# 脚本名称与下面track_script需要对应上
vrrp_script ck_nginx
{
    # 指定脚本绝对路径
    script "脚本位置"
    
    # 执行的时间间隔
    interval 3
    
    # 动态调整vrrp_instance的优先级
    # weight为正数时,执行结果为真,优先级提升;执行结果为假,优先级保持不变;
    # weight为负数时,执行结果为真,优先级不变;执行结果为假,优先级会提升。
    weight -20 
}

vrrp_instance VI_1 {
    # 设置此虚拟路由器的初始状态,可选择MASTER或者BACKUP
    state MASTER
    
    # 绑定当前虚拟路由器所使用的物理接口,如eth0、lo等
    interface eth0
    # 指定一个或多个网络接口,并监控这些接口的状态,不监控网络接口不需要配置
    #track_interface {
    #    eth0
    #}
    # 区别:
    # interface参数指定了VRRP实例所使用的网络接口,以便VRRP实例可以在这些接口上运行。
    # track_interface用于指定VRRP实例所监控的网络接口,如果指定的接口状态发生变化(如接口故障或断开连接),VRRP实例将自动切换到备用状态。
    
    virtual_router_id 51
    
    # 取值范围是0~255,默认是100,值越高优先级越高
    priority 100
    
    # 设置VRRP通告的时间间隔,即心跳间隔,用于设定MASTER与BACKUP主机之间同步检查的时间间隔,单位是秒。默认为1秒
    advert_int 1
    
    # 非抢占模式,默认抢占模式
    # keepalived的主备切换有两种模式:抢占式和非抢占式
    # 抢占式:一种动态的调度策略,当主节点出现故障时,备份节点会抢占成为新的主节点。在抢占模式下,主节点和备份节点之间会进行竞争,优先级高的节点会成为新的主节点。这种调度策略适用于需要快速恢复服务的情况,可以减少故障时间
    # 非抢占式:一种静态的调度策略,主节点和备份节点之间不会进行竞争。在非抢占模式下,不会轻易发生IP漂移。这种调度策略适用于需要保证服务稳定性的情况,可以避免由于竞争导致的网络不稳定。之所以说不会轻易发生IP漂移是只有当keepalived发生故障的时候(当前节点不可用)其他节点才会出来干活
    # nopreempt
    
    # 主备切换时间(skew_time),计算方式为:(256-Backup设备的优先级)/256,单位为秒。
    # 抢占时间:preempt_delay = (advert_int * 3) + (priority - 100) * 2,,其中,preempt_delay表示抢占时间,单位为秒;advert_int表示keepalived发送心跳包的时间间隔,单位为秒;priority表示节点的优先级,取值范围为1-255,值越大表示优先级越高。根据公式可以看出,抢占时间与心跳包发送间隔和节点优先级有关。心跳包发送间隔越短,抢占时间越短;节点优先级越高,抢占时间越短。
    
    authentication {
        # 认证类型
        auth_type PASS
        # 验证密码,主备服务器保持一致
        auth_pass 1111
    }
    
    virtual_ipaddress {
        192.168.200.222
    }
    
    track_script {
        ck_nginx
    }
    
    # 当切换到master时,执行的脚本
    notify_master /opt/keepalived/etc/script/notify_fifo.sh
    # 当切换到backup时,执行的脚本
    notify_backup /opt/keepalived/etc/script/notify_fifo.sh
    # 故障时执行的脚本
    notify_fault /opt/keepalived/etc/script/notify_fifo.sh
    # 通知
    notify /opt/keepalived/etc/script/notify_fifo.sh
    # 使用global_defs中提供的邮件地址和smtp服务器发送邮件通知 
    smtp_alert
}
 

服务检查脚本,参考一:

#!/bin/bash
num=`ps -C nginx --no-header | wc -l`
if [ $num -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
        killall keepalived
    fi
fi

服务检查脚本,参考二:

#!/bin/sh
check_command=`pidof nginx 2> /dev/null`
if [ -z "$check_command" ] ; then
    exit 2
fi
exit 0

 服务检查脚本,参考三:

#!/bin/bash
logfile=/lb/keepalived_log/keepalived.log

if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]
    then
    echo "`date '+%F %H:%M:%S'` `hostname`:nginx's master proccess is not exist,starting nginx.service">>$logfile
    #/usr/local/nginx/sbin/nginx
    systemctl start nginx.service
    echo "wait for 3 second...">>$logfile
    sleep 3
    if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]
        then
            echo "`date '+%F %H:%M:%S'` `hostname`:nginx's master process is failed to start,now kill keepalived process to initiate vrrp transition">>$logfile
            ps -aux | grep keepalived | grep -v grep | awk '{print $2}' | xargs kill -9
        else
            echo "`date '+%F %H:%M:%S'` `hostname`:nginx started successfully.">>$logfile
    fi
fi

负载均衡(lvs--virtual_server)

virtual_server 192.168.50.23 80 {
    # 健康检查的间隔时间(秒)
    delay_loop 6
    
    #指定调度算法,轮询(rr)
    lb_algo rr
    
    # 指定群集工作模式,直接路由(DR)
    # DR:直连,NAT:地址转换,TUN:隧道模式
    lb_kind DR
    
    # 连接保持时间(秒)
    persistence_timeout 0
    
    # 应用服务采用的是 TCP协议
    protocol TCP 

    # 指定第一个Web节点的地址、端口
    real_server 192.168.50.56 80 {
        # 节点的权重
        weight 1
        
        # 健康检查方式        
        TCP_CHECK {
            # 添加检查的目标端口
            connect_port 80
            # 添加连接超时(秒)
            connect_timeout 3
            # 添加重试次数
            nb_get_retry 3
            # 添加重试间隔
            delay_before_retry 3
        }
    }

    real_server 192.168.50.57 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值