当前位置: 首页 > news >正文

nginx两台负载均衡服务器之间使用keepalived实现高可用

目录

    • 高可用HA
      • keepalived实现高可用
      • VRRP协议
      • 单VIP架构
      • VIP飘移
      • 脑裂
      • 双VIP架构(互为主从)
      • keepalived监控 、执行脚本
      • notify

高可用HA

单点故障:某个重要的功能只有一份,如果他出现问题,会导致全局不能使用

“高可用性”(High Availability,缩写为HA)用于描述系统或服务在面临故障、硬件或软件问题时能够继续正常运行的能力。高可用性的目标是最大程度地减少系统中断或停机时间,确保用户可以随时访问服务或应用程序。

三个经典的高可用软件:hearbeat、keepalived、HAproxy

keepalived实现高可用

keepalived两大核心功能:
1、loadbalance 负载均衡:ipvs -> LVS软件在Linux内核里已经安装
2、high-avaliability 高可用:vrrp协议(虚拟路由冗余协议)

keepalived启动之后会有三个进程:
父进程: 内存管理,子进程管理等
子进程: VRRP子进程
子进程: healthchecker子进程,查看各自服务器的健康状况

出错了可以看日志:/var/log/messages

两台负载均衡器上都需要安装nginx,使用nginx做七层负载均衡,

VRRP协议

virtual router redundancy protocol 虚拟路由冗余协议
一组路由器协同工作,担任不同工作,担任不同角色,有master角色,也有backup角色
master角色的路由器(的接口)承担实际的数量流量转发任务
backup路由器监听master路由器的状态,并在master路由器发生故障时,接替其工作,从而保证业务流量的平滑切换

vrrp协议工作在网络层
vrrp协议使用固定的组播地址224.0.0.18进行发送
帧的组播地址:目的地址 - 01:00:5E:00:00:12
第8位为1,代表这个mac地址是一个广播地址

vrrp协议的工作原理:

  1. 所有的路由器或服务器发生vrrp宣告报文,进行选举,必须是相同vrid和认证密码,优先级高的服务器或路由器会被选举为master
  2. master定时发生vrrp通告报文,以便向backup路由器告知自己的存活情况,默认时间间隔是1秒
  3. 接收master设备发送的vrrp通告报文,判断master设备的状态是否正常。如果超过1秒没有收到vrrp报文,就认为master挂了,开始重新选举新的master,vip会飘移到新的master上

单VIP架构

LB2:192.168.232.165

  1. 在两台LB上安装keepalived

    yum install keepalived -y
    
  2. 修改主LB的配置文件

    cd /etc/keepalived/
    vim keepalived.conf! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addr#vrrp_strict    # 注释这一行vrrp_garp_interval 0vrrp_gna_interval 0
    }vrrp_instance VI_1 {state MASTER    # 主LBinterface ens33virtual_router_id 58    # 虚拟路由器idpriority 120    # 优先级(0~255)advert_int 1    # 宣告消息的间隔事件为1秒authentication {    # 认证auth_type PASSauth_pass 1111}virtual_ipaddress {    # VIP192.168.232.111}
    }
    
  3. 修改从LB的配置文件

    cd /etc/keepalived/
    vim keepalived.conf! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addr#vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
    }vrrp_instance VI_1 {state BACKUP    # 从LBinterface ens33virtual_router_id 58priority 100    # 优先级要比主LB小advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.232.111}
    }
  4. 配置完成之后刷新服务

    service keepalived restart 
    

    这个时候就可以在主LB服务器上看到VIP,而从LB服务器上没有这个VIP。VIP在哪一个服务器上,就由哪一个服务器对外提供服务

VIP飘移

master挂了(或keepalived服务关闭),VIP就会飘移到slave上,这个时候就可以在从LB上看到这个VIP。如果master恢复,VIP就会飘会主LB上(优先级更高)

脑裂

多台机器出现同一个VIP

脑裂出现的原因:
1、vrid(虚拟路由id)不一样
2、网络通信有问题(防火墙组织了vrrp报文的通信)
3、认证密码不一样

双VIP架构(互为主从)

