keepalived高可用

一、简介

是实现主备切换的一种方式。主机发生故障,自动切换到备机。

vip:虚拟ip。例如主机ip是192.168.1.18,备机是192.168.1.9,keepalived提供一个虚拟ip为vip

二、工作模式

抢占模式:默认。当主节点恢复后主动将vip再次抢回来,按优先级来判断
非抢占模式:不抢回来。按是否是故障来判断切换,不是按优先级

三、配置介绍

配置文件默认位置:/etc/keepalived/keepalived.conf

日志文件默认位置:/var/log/messages

检测脚本位置:/tools/nginx_check.sh

网卡位置:/etc/sysconfig/network-scripts/ifcfg-ens33

#周期识别集群服务是否正常,如果返回状态码是0,那么就认为服务正常,反之亦然
vrrp_script nginx_check {         #nginx_check名字随便取,一般跟脚本名字一致
  script"/tools/nginx_check.sh"   #检测脚本
  script_user root
  #enable_script_security
  interval 60                      #检测周期60s
  fall 2                           #2次失败算失败
  rise 1                           #1次成功算成功
}
vrrp_instance VI_1 {
  state MASTER                     #角色,MASTER表示主服务器,BACKUP表示备服务器
  interface ens33                  #网卡
  virtual_router_id 52             #虚拟路由标识,master和backup必须一致
  priority 100                     #节点优先级,master必须比backup大
  advert_int 1
  nopreempt                        #设置为非抢占模式,同一实例下主备设置必须一样
  authentication {
    auth_type PASS
    auth_pass 1111                 #设置密钥
  }
  virtual_ipaddress {
    192.168.149.100                #设置虚拟IP地址
  }
  track_script {                   #调用vrrp_script定义的脚本
    nginx_check
  }
  notify_master /tools/master.sh      #keepalived切换到master时执行的脚本  
  notify_backup /tools/backup.sh      #keepalived切换到backup时执行的脚本 
  notify_fault /tools/fault.sh        #keepalived出现故障时执行的脚本
  notify_stop /tools/stop.sh          #keepalived停止运行前执行的脚本
}
       

一些命令:

systemctl restart keepalived
systemctl start keepalived
systemctl stop  keepalived

四、缺陷

1、即使没有配置文件,Keepalived 也照样能够启动,所以一定要保证配置文件正确。

2、脑裂

五、坑

1、记得关闭selinux

vi /etc/selinux/config
将SELINUX=enforcing改为SELINUX=disabled,然后保存退出,reboot

看状态:sestatus

2、记得关闭防火墙

systemctl disable firewalld
systemctl stop firewalld

3、记得设置检测脚本、父路径的权限为 744或者755,不能是777

4、非抢占模式必须主机和备机的state配置必须相同,都设置成BACKUP

state BACKUP
nopreempt

5、关于抢占和非抢占的理解

非抢占模式:不需要权重变更,因为不是按权重来的,是按是否是故障来的
基于优先级的主备切换是在抢占模式下才有效的,非抢占模式优先级低是不会切换的
fall 2表示脚本检测失败两次就置当前主机为故障状态,如果主节点故障,就会发生切换。
rise 1表示脚本检测成功一次就置当前主机为正常状态。


抢占模式:按权重来切换,所以需要配置权重变更

weight  -10

6、keepalived停了但是虚拟ip还在:手动停

# 释放虚拟IP地址
ip addr del 192.168.92.153/24 dev ens192
ip addr show dev ens192

使用ip命令刷新ARP缓存:
sudo ip neigh flush all

六、实战

希望达到的效果:

1、在主机停掉nginx,主备能实现切换
2、但主机的keepalived不停
3、其他很多教程检测nginx挂了,停掉keepalived来实现切换的,我这里想自动切换,我不服

主机配置:
 

global_defs {
    router_id LVS_DEVEL
    script_user root
}

vrrp_script nginx_check {
  script "/tools/nginx_check.sh"
  interval 30
  fall 2
  rise 1
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.100
    }
    track_script {
        nginx_check
    }
}

备机配置:

global_defs {
    router_id LVS_DEVEL
    script_user root
}

vrrp_script nginx_check {
  script "/tools/nginx_check.sh"
  interval 30
  fall 2
  rise 1
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 95
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.100
    }
    track_script {
        nginx_check
    }
}

nginx检测脚本:

#!/bin/bash

counter=$(ps -C nginx |grep -v PID |wc -l)
if [ $counter -gt 0 ];then
    # 0代表正常
    exit 0
else
    exit 1
fi

在主机停掉nginx 

vip成功漂移至备机

七、抢占模式的试验

notify_master 和 notify_backup执行时机
 
// 前提:a的优先级高,b的优先级低

a启动主机
    2023-07-14 06:04:46 INFO backup1          // 开始时备机         配置文件指定的
    2023-07-14 06:04:51 INFO master1           // 5s后是主机

b启动备机
    2023-07-14 06:08:48 INFO backup22         // 开始时备机,a主b备机         配置文件指定的

a停止nginx
    a
        2023-07-14 06:09:32 INFO def1          // 5s后是失败              当前节点出现故障
    b
        2023-07-14 06:09:34 INFO master22           // 备机切主机

a启nginx
    a
        2023-07-14 08:16:06 INFO backup1            // 按初始启动,a备b主

b停nginx
    b
        2023-07-14 08:18:28 INFO def22

    a
        2023-07-14 08:18:29 INFO master1           // 新备机切到主机

b启nginx
    b
        2023-07-14 08:21:27 INFO backup22         // 又回到了a主b备


a的优先级高于b的优先级,所以非抢占模式主备切换跟优先级没有关系,谁先启动谁就是master,
    先启动b
        2023-07-14 08:27:51 INFO backup22
        2023-07-14 08:27:56 INFO master22
    再启动a
        2023-07-14 08:28:14 INFO backup1

非抢占模式总结:
    
    优先级:优先级好像一点用都没有。因为首次先启动b,再启动a,b是主a是备

    首次启动主:如果默认是备,则首次启动是备,等脚本检测完就变成主了

    主备切换条件:主备都正常运行,然后主挂了

    后续恢复:只会重新形成keepalived集群,不会进行切换,只有主挂了才会切换
    

完美~

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值