LVS+Keepalived群集

理解Keepalived实现原理

掌握Keepalived的部署

掌握LVS+Keepalived高可用集群部署

keepalived工具介绍

一个合格的群集应该具备的特点

1)负载均衡 用于提高群集的性能 LVS Nginx HAProxy SLB F5

2)健康检查(探针) 针对于调度器和节点服务器 Keepalived Heartbeat

3)故障转移 通过VIP漂移实现主备切换 VRRP 脚本

实现原理

VRRP组播报文地址为224.0.0.18,协议号为112

热备机主从原理,因为使用的的VRRP协议,所以有很多地方相似

健康检查(探针)常用的工作方式

1)发送心跳消息 vrrp报文 ping/pong

2)TCP端口检查 向目标主机的 IP:PORT 发起TCP连接请求,如果TCP连接三次握手成功则认为健康检查正常,否则认为健康检查异常

3)HTTP URL检查 向目标主机的URL路径(比如http://IP:PORT/URI路径)发起 HTTP GET 请求方法,如果响应消息的状态码为 2XX 或 3XX,则认为健康检查正常

如果响应消息的状态码为 4XX 或 5XX,则认为健康检查异常

Keepalived的工作模式

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

非抢占模式:MASTER节点恢复后不抢占VIP。(主备节点的state都配置为BAKCUP,且都添加配置nopreempt)

脑裂故障

现象:主服务器和备服务器都同时拥有相同的VIP

原因:因为主服务器和备服务器的通信中断,导致备服务器无法收到主服务器发送的VRRP报文,备服务器误认为主服务器已经故障了并通过ip命令生成VIP

解决:关闭主服务器或备服务器其中一个的keepalived服务

预防:(1)如果是系统防火墙导致,则关闭防火墙或添加防火墙规则放通VRRP组播地址(224.0.0.18)的传输

(2)如果是主备服务器之间的通信链路中断导致,则可以在主备服务器之间添加双链路通信

(3)在主服务器使用脚本定时判断与备服务器通信链路是否中断,如果判断是主备服务器之间的链接中断则自行关闭主服务器上的keepalived服务

(4)利用第三方应用或监控系统检测是否发生了脑裂故障现象,如果确认发生了脑裂故障则通过第三方应用或监控系统来关闭主服务器或备服务器其中一个的keepalived服务

实验部分

配置keepalived

非抢占模式

实验二

验证nfs共享,验证nginx服务器,查看挂载,查看网站

关闭一台nginx后

就只会停在一台服务器

关闭一台调节器后会更换主从

配置nginx高可用

主机与备机配置

复制代码
vi keepalived.conf
keepalived.conf:
#检测脚本
vrrp_script chk_http_port {
    script "/usr/local/src/check_nginx_pid.sh" #心跳执行的脚本,检测nginx是否启动
    interval 2                          #(检测脚本执行的间隔,单位是秒)
    weight 2                            #权重
}
#vrrp 实例定义部分
vrrp_instance VI_1 {
    state MASTER            # 指定keepalived的角色,MASTER为主,BACKUP为备
    interface ens33         # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
    virtual_router_id 66    # 虚拟路由编号,主从要一直
    priority 100            # 优先级,数值越大,获取处理请求的优先级越高
    advert_int 1            # 检查间隔,默认为1s(vrrp组播周期秒数)
    #授权访问
    authentication {
        auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
        auth_pass 1111
    }
    track_script {
        chk_http_port            #(调用检测脚本)
    }
    virtual_ipaddress {
        192.168.16.130            # 定义虚拟ip(VIP),可多设,每行一个
    }
}

keepalived.conf:
#检测脚本
vrrp_script chk_http_port {
    script "/usr/local/src/check_nginx_pid.sh" #心跳执行的脚本,检测nginx是否启动
    interval 2                          #(检测脚本执行的间隔)
    weight 2                            #权重
}
#vrrp 实例定义部分
vrrp_instance VI_1 {
    state BACKUP                        # 指定keepalived的角色,MASTER为主,BACKUP为备
    interface ens33                      # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
    virtual_router_id 66                # 虚拟路由编号,主从要一直
    priority 99                         # 优先级,数值越大,获取处理请求的优先级越高
    advert_int 1                        # 检查间隔,默认为1s(vrrp组播周期秒数)
    #授权访问
    authentication {
        auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
        auth_pass 1111
    }
    track_script {
        chk_http_port                   #(调用检测脚本)
    }
    virtual_ipaddress {
        192.168.16.130                   # 定义虚拟ip(VIP),可多设,每行一个
    }
}

脚本文件

复制代码
#!/bin/bash
#检测nginx是否启动了
A=`ps -C nginx --no-header |wc -l`        
if [ $A -eq 0 ];then    #如果nginx没有启动就启动nginx                        
      systemctl start nginx                #重启nginx
      if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then    #nginx重启失败,则停掉keepalived服务,进行VIP转移
              killall keepalived                    
      fi
fi

做健康检查与故障切换

调用脚本

相关推荐
ltl2 小时前
大多数「无锁」代码其实不是无锁的
linux
ltl2 小时前
Linux 内核的内存屏障:一个让我调了三天的 bug
linux
Dontla4 小时前
预置known_hosts如何防止中间人攻击(MITM)?(服务器公钥、服务器私钥)Runner、DNS污染、BGP劫持、同网络ARP欺骗、SSH握手
服务器·网络·ssh
Lonely 净土4 小时前
Rocky Linux 安装教程
linux·运维·服务器
李白你好8 小时前
Windows 离线 Linux 提权辅助查询工具
linux
Lust Dusk9 小时前
记一次Linux应急响应题目解析
linux·运维·服务器·网络·安全·网络安全
ShineWinsu9 小时前
对于Linux:五种IO模型以及非阻塞IO的详细解析
linux·c++·面试·io·阻塞·非阻塞·fcntl
千千寰宇9 小时前
[Linux/Ollama] Termux : 一款运行在 Android 平台上的开源终端模拟器与 Linux 环境应用、支持在手机上基于Ollama部署LLM
linux
凌肖战10 小时前
TCP网络通信中setsockopt()函数解决地址已占用问题
服务器·网络·tcp/ip
隔窗听雨眠11 小时前
OceanBase旁路导入与自增主键冲突深度解析:原理、排查与解决方案
java·服务器·数据库