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

Linux系统——keepalived安装与部署

一、keepalived的概念和核心功能

(1)keepalived是一个用于实现高可用和负载均衡的服务,主要基于虚拟路由协议,解决了nginx一台机器的单点故障问题

(2)高可用性:keepalived会通过健康检查机制定期检查nginx服务器,通过 VRRP 协议实现故障转移。当主服务器发生故障时,备用服务器会自动接管服务,确保服务不中断。

(3)负载均衡:支持基于传输层的负载均衡,可以将客户端请求分发到多个后端服务器,提高系统的处理能力和可靠性。

二、keepalived的安装与部署

(1)yum -y install keepalived:下载keepalived(主机和备机都需要下载)

(2)hostnamectl  set-hostname  keepalived-master:设置主机keepalived为keepalived-master

          su:跳转进入keepalived-master

(3)hostnamectl  set-hostname  keepalived-backup:设置备机keepalived为keeplived-backup

        su :跳转进入keepalived-backup

(4)cd  /etc/keepalived:跳转到keepalive的目录

        vim keepalived.conf:编辑keepalived配置文件

主机配置

! Configuration File for keepalived

global_defs {

#路由器id,是路由器唯一标识符,用于在日志中区分不同的Keepalived实例

 router_id LVS_DEVEL

}

#定义一个vrrp脚本,用于监控nginx服务

vrrp_script check_nginx_pid_restart {

    # 之前编写的nginx重启脚本的所在位置

 script "/bin/keepalived/check_nginx_pid_restart.sh"

    # 每间隔3秒执行一次

 interval 3

    # 如果脚本中的条件成立,重启一次则权重-20,即则降低优先级20分

 weight -20

}

#定义一个名为VI_1的实例

vrrp_instance VI_1 {

      state MASTER #设置此实例为主服务器状态(备机应设置为BACKUP)

      interface ens33 #监听的网卡为ens33

      virtual_router_id 121 #虚拟路由器ID,主备机必须相同

      priority 100 # 优先级,数值越大优先级越高,主服务器应高于备服务器

      advert_int 1 # VRRP通告间隔时间(秒)

      authentication { # 认证信息,确保只有授权的节点可以加入VRRP组

         auth_type PASS # 使用简单密码认证

         auth_pass 1111 # 认证密码,主备机需一致

    }

track_script {

 # 执行Nginx监控的脚本

 check_nginx_pid_restart

}

    virtual_ipaddress {

      192.168.186.100 #虚拟ip,需要与主机和备机在同一网域,但IP不能相同

    }

}

备机配置

! Configuration File for keepalived

global_defs {

   router_id LVS_DEVEL

}

 vrrp_script check_nginx_pid_restart {

    # 之前编写的nginx重启脚本的所在位置

 script "/bin/keepalived/check_nginx_pid_restart.sh"

    # 每间隔3秒执行一次

 interval 3

    # 如果脚本中的条件成立,重启一次则权重-20

 weight -20

}

vrrp_instance VI_1 {

    state BACKUP

    interface ens33

    virtual_router_id 121

    priority 99

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

}

track_script {

 # 执行Nginx监控的脚本

 check_nginx_pid_restart

}

    virtual_ipaddress {

       192.168.186.100

    }

}

(5)mkdir keepalived :跳转到/bin目录,然后创建一个keepalived目录

        vim check_nginx_pid_restart.sh:编辑脚本文件

        chmod  +x  check_nginx_pid_restart.sh:给脚本赋予执行权限

脚本内容

#!/bin/bash

# 使用 systemctl 检查 Nginx 服务的状态,并通过 grep 查找 "active (running)" 字样

# 如果找到该字样,表示 Nginx 正在运行,grep 返回状态码为 0;否则返回非零状态码

systemctl status nginx | grep "active (running)" > /dev/null

# 检查上一条命令的退出状态码($?),如果状态码不等于 0,表示 Nginx 不是 "active (running)"

if [ $? -ne 0 ]; then

# 尝试重启 Nginx 服务并将输出重定向到 /dev/null 以避免输出到控制台

    systemctl restart nginx &> /dev/null

sleep 1

# 再次检查 Nginx 服务的状态

systemctl status nginx | grep "active (running)" > /dev/null

# 如果 Nginx 仍然不是 "active (running)",则停止 Keepalived 服务

if [ $? -ne 0 ]; then

      systemctl stop keepalived

    else

      Exit # 如果 Nginx 已经成功启动,则直接退出脚

  fi

fi

(6)kdir -p /bin/keepalived :递归创建文件夹

        scp check_nginx_pid_restart.sh root@192.168.186.180:/root #将脚本文件远程复制到备机的/root目录下

        mv check_nginx_pid_restart.sh /bin/keepalived :将脚本文件移动到keepalived目录下

        chomd +x check_nginx_pid_restart.sh :给脚本文件赋权

(7)systemctl start keepalived :在主机和备机上同时将keepalived开启

        ip a :查询是否开启

        如果出现虚拟ip则成功

(8)pkill -9 nginx:将主机nginx进程杀死

        netstat -antp:查看端口是否关闭

        systemctl  stop nginx

         #将主机上nginx关闭测试备机是否能启用nginx

        systemctl status nginx:测试nginx是否关闭       

         #如果nginx关闭不了将主机nginx直接将其卸载

         yum -y remove nginx

(9)在备机输入ip a查看nginx是否启用,如果查到虚拟ip则备机nginx已经启用

       

相关文章:

  • 用 pytorch 从零开始创建大语言模型(一):理解大型语言模型
  • 关于 Redis 缓存一致
  • 定积分与不定积分在概率统计中的应用
  • idea问题(三)pom文件显示删除线
  • C++ - 从零实现Json-Rpc框架-2(服务端模块 客户端模块 框架设计)
  • 从报错到成功:Mermaid 流程图语法避坑指南✨
  • C# HTTP 文件上传、下载服务器
  • 视频剪辑全流程解析:从素材到成片
  • 大模型训练为什么选择交叉熵损失(Cross-Entropy Loss):均方误差(MSE)和交叉熵损失的深入对比
  • springboot实现调用百度ocr实现身份识别+二要素校验
  • python3.13.2安装详细步骤(附安装包)
  • [AI速读]用持续集成(CI)优化芯片验证环境:Jenkins与EDA工具的实战指南
  • <项目> 高并发服务器的HTTP协议支持
  • 学习使用 Git 和 GitHub 开发项目的教程推荐
  • 浏览器工作原理深度解析(阶段二):HTML 解析与 DOM 树构建
  • vue3中如何缓存路由组件
  • 【QA】装饰模式在Qt中有哪些运用?
  • Python 用户账户(让用户能够输入数据)
  • 【如何打包docker大镜像】
  • NAT和VPN的联系
  • 世界数字教育大会发布“数字教育研究全球十大热点”
  • 昆明公布3起经济犯罪案例:一人持有820余万假美元被判刑十年
  • 娃哈哈:自4月起已终止与今麦郎的委托代工关系,未来将坚持自有生产模式
  • 2025财政观察|长三角“三公”经费普降,钱要用在刀刃上
  • 违法违规收集使用个人信息,爱奇艺、轻颜等65款App被点名
  • 河南信阳拟发文严控预售许可条件:新出让土地开发的商品房一律现房销售