keepalived实现nginx高可用

news2025/1/21 8:55:27

文章目录

  • 前言
  • keepalived简介
  • 软件架构
  • 简单理解
  • 环境准备
  • 一、keepalived安装
    • 1.1 下载keepalived 安装包
    • 1.2 解压/下载依赖
    • 1.3 编译
    • 1.4 创建软连接
    • 1.5 增加系统服务
    • 1.6 启动keepalived
  • 二、实现Nginx高可用
    • 2.1 创建keepalived配置文件
    • 2.2 Nginx监控脚本
    • 2.4 重启keepalived
    • 2.5 查看虚拟ip
  • 三、高可用验证
    • 3.1 模拟宕机
    • 3.2 查看虚拟ip
    • 3.3 访问Nginx
    • 3.4 恢复主机
    • 2.5 查看虚拟ip
  • 思考
  • 总结


前言

请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i、


提示:以下是本篇文章正文内容,下面案例可供参考

keepalived简介

keepalived起初是为LVS设计的专门用来监控集群系统中各个服务节点的状态如果某个服务节点出现异常或者工作出现故障,keepalived将检测到,并将出现故障的服务节点从集群系统中剔除,而在故障节点恢复正常后,keepalived又可以自动将该服务节点重新加入集群中,这些工作全部自动完成。这部分功能类似于nginx 等反向代理的应用探活功能实现后端服务高可用。
后来又加入了VRRP的功能,VRRP(Virtual Router Redundancy Protocol),虚拟路由协议出现的目的是为了解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行,因此keepalived一方面具有服务器状态检测和故障隔离功能,另一方面也有HA cluster功能;这个功能实现各种中间件高可用。

软件架构

Keepalived启动后由3个进程组成。

  1. 主进程 - 负责监视和创建子进程
  2. 子进程1 - 负责VRRP功能
  3. 子进程2 - 负责健康检查功能

简单理解

1、keepalived服务简单来说,就是用来防止单点故障的。

2、所谓的单点故障就是,主服务器挂了之后从服务器充当主服务器,原来的主服务器恢复后,当从服务器来使用,保证服务的高可用性。

也可以这样理解,老大挂了之后手下的小弟过来接班,老大复活后,当小弟使用。
文章例子:
实现Nginx高可用,两台机器分别搭建Nginx为后端服务实现代理,当一台Nginx服务宕机后,用户无感知切换备用机器上Nginx,使其访问后端服务正常
问题引申:
两台机器部署Nginx,问题一:必然访问服务ip不一致、问题二:如何检测Nginx是否正常运行,多久检测依据,检测时间如何定义?
解决方案:
为了解决这个问题此时keepalived登场!它拥有应用活性探测机制,支持用户自定义检测脚本。重点:可将两台机器ip虚拟出绑定机器网卡的虚拟ip(vip),提供虚拟ip,供外部访问
示意图

环境准备

注意:分别在两台centos 7系统上安装Nginx

