centos7安装keepalived 保证Nginx的高可用

keepalived工作在虚拟路由器冗余协议 VRRP (Virtual Router Redundancy Protocol) 上,它允许一个静态 IP 在两个 Linux 系统之间进行故障转移。

环境准备:
两台虚拟机centos7,IP:192.168.213.4(backup) 192.168.213.6(master)
安装了Nginx。
关闭Firewalld、SELinux。

访问http://192.168.213.4/,效果如下:
在这里插入图片描述
访问http://192.168.213.6/,效果如下:
在这里插入图片描述

1、安装Keepalived

sudo yum install -y keepalived

备份配置文件:
keepalived的配置文件路径:/etc/keepalived
在这里插入图片描述
将配置文件备份,修改原来的配置文件 keepalived.conf

 cp keepalived.conf keepalived.conf-bk

修改配置文件:
master 192.168.213.6:

global_defs {
 
    # 高可用集群主机身份标识(集群中主机身份标识名称不能重复,建议配置成本机IP)
 router_id 192.168.213.6 
}

# 定时运行的脚本文件配置
vrrp_script check_nginx_pid_restart {
    # 之前编写的nginx重启脚本的所在位置
 script "/bin/keepalived/check_nginx_pid_restart.sh" 
    # 每间隔3秒执行一次
 interval 3
    # 如果脚本中的条件成立,重启一次则权重-20
 weight -20
}

# 定义虚拟路由,VI_1为虚拟路由的标示符(可自定义名称)
vrrp_instance VI_1 {
    # 当前节点的身份标识:用来决定主从(MASTER为主机,BACKUP为从机)
 state MASTER
    # 绑定虚拟IP的网络接口,根据自己的机器的网卡配置
 interface ens33 
    # 虚拟路由的ID号,主从两个节点设置必须一样
 virtual_router_id 121
    # 填写本机IP
 mcast_src_ip 192.168.213.6 
    # 节点权重优先级,主节点要比从节点优先级高
 priority 100
    # 优先级高的设置nopreempt,解决异常恢复后再次抢占造成的脑裂问题
 nopreempt
    # 组播信息发送间隔,两个节点设置必须一样,默认1s(类似于心跳检测)
 advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 将track_script块加入instance配置块
    track_script {
        # 执行Nginx监控的脚本
  check_nginx_pid_restart
    }

    virtual_ipaddress {
        # 虚拟IP(VIP),也可扩展,可配置多个。
      192.168.213.20
    }
}

backup 192.168.213.4:

global_defs {
  
    # 高可用集群主机身份标识(集群中主机身份标识名称不能重复,建议配置成本机IP)
   router_id 192.168.213.4
}

# 定时运行的脚本文件配置
vrrp_script check_nginx_pid_restart {
    # 之前编写的nginx重启脚本的所在位置
     script "/bin/keepalived/check_nginx_pid_restart.sh" 
    # 每间隔3秒执行一次
     interval 3
    # 如果脚本中的条件成立,重启一次则权重-20
     weight -20
}

# 定义虚拟路由,VI_1为虚拟路由的标示符(可自定义名称)
vrrp_instance VI_1 {
      # 当前节点的身份标识:用来决定主从(MASTER为主机,BACKUP为从机)
   state BACKUP
      # 绑定虚拟IP的网络接口,根据自己的机器的网卡配置
   interface ens33 
      # 虚拟路由的ID号,主从两个节点设置必须一样
   virtual_router_id 121
      # 填写本机IP
   mcast_src_ip 192.168.213.4
      # 节点权重优先级,主节点要比从节点优先级高
   priority 90
      # 优先级高的设置nopreempt,解决异常恢复后再次抢占造成的脑裂问题
   nopreempt
      # 组播信息发送间隔,两个节点设置必须一样,默认1s(类似于心跳检测)
   advert_int 1
      authentication {
          auth_type PASS
          auth_pass 1111
      }
      # 将track_script块加入instance配置块
      track_script {
          # 执行Nginx监控的脚本
          check_nginx_pid_restart
      }
  
      virtual_ipaddress {
          # 虚拟IP(VIP),也可扩展,可配置多个。
          192.168.213.20
      }
}

