• 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高可用

    主机与备机配置

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

    脚本文件

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

    做健康检查与故障切换

    调用脚本

  • 相关阅读:
    互联网摸鱼日报(2023-11-20)
    数据增强中的仿射变换:旋转,缩放,平移以及错切(shear)
    Java-Atomic原子操作类详解及源码分析,Java原子操作类进阶,LongAdder源码分析
    Redis高可用系列——Hash类型底层详解
    【Java面试】大厂裁员,小厂倒闭,如何搞定面试官Java SPI是什么?有什么用?
    基于vue3+pinia2仿ChatGPT聊天实例|vite4.x仿chatgpt界面
    企业电子招投标采购系统源码之电子招投标的组成
    手写小程序摇树工具(五)——从单一文件开始深度依赖收集
    <Senior High School Math>: inequality question
    人工智能时代大模型算法之文心大模型4.0
  • 原文地址:https://blog.csdn.net/2401_83786744/article/details/139631281