Keepalived 安装与配置

原文大部分内容摘自 https://blog.csdn.net/yinwenjie/article/details/47130609

本文简单记录 Keepalived 软件的安装配置操作.

准备两台服务器,分别安装好 nginx web 服务器.

再分别独立安装Keepalived系统
我们的目标是“在一台工作的Nginx崩溃的情况下,系统能够检测到,并自动将请求切换到另外一台备份的Nginx服务器上”。所以,之前安装的两台Nginx,一台是Master服务器是主要的工作服务器,另一台是备份服务器,在Master服务器出现问题后,由后者接替其工作。如下图所示(外网的请求使用一个由keepalived控制的虚拟的浮动IP进行访问):

使用yum 安装好 keepalived.
下面的脚本代码为检测 nginx 服务器是否正常运行,如果没有运行则尝试启动 nginx,休眠2s后再次检测nginx运行状态,如果为运行,则退出此主机上的 keepalived,由其他 keepalived 接管.

#!/bin/sh
if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then
    systecmctl start nginx
fi

sleep 2
if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then
    systecmctl stop keepalived
fi

keepalived 配置

! Configuration File for keepalived
# global setting , notify email setting
global_defs {
   #节点id,每个节点都不同
   router_id LVS_V1
}

#检测 nginx 运行状态的脚本
vrrp_script chknginx {
    script "/opt/checknginx.sh"
    interval 10
}

# instance setting
vrrp_instance VI_1 {
    # 节点角色,MASTER(一个) 和 BACKUP(多个),按角色选中填写
    state BACKUP
    interface eth1
    # 这里一定是一样的
    virtual_router_id 52
    # 这里的优先级比Master节点低
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }

# 虚拟ip,对外提供,客户端访问此ip即为访问 keepalived 中MASTER 所在主机
    virtual_ipaddress {
        192.168.1.100
    }

    track_script {
        chknginx
    }
}

Keepalived 非抢占模式

keepalived的切换可以是自动的,但是却做不到毫秒级别,他怎么都需要几秒钟的时间进行切换
这就有一个问题,虽然在主节点出现问题我们转向备份节点时,这个延时无可避免,但是在我们修复主节点后,实际上并没有必要再马上做一次切换,所以Keepalived提供了一种非抢占模式,来满足这个要求
此模式下keepalived 的配置

! Configuration File for keepalived
# global setting , notify email setting
global_defs {
   router_id LVS_V1
}

vrrp_script chknginx {
    script "/opt/checknginx.sh"
    interval 10
    # 一旦节点失效,节点的优先级就减少2
    # 有多少个keepalived节点,就填写多少数量。
    # 这样保证这个节点的优先级比其他节点都低
    weight -2
    # fall 表示多少次检查失败,就算节点失效。默认1
    #fall 1
}

vrrp_instance VI_1 {
    #state状态都是BACKUP表示是主要工作节点。
    state BACKUP
    interface eth1
    virtual_router_id 52
    # 这个关键配置项,设置为“非抢占”模式
    nopreempt
    # 每个节点的优先级一定要不一样
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    #虚拟地址和绑定的端口,如果有多个,就绑定多个
    #dev 是指定浮动IP要绑定的网卡设备号
    virtual_ipaddress {
        192.168.61.100
    }

    #设置的检查脚本
    #关联上方的“vrrp_script chknginx”
    track_script {
        chknginx
    }
}
posted @ 2019-09-20 15:38  shangsharon  阅读(1330)  评论(0编辑  收藏  举报