check_nginx_pid_restart.sh:

#!/bin/sh
# 通过ps指令查询后台的nginx进程数,并将其保存在变量nginx_number中
nginx_number=`ps -C nginx --no-header | wc -l`
# 判断后台是否还有Nginx进程在运行
if [ $nginx_number -eq 0 ];then
    # 如果后台查询不到`Nginx`进程存在,则执行重启指令
    systemctl start nginx
    # 重启后等待1s后,再次查询后台进程数
    sleep 1
    # 如果重启后依旧无法查询到nginx进程
    if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
        # 将keepalived主机下线,将虚拟IP漂移给从机,从机上线接管Nginx服务
        systemctl stop keepalived.service
    fi
fi

给执行文件授权:

chmod +x /bin/keepalived/check_nginx_pid_restart.sh

启动keepalived:

systemctl start keepalived

设置开机启动:

systemctl enable keepalied

查看启动状态:

systemclt status keepalied

查看ip:

ip addr

在这里插入图片描述
宿主机ping 192.168.213.20:
在这里插入图片描述
访问:http://192.168.213.20/
在这里插入图片描述

2、测试
测试场景:
2.1、停止192.168.213.6的Nginx

systemctl stop nginx

在这里插入图片描述

2.2、停止192.168.213.6的keepalived

 systemctl stop keepalived

在这里插入图片描述

2.3、启动192.168.213.6的keepalived

systemctl start keepalived

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/158964.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vscode中vue项目引入的组件的颜色没区分解决办法

vscode中vue项目引入的组件的颜色没区分解决办法 图中引入组件和其他标签颜色一样没有区分,让开发者不易区分,很蓝瘦 这个就很直观,解决办法就是你当前的vscode版本不对,你得去找找其他版本,我的解决办法就是去官网历…

ESP32-0.96寸OLED通过低功耗蓝牙BLE通信显示出ESP32-BME280读取到的温湿度值

ESP32-0.96寸OLED通过低功耗蓝牙BLE通信显示出ESP32-BME280读取到的温湿度值 简介ESP32-BME280作为BLE Server手机作为BLE Client与ESP32-BME280 BLE Server通信ESP32-0.96寸OLED作为BLE Client与ESP32-BME280 BLE Server通信总结 简介 两个ESP32开发板,一个ESP32挂…

Django+vue前后端分离实战--vue后台管理系统--vue环境安装项目创建

Djangovue前后端分离实战--vue后台管理系统 安装nodejsvue clivue-cli创建项目 安装nodejsvue cli 1、下载nodejs并安装 https://nodejs.org/dist/v20.9.0/node-v20.9.0-x64.msi 2、修改npm 默认仓库地址,要修改成taobao的镜像npm 仓库地址 cmd下命令&#xff1a…

20231117在ubuntu20.04下使用ZIP命令压缩文件夹

20231117在ubuntu20.04下使用ZIP命令压缩文件夹 2023/11/17 17:01 百度搜索:Ubuntu zip 压缩 https://blog.51cto.com/u_64214/7641253 Ubuntu压缩文件夹zip命令 原创 chenglei1208 2023-09-28 17:21:58博主文章分类:LINUX 小工具 文章标签命令行压缩包U…

YOLO改进系列之注意力机制(EffectiveSE模型介绍)