本文中的两台服务器的IP地址分别为:(192.168.248.131、192.168.248.132

一、keepalived安装

131服务器配置

1.1 下载keepalived 安装包

https://www.keepalived.org/download.html

1.2 解压/下载依赖

#进入路径
cd /opt

#解压
tar -zxvf keepalived-1.2.23.tar.gz 

#下载依赖
yum -y install openssl-devel gcc

1.3 编译

注意:prefix指定keepalived编译后的路径

cd /opt/keepalived-1.2.23

./configure --prefix=/usr/local/keepalived

make -j && make install

1.4 创建软连接

sudo cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
sudo cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
sudo cp /usr/local/keepalived/sbin/keepalived /usr/sbin/	

1.5 增加系统服务

#添加为服务开机自启
chkconfig --add keepalived 

#开启服务
chkconfig keepalived on

#查看服务列表(看到345状态为开或者为 on 则表示成功)
chkconfig --list

1.6 启动keepalived

#启动
service keepalived start

#查看进程(有三个进程服务启动成功)
ps -ef |grep "keepalived"

keepalived启动
至此keepalived安装完成,实现文章主旨Nginx实现高可用,需要为:(192.168.248.131、192.168.248.132)安装keepalived

二、实现Nginx高可用

注意 分别为:(192.168.248.131、192.168.248.132)安装keepalived!!!两台机器虚拟ip必须相同!!!

2.1 创建keepalived配置文件

#备份并替换keepalived配置文件
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

#编辑配置(服务启动默认读取/etc/keepalived/keepalived.confvim /etc/keepalived/keepalived.conf

主节点配置内容:192.168.248.131

! Configuration File for keepalived

global_defs {
    notification_email {	#设置报警邮件地址,需要开启本机postfix或者sendmail服务;
        xxx@alibaba-inc@qq.com
    }
    notification_email_from root@localhost.com	#用于设置邮件的发送地址,即报警邮件发送者;
    smtp_server 127.0.0.1	#用于设置邮件的SMTP Server地址;
    smtp_connect_timeout 30	#设置连接SMTP Server的超时时间;
    router_id LVS_DEVEL #LVS_DEVEL这字段在/etc/hosts文件中看;通过它访问到主机
}

vrrp_script chk_ngnix {
    script /etc/keepalived/scripts/chk_nginx.sh #监控nginx脚本路径
    interval 2 #检测时间间隔
    weight -10 #如果条件成立的话,则权重 -10
}

vrrp_instance VI_1 {
    state MASTER      #主从状态(MASTER/BACKUPinterface ens33      #绑定虚拟 IP 的网络接口,注:ip addr查询
    virtual_router_id 52 #虚拟路由的 ID 号, 两个节点设置必须一样
    mcast_src_ip 192.168.248.131  #填写本机ip
    priority 100 #主节点优先级,主要比从节点优先级高
    #garp_master_delay 30
    advert_int 1        #每隔1s发送一次心跳
    authentication {    
        auth_type PASS
        auth_pass 1111  #校验类型:密码=1111
    }
    #track_script块加入 instance 配置块
    track_script {
        chk_ngnix       #执行Nginx监控服务
    }
    virtual_ipaddress {
      192.168.248.99  #虚拟ip(设置虚拟ip网段需要同一个,需要根据项目去调整 )
    }
}

从节点配置内容:192.168.248.132

! Configuration File for keepalived

global_defs {
    notification_email {	#设置报警邮件地址,需要开启本机postfix或者sendmail服务;
        xxx@alibaba-inc@qq.com
    }
    notification_email_from root@localhost.com	#用于设置邮件的发送地址,即报警邮件发送者;
    smtp_server 127.0.0.1	#用于设置邮件的SMTP Server地址;
    smtp_connect_timeout 30	#设置连接SMTP Server的超时时间;
    router_id LVS_DEVEL #LVS_DEVEL这字段在/etc/hosts文件中看;通过它访问到主机
}

vrrp_script chk_ngnix {
    script /etc/keepalived/scripts/chk_nginx.sh #监控nginx脚本路径
    interval 2 #检测时间间隔
    weight -10 #如果条件成立的话,则权重 -10
}

vrrp_instance VI_1 {
    state BACKUP      #主从状态(MASTER/BACKUPinterface ens33      #绑定虚拟 IP 的网络接口,注:ip addr查询
    virtual_router_id 52 #虚拟路由的 ID 号, 两个节点设置必须一样
    mcast_src_ip 192.168.248.132  #填写本机ip
    priority 90 #主节点优先级,主要比从节点优先级高
    #garp_master_delay 30
    advert_int 1        #每隔1s发送一次心跳
    authentication {    
        auth_type PASS
        auth_pass 1111  #校验类型:密码=1111
    }
    #track_script块加入 instance 配置块
    track_script {
        chk_ngnix       #执行Nginx监控服务
    }
    virtual_ipaddress {
      192.168.248.99  #虚拟ip(设置虚拟ip网段需要同一个,需要根据项目去调整 )
    }
}

查看网卡网络接口:

 echo `ip ad|awk '/state UP/ {gsub(":", "");print $2}'`

查看网卡

2.2 Nginx监控脚本

注意:脚本存放路径与上述keepalived配置文件指定一致!!!

#创建
mkdir -p /etc/keepalived/scripts/

#编辑
vim /etc/keepalived/scripts/chk_nginx.sh

#添加可执行权限
chmod +x /etc/keepalived/scripts/chk_nginx.sh 

脚本内容:

#!/bin/bash

#      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#      + 1、此脚本为nginx监控脚本,与keepalived组件配合使用    
#      + 2keepalived配置文件:/etc/keepalived/keepalived.conf       
#      + 3、脚本输出日志/etc/keepalived/check_service.log
#      + 4、默认脚本路径在/etc/keepalived/scripts,需要改变路径,请修改keepalived配置   	               
#      + 5、创建此脚本后请赋予可执行权限chmod +x /etc/keepalived/scripts/chk_nginx.sh      
#      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



####################基础参数####################
#获取当前时间
DATE=`date +%Y%m%d`
#日志输出路径
logPath=/etc/keepalived


A=`ps -C nginx --no-header |wc -l` 
# 判断nginx是否宕机,如果宕机了,尝试重启
echo "$(date +%Y'-'%m'-'%d' '%H':'%M':'%S) 进程数:$A" | tee -a ${logPath}/check_service.log 
if [ $A -eq 0 ];then 
	/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 
	# 等待一小会再次检查nginx,如果没有启动成功,则停止keepalived,使其启动备用机 
	sleep 3 
	if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then 
		echo "$(date +%Y'-'%m'-'%d' '%H':'%M':'%S)nginx is over! stop keepalived!" | tee -a ${logPath}/check_service.log
		service keepalived stop
		exit 1
	fi
else
	echo "$(date +%Y'-'%m'-'%d' '%H':'%M':'%S) nginx is run!" | tee -a ${logPath}/check_service.log
	exit 0		
fi

2.4 重启keepalived

注意:重启两台机器上的keepalived,确保Nginx服务也启动

#重启服务
service keepalived restart

2.5 查看虚拟ip

注意当主节点keepalived正常运行时,从节点不会出现虚拟ip,反之当主节点keepalived宕机后,从节点自动绑定虚拟ip

#查看ip信息
ip addr

192.168.248.131:主节点
主节点
192.168.248.132:从节点
从节点

三、高可用验证

3.1 模拟宕机

注意:杀死192.168.248.131主机中keepalived和nginx

#结束keepalived进程
kill -9 123855 123857 123858 

#关闭nginx
/usr/local/nginx/sbin/nginx -s stop

3.2 查看虚拟ip

注意当主节点宕机后,从节点自动绑定虚拟ip

#查看ip信息
ip addr

查看虚拟ip

3.3 访问Nginx

#访问虚拟ip
http://192.168.248.99:80

nginx主页

3.4 恢复主机

注意:重启192.168.248.131:主节点: keepalivednginx服务

#重启keepalived
service keepalived restart

#启动nginx并指定配置
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf   

2.5 查看虚拟ip

注意当主节点keepalived正常运行时,虚拟ip已经归属主节点,从节点虚拟ip已经消失

#查看ip信息
ip addr

192.168.248.131:主节点
主节点
192.168.248.132:从节点
从节点

至此keepalived 对nginx高可用已经实现!!!

思考

本文已经使用keepalived监控机制实现了nginx高可用。当然keepalived 也可以实现其它应用的高可用,我们得站在作者的角度去思考问题,只要逻辑走得通,那必然没问题!

敬请期待下篇:keepalived实现MySQL高可用实战


总结

我是南国以南i记录点滴每天成长一点点,学习是永无止境的!转载请附原文链接!!!

参考链接、参考链接、参考链接、

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自己DIY装机后,如何使用U盘装系统

最近自己整了一台主机,然后需要装一下系统,这边就讲一下如何用U盘给新电脑装系统。 安装Windows 10 光盘映像 首先你需要一个内存大于8GB的U盘,并且是纯净的,里面没有东西。 这边以Windows 10 为例: 百度搜索 下载…

IMX6ULL 启动方式之启动设备的选择

一. 硬件启动方式选择 汇编程序启动 LED 灯实验,是从SD卡读取 bin 文件并启动,说明 IMX6ULL 支持从 SD 卡启动。 IMX6ULL 支持多种启动方式。 注意:硬件原理图中,标注 DNP ( do not pupulate) 的意思是不焊接,即没…

【AcWing】归并排序及其应用

🎆音乐分享 (点击链接可以听哦😎) 无名之辈 - 陈雪燃 目录 归并排序 归并排序应用 文章中的图片来源: (2条消息) 归并排序(分治法)_分治法 归并排序_小小的香辛料的博客-CSDN博客 AcWing…

Springboot怎么实现WebSocket通信(二)

前言上一篇文章分享了单机模式下,websocket的基本使用方法,但在实际的业务中,通常是不会这样使用的,大部项目都是分布式部署的,一个工程布署了多个服务节点,前端并不直接请求具体服务节点,而是先…

C51---PWM 脉冲宽度调制

1.PWM:脉冲宽度调制,它是通过一系列脉冲宽度进行调制,等效出所需要的波形(包含形状以及幅值)。对模拟信号电平进行数字编码。也就是说通过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于…

第九届省赛——6打印大X

题目:本题目要求你在控制台输出一个由数字组成的等腰三角形。具体的步骤是:1. 先用1,2,3,...的自然数拼一个足够长的串2. 用这个串填充三角形的三条边。从上方顶点开始,逆时针填充。比如,当三角形高度是8时&#xff1a…

【Java开发】JUC进阶 06:异步回调、JMM、Volatile

1 异步回调异步是多线程的一种特殊实现方式📌 举例我需要一个计算时间5秒方法的返回值我不想等这5秒钟,我想要继续执行下面的代码,那就异步执行这个方法当我通过get去获取这个返回值时,如果已经过了5秒,也就是方法执行…

16、参数估计

概率基本定义先验分布:似然函数:后验分布:贝叶斯公式:,其中后验分布 似然函数 先验分布 / P(D)贝叶斯公式假设,现在有两个一定概率发生的事件A和B,且它们之间存在一定的关系P(A) 表示事件A发生…

UNIX网络编程卷一 学习笔记 第八章 基本UDP套接字编程

UDP是无连接不可靠的数据报协议,不同于TCP提供的面向连接的可靠字节流。使用UDP编写的常见程序有:DNS、NFS、SNMP。 以下是典型的UDP客户/服务器程序的函数调用,客户不与服务器建立连接,而是只使用sendto函数给服务器发送数据报&…

03_Linux压缩解压,用户用户组,文件权限

目录 Linux下常用的压缩格式 gzip 压缩工具 gzip 对文件夹进行压缩 bzip2 压缩工具 tar打包工具 对.tar.bz2 进行压缩和解压缩 对.tar.gz 进行压缩和解压缩 rar格式 zip格式 Linux用户 Linux用户组 创建用户和用户组 Linux文件权限 Linux文件权限修改 Linux下常用…

windows10安装nodejs

一、下载 官网 Download | Node.js 某云盘 链接:https://pan.baidu.com/s/1PCd4fh4ohEvAc8qSrb4-WA 提取码:yola 二、安裝 双击安装程序:具体步骤如下: 设置环境变量 验证安装是否安装成功 进入cmd命令行窗口,输入…

SQL优化操作1

一.存储过程建表 建两张30万条数据的表以做测试用 1.user_course_info delimiter $$ # 定义结束符 drop procedure if exists addTestDataOne; # 存储过程名叫:addTestData create procedure addTestDataOne() begin declare number int; set number 1; w…

node 配置 vue npm配置

下载node 版本16https://nodejs.org/download/release/v16.16.0/node-v16.16.0-x64.msi复制安装地址,省空间,生报错老老实实复制就好D:\Program\nodejs新建node_cache和node_globalD:\Program\nodejs\node_cacheD:\Program\nodejs\node_global运行命令np…

Sentinel架构篇 - 熔断降级

熔断降级 概念 除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。一个服务常常会调用其它模块,可能是一个远程服务、数据库、或者第三方 API 等。然而,被依赖的服务的稳定性是不能保证的。如果依赖的服…

原生HTML放大镜

该放大区域用背景图片放大 <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compat…

Linux - buff和cache的区别

free -h命令可以查看内存的使用情况 [rootzabbix-server ~]# free -htotal used free shared buff/cache available Mem: 1.8G 432M 894M 10M 492M 1.2G Swap: 2.0G 0B 2.0G为什…

抖音小程序实践四:实现小程序分享

有时候我们要把一个小程序分享给别人&#xff0c;去看套餐、买东西之类的&#xff0c;是一个很常见的功能&#xff0c;但是在接入抖音小程序的时候&#xff0c;初始化右上角三个点并没有分享的入口&#xff0c;那看来不是要申请&#xff0c;就是有别的开发的口子了。下面我们一…

《SQL基础》17. InnoDB引擎

InnoDB引擎InnoDB引擎逻辑存储结构架构内存结构磁盘结构后台线程事务原理事务基础redo logundo logMVCC基本概念隐式字段undo log版本链readView原理分析InnoDB引擎 逻辑存储结构 InnoDB的逻辑存储结构如下图所示&#xff1a; 表空间 表空间是InnoDB存储引擎逻辑结构的最高层…

React18 setState是同步还是异步?

相信大家对于react的setState肯定是不陌生了, 这是一个用于更新状态的函数. 但是在之前有一道非常经典的面试题就是关于setState是同步还是异步的问题, 具体可以参考我之前写的一篇文章: 一篇文章彻底理解setState是同步还是异步&#xff01;. 对于react 18之前的版本, 上文说的…

2019年MathorCup数学建模A题数据驱动的城市轨道交通网络优化策略解题全过程文档及程序

2019年第九届MathorCup高校数学建模挑战赛 A题 数据驱动的城市轨道交通网络优化策略 原题再现&#xff1a; 截至 2018 年 12 月 31 日&#xff0c;中国内地累计共有 35 座城市建成并投运城市轨道交通&#xff0c;里程共计 5766.6 公里。进入“十三五”以来&#xff0c;三年累…