1.概述

高可用集群(High Availability Cluster,简称HA Cluster),是指以减少服务中断时间为目的的服务器集群技术。它通过保护用户的业务程序对外部不间断的提供服务,把因为软件,硬件,认为造成的故障对业务的影响降低到最小程度。总而言之就是保证公司业务7*24小时不宕机
高可用集群的出现是为了使集群的整体服务尽可能可用,从而减少由计算机硬件和软件易错性所带来的损失。如果某个节点失效,它的备援节点将在几秒钟的时间内接管它的职责。因此,对于用户而言,集群永远不会停机
高可用集群软件的主要作用就是实现故障检查和业务切换的自动化。只有两个节点的高可用集群又称为双机热备,即使用两台服务器互相备份。当一台服务器出现故障时,可由另一台服务器承担服务任务,从而在不需要人工干预的 情况下,自动保证系统能持续对外提供服务。双机热备只是高可用集群的一种,高可用集群系统更可以支持两个以上的节点,提供比双机热备更多、更高级的功能,更能满足用户
不断出现的需求变化

2.keepalive

1.概述

Keepalived 是一个基于 VRRP 协议来实现的 LVS 服务高可用方案,可以利用其来避免单点故障。一个 MvSOL或 Ivs或 nginx 服务会有 2台服务器运行 Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟 IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟 IP,继续提供服务,从而保证了高可用性。
keepalived主要有三个模块,分别是core、check和vrrp。 core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。 check负责健康检查,包括常见的各种检査方式。vrrp模块是来实现VRRP协议的。

2.原理

1.Keepalived运行在每台服务器上,通过网络监听来自其他服务器的VRRP广播消息。
2.当一台服务器出现故障或网络异常时,其他服务器会检测到这个变化,并根据VRRP优先级规则,选举出新的主服务器。
3.新的主服务器会接管故障服务器的IP地址,成为新的虚拟IP(VIP)的拥有者。
4.虚拟IP(VIP)会被路由器配置为默认网关,从而实现了负载均衡和故障切换。
5.当故障服务器恢复正常时,它会重新参与选举过程,并根据VRRP优先级规则决定是否成为新的主服务器。

3.安装配置

安装keepalive服务

yum -y install keepalived
systemctl enable keepalived --now

4.配置文件说明

vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

# 全局配置
global_defs {
    router_id 1               # 设备在组中的标识,设置不一样即可
}

vrrp_instance VI_1 {          # VI_1 实例名,两台路由器要相同
    state MASTER              # 主或者从状态(主节点为MASTER,备节点为BACKUP)
    interface ens33           # 监控网卡
    mcast_src_ip 192.168.22.137  # 心跳源IP(本机实际IP)
    virtual_router_id 55      # 虚拟路由编号,主备要一致
    priority 100              # 优先级(主节点建议100,备节点建议小于100)
    advert_int 1              # 心跳间隔(单位:秒)

    authentication {          # 秘钥认证(1-8位)
        auth_type PASS
        auth_pass 123456
    }

    virtual_ipaddress {       # VIP(虚拟IP)
        192.168.22.121/24
    }
}

设置好MASTER主机之后,还需要设置BACKUP主机两台主主机配置基本相同但是其中配置

  • state MASTER 改为 state BACKUP
  • router_id 修改为和主节点不同的值(如 2)
  • priority 修改为低于主节点的值(如 90)
  • mcast_src_ip 修改为备节点自身的实际 IP

两台主机不同的地方,当主机出现问题之后,虚拟IP会移动到BACKUP主机上

测试之前需要配置nginx负载均衡,反向代理,测试是否联通,keepalived配置文件中设置了虚拟VIP,两台主机都设置了虚拟ip但是优先级的原因虚拟VIP会在MASTER主机上,当MASTER主机出现问题之后,虚拟ip会出现在BACKUP服务器上

此时BACKUP上的主机上没有虚拟VIP但是当我们拔掉MASTER主机上的网卡之后,虚拟VIP会直接到BACKUP主机上

右下角断掉网卡

此时BACKUP上会回来这张网卡,但是当真正出现问题的时候nginx服务器如果是崩掉了的话,虚拟VIP还是会回到MASTER主机,上因此我们需要通过脚本联合keepalived来联合脚本使用

3.keepalive-联合脚本

keepalive联合脚本监控nginx是否启动,编辑keepalived.conf文件

! Configuration File for keepalived

global_defs {
    router_id 1
}

vrrp_script chk_nginx {
    script "/etc/keepalived/ck_ng.sh"    # 脚本路径
    interval 2                           # 每2秒检查1次
    weight -10                           # 检查失败:优先级-10
    fail 3                               # 连续失败3次判定为异常
    rise 2                               # 连续成功2次判定为恢复
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    mcast_src_ip 192.168.22.137
    virtual_router_id 55
    priority 100
    advert_int 1

    authentication {
        auth_type PASS
        auth_pass 123456
     }
    virtual_ipaddress {
        192.168.22.121/24
    }

     track_script {
        chk_nginx  # 绑定上面定义的脚本名称
    }
}

其中注释部分就是脚本检测的地方,脚本的地址就是他每次检测的地方,我们写一个nginx启动的脚本

#!/bin/bash

# 统计nginx进程数,如果为0的话就是没有正常启动
nginx_status=$(ps -ef | grep nginx | grep -v grep | wc -l)

# 判断如果进程数为0,那么就是没有正常启动需要启动
if [ $nginx_status -eq 0 ]; then
    systecmctl start nginx
    sleep 2
    nginx_restart_status=$(ps -ef | grep nginx | grep -v grep | wc -l)
    if [ $nginx_restart_nginx -eq 0 ];then
        exit 1
    else
        exit 0
    fi
else
    exit 0
fi

这样这个keepalive集群就会定时检测nginx服务是否没有启动,如果没有启动就会自动启动nginx服务

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