模型结构 ESE(Effective Squeeze and Extraction) layer是CenterMask模型中的一个block,基于SE(Squeeze and Extraction)改进得到。与SE的区别在于,ESE block只有一个fc层,(CenterMask : Real-Time Anchor-Free Insta…

基于JavaWeb+SpringBoot+掌上社区疫苗微信小程序系统的设计和实现

基于JavaWebSpringBoot掌上社区疫苗微信小程序系统的设计和实现 源码获取入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种…

freeswitch的一个性能问题

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 在fs的使用过程中,会遇到各种各样的问题,各种问题中,性能问题是最头疼的。 最近在测试某些场景的时候,压测会造成fs的内存占用持续升高,并在达到某个临界点的…

什么是游戏盾?怎么进行防护?

一.德迅游戏盾(抗D盾)概述 1.抗D盾是针对游戏行业推出的高度可定制的网络安全解决方案,可以针对大型DDoS攻击(T级别)进行有效防御,同时能彻底解决游戏行业特有的TCP协议的CC攻击问题。 2.抗D盾是新一代的智能分布式云接入系统&a…

MySQL数据库干货_30——【精选】JDBC常用操作

JDBC批量添加数据 批量添加数据简介 在JDBC中通过PreparedStatement的对象的addBatch()和executeBatch()方法进行数据的批量插入。 addBatch()把若干SQL语句装载到一起,然后一次性传送到数据库执行,即是批量处理sql数据的。executeBatch()会将装载到一…

Leetcode刷题详解——猜数字大小 II

1. 题目链接:375. 猜数字大小 II 2. 题目描述: 我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字。你来猜我选了哪个数字。如果你猜到正确的数字,就会 赢得游戏 。如果你猜错了,那么我…

安装 eslint 配置指南 及 遇到的一些问题记录

前端eslint配置指南 背景 当前前端项目风格混乱,每个人有自己的开发习惯,有自己的格式化习惯,不便于项目的风格统一,不利于代码维护有的项目eslint没有用起来,没有起到规范代码的作用,导致出现一些基础代码…

基于数据库(MySQL)与缓存(Redis)实现分布式锁

分布式锁 分布式锁:分布式锁是在分布式的情况下实现互斥类型的一种锁 实现分布式锁需要满足的五个条件 可见性:多个进程都能看到结果互斥性:只允许一个持有锁的对象的进入临界资源可用性:无论何时都要保证锁服务的可用性&#x…

刷题学习记录(攻防世界)

wife_wife 一拿到题目就提示这题不用爆破 进入环境得到的是一个登录框 随便试了一下登录账户密码会提示错误,那就去注册账户,注册的账户还有注册管理员的选项 先注册普通用户234,注册好后登录 这样就得到flag,但是提交是错误的&a…

智能井盖传感器能不能监测井盖位移

智能井盖传感器能够精准监测井盖的位移。这些传感器运用了前沿科技对井盖状态进行实时监测。一旦井盖出现异常移动传感器会立即捕捉到信号,并通过与互联网相连接的智能系统发出警报或记录数据。这种智能监测仪为城市或相关部门的井盖管理提供了实时数据支持&#xf…

Matlab通信仿真系列——信号处理函数

微信公众号上线,搜索公众号小灰灰的FPGA,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 本节目录 一、Matlab信号产生函数…

Python网络编程多线程实现异步服务端

在《Python中通过socketserver库创建服务端》中提到的使用socketserver库创建的服务端是同步服务端。当有多个客户端接入服务端时,必须接收了客户端A发送的数据之后,才会再接收客户端B的服务端。而如果客户端A连接服务端后,没有发送数据&…

三菱FX3U小项目—运料小车自动化

目录 一、项目描述 二、IO口分配 三、项目流程图 四、项目程序 五、总结 一、项目描述 设备如下图所示,其中启动按钮SB1用来开启运料小车,停止按钮SB2用来手动停止运料小车(其工作方式任务模式要求)。当小车在原点SQ1位置,按下启动按钮S…

RocketMQ(三):集成SpringBoot

RocketMQ系列文章 RocketMQ(一):基本概念和环境搭建 RocketMQ(二):原生API快速入门 RocketMQ(三):集成SpringBoot 目录 一、搭建环境二、不同类型消息1、同步消息2、异步消息3、单向消息4、延迟消息5、顺序消息6、带tag消息7、带key消息 一…

关于python中内存分配的问题,运行一些操作可能会导致为新结果分配内存,用Python的id()函数演示

一、考虑背景: 一般在python中不会考虑像C中的内存问题,但是在一些高级应用中会考虑,例如有一个特别特别大的矩阵,最好不要不断的赋值,导致内存问题产生。 二、python中的id: 在python中有个id&#xff…

内网渗透之信息收集

目录 本机信息收集 查看系统配置信息 查看系统服务信息 查看系统登录信息 自动信息收集 域内信息收集 判断是否存在域 本机信息收集 查看系统配置信息 查看系统服务信息 查看系统登录信息 自动信息收集 域内信息收集 查看机器相关信息 查看用户相关信息 powershel…