双VIP的架构可以实现负载均衡

只要将以下代码加入主LB的配置文件,作为第二个VIP的从服务器

vrrp_instance VI_2 {state BACKUPinterface ens33virtual_router_id 59priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.232.112}
}

将以下代码加入从LB的配置文件,作为第二个VIP的主服务器

vrrp_instance VI_2 {state BACKUPinterface ens33virtual_router_id 59priority 120advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.232.112}
}

这个时候就可以在主LB上看到192.168.232.111这个VIP,在从LB上看到192.168.232.112

完成高可用之后就可以在DNS服务器里添加这两个IP的记录了

keepalived监控 、执行脚本

Keepalived 可以通过检查状态来了解当前主服务器和备用服务器的状态

keepalived的基础是nginx服务,nginx服务停止了,就会检测为状态异常

实例:监控本机的nginx进程是否运行,如果nginx进程不运行就立马将优先级降低30

如何判断nginx是否运行
1、pidof nginx
2、查看kiilall -0 nginx这条命令的返回值

  1. 编写监控nginx脚本,授予可执行权限,也可以直接写在keepalived里

    mkdir /nginx
    cd /nginx
    vim check_nginx.sh#!/bin/bash
    if /usr/sbin/pidof nginx &>/dev/null ;thenexit 0
    elseexit 1
    fichmod +x check_nginx.sh
    
  2. 在keepalived里定义并调用监控脚本

    # 在global_defts部分后面加:
    # 定义监控脚本chk_nginx
    # 当脚本执行返回值为1时才会执行下面权重值-30的操作
    vrrp_script chk_nginx {script "/nginx/check_nginx.sh"interval 1    # 每隔一秒执行weight -30    # 返回值为0时就把优先级-30
    }#主LB在vrrp_instance VI_1中添加,从在VI_2中添加:
    # 调用监控脚本
    track_script {chk_nginx
    }
    

    是master的那个vrrp实例调用vrrp监控脚本

notify

notify脚本是当本节点服务器成为某个角色的时候,就会去执行某个脚本

# 状态改变为master后执行的脚本
notify_master "/mail/master.sh"# 状态改变为backup后执行的脚本
notify_backup "/mail/backup.sh"# vrrp停止后执行的脚本
notify_stop "/mail/stop.sh"
http://www.lryc.cn/news/155963.html

相关文章:

  • 如何将Express项目部署到Vercel
  • Java作业3
  • ARM编程模型-寄存器组
  • C++ string
  • 百亿级访问量,如何做缓存架构设计
  • (数字图像处理MATLAB+Python)第十一章图像描述与分析-第三、四节:几何表述和形状描述
  • 20230901工作心得:IDEA列操作lambda表达式加强版用法
  • macOS Sonoma 14beta 7(23A5337a)更新发布,附黑/白苹果系统镜像
  • QT基础教程之九Qt文件系统
  • OpenCV(十八):图像直方图
  • mac pro 查看隐藏文件夹
  • 软件测试/测试开发丨Selenium 高级定位 Xpath
  • 各类注意力机制Attention——可变形注意力
  • 桥接模式:连接抽象与实现
  • 同步推送?苹果计划本月推出 iOS17和iPadOS17,你的手机支持吗?
  • 方案展示 | RK3588开发板Linux双摄同显方案
  • 数据库-多表设计
  • 一个简单的文件系统(MinixFS)实现解析
  • 地图投影-2亚当斯方形
  • atcoder库中类欧(类欧几里得算法)floor_sum用法
  • 后端面试话术集锦第 十一 篇:mybatis面试话术
  • SpringBoot运维实用篇、打包、运行、高级配置、多环境开发、日志
  • springdoc-openapi-ui 整合 knife,多模块分组,脚手架
  • 04-MySQL02
  • 实现跨境电商测评和采退、LU卡、LU货最安全的系统方案
  • 软件生命周期及流程
  • nginx使用详解
  • YOLOV7 添加 CBAM 注意力机制
  • 【SpringSecurity】七、SpringSecurity集成thymeleaf
  • Go语言中的数组、切片和映射解析