实现基于 Keepalived 和 Nginx 的高可用架构

目录

  • 前言
  • 1 高可用性简介
  • 2 准备服务器和软件
  • 3 高可用的配置(主从配置)
    • 3.1 配置/etc/keepalived/keepalived.conf文件
    • 3.2 配置/usr/local/src/nginx_check.sh脚本文件
  • 4 启动软件
  • 5 测试
  • 结语

前言

在现代互联网架构中,高可用性是至关重要的。Nginx是一款高性能的Web服务器,而Keepalived是一种在Linux系统上提供高可用性的解决方案。本文将介绍如何结合这两者,构建一个高可用的Nginx集群,确保系统在主服务器故障时能够无缝切换到备份服务器,从而保证服务的连续性和稳定性。

1 高可用性简介

在当今计算机系统中,高可用性是一项至关重要的特性。它代表着系统或组件在面对各种故障和异常情况时,仍能够保持持续可用的能力。通过利用多台服务器和冗余组件,构建高可用性架构旨在降低单点故障的风险,确保系统能够持续稳定地运行。这种设计理念和实践对于确保用户体验和服务连续性至关重要,特别是在对服务可靠性要求极高的应用场景下。

在这里插入图片描述

2 准备服务器和软件

  • 两台Nginx服务器
  • 两个Tomcat服务器
  • 一个虚拟IP

在两台CentOS 7虚拟机服务器上安装Nginx,并确保防火墙已开放默认的80端口。

安装Keepalived并检查安装情况:

yum install keepalived -y
rpm -q -a keepalived

3 高可用的配置(主从配置)

Keepalived的配置文件位于 /etc/keepalived/keepalived.conf。还需编写用于检测Nginx的脚本文件 /usr/local/src/nginx_check.sh

3.1 配置/etc/keepalived/keepalived.conf文件

global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.17.129smtp_connect_timeout 30router_id LVS_DEVEL
}vrrp_script chk_http_port {script "/usr/local/src/nginx_check.sh"interval 2	#(检测脚本执行的间隔)weight 2
}vrrp_instance VI_1 {state BACKUP	# 备份服务器上将 MASTER 改为 BACKUPinterface ens33	//网卡virtual_router_id 51	# 主、备机的 virtual_router_id 必须相同priority 100	# 主、备机取不同的优先级,主机值较大,备份机值较小advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.17.50 // VRRP H 虚拟地址}
}

这份 Keepalived 的配置文件中包含了几个重要的部分:

  • global_defs(全局定义):

    • notification_email 部分列出了故障通知邮件的接收地址。
    • notification_email_from 指定了故障通知邮件的发件人地址。
    • smtp_server 设置了用于发送邮件的 SMTP 服务器地址。
    • smtp_connect_timeout 设置了与 SMTP 服务器建立连接的超时时间。
    • router_id 给出了 Keepalived 路由器的标识。
  • vrrp_script(VRRP 脚本):
    - chk_http_port 定义了一个 VRRP 脚本,指定了用于检测 HTTP 端口可用性的脚本文件路径。
    - interval 规定了检测脚本执行的时间间隔。
    - weight 给出了脚本执行的权重。

  • vrrp_instance(VRRP 实例):
    - VI_1 是一个 VRRP 实例的名称。
    - state 设置了该实例所在服务器的状态,这里是备份状态。
    - interface 指定了 VRRP 实例所在的网卡。
    - virtual_router_id 用于唯一标识一个 VRRP 实例,需要与其他节点相同。
    - priority 规定了实例的优先级,备份服务器的优先级一般设置为较小的值。
    - advert_int 设置了 VRRP 广播间隔。
    - authentication 部分指定了认证类型和密码。
    - virtual_ipaddress 列出了虚拟 IP 地址,这个地址会在主服务器故障时切换到备份服务器。

这个配置文件的作用是确保在主服务器发生故障时,备份服务器能够接管并使用虚拟 IP 地址继续提供服务,保证系统的高可用性。

3.2 配置/usr/local/src/nginx_check.sh脚本文件

#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then killall keepalived
fi
fi

这段 Bash 脚本的作用是检测 Nginx 进程是否在运行。脚本执行的步骤如下:

  • 使用 ps 命令检查是否有 Nginx 进程在运行,并将结果赋值给变量 A
  • 如果没有发现 Nginx 进程(即 $A 等于 0),则尝试启动 Nginx。
  • 给 Nginx 启动一定的时间(2秒)来确保它能够完全启动。
  • 再次检查是否成功启动了 Nginx,如果仍然没有发现 Nginx 进程,则执行 killall keepalived 命令,强制关闭 Keepalived 服务。

总体来说,这段脚本用于监测并确保 Nginx 进程的运行。如果发现 Nginx 进程不存在,它会尝试重启 Nginx 并检查是否启动成功,若依然无法启动,则会强制关闭 Keepalived 服务。这样的脚本通常用于保证在 Nginx 出现故障时及时处理,以维护系统的稳定性和可用性。

4 启动软件

在启动 Nginx 之前,首先需要进入 Nginx 的安装目录,通常位于 /usr/local/nginx/ 或者自定义的安装路径。接着运行 ./nginx 命令来启动 Nginx 服务。这个命令将启动 Nginx 并开始监听来自客户端的请求,使其能够响应和处理网页访问等相关请求。

启动 Keepalived 的步骤可能涉及不同系统和发行版的差异,一种通用的方式是使用 systemctl start keepalived.service 命令。这个命令会调用系统服务管理器(如 Systemd),启动 Keepalived 服务。Keepalived 在运行中负责监测系统状态并确保在主服务器故障时实现自动故障转移,保证服务的高可用性。

这些步骤的正确执行能够确保 Nginx 和 Keepalived 正常运行,并为系统提供了高可用性保障,即使在出现主服务器故障时也能保持服务的连续性。

5 测试

当输入虚拟 IP 地址进行访问时,若能够正常访问,则表明虚拟 IP 地址的绑定是成功的。这种情况下,系统会将请求定向到正在提供服务的服务器上。这种无缝切换保证了在主服务器故障时,备份服务器可以接管并继续提供服务。

停止主服务器中的 Nginx 和 Keepalived 服务后,再次使用虚拟 IP 地址进行访问。如果依然能够正常访问,这表示备份服务器已经成功地接管了服务。在备份服务器上,可以通过执行 ip a 命令查看网络接口信息,其中会显示已绑定的虚拟 IP 地址,确认备份服务器已经接管了虚拟 IP 地址并正在处理来自客户端的请求。

这种测试能够验证整个高可用性方案的有效性,确保在主服务器出现故障时,备份服务器能够顺利接管服务并保持系统的稳定运行。

结语

融合了 Nginx 和 Keepalived 的高可用解决方案为系统带来了强大的故障转移能力。这种架构不仅能够确保服务的连续性,还能有效地应对单点故障。当主服务器遭遇问题时,Keepalived 可以迅速地将流量转移到备份服务器,实现了无缝的故障转移,用户几乎感知不到服务中断的情况。这种高可用性解决方案不仅提高了系统的稳定性,也为应对突发状况提供了可靠的应急措施。这种架构设计在保障持续性服务方面扮演着关键角色,对于那些对服务可靠性要求极高的应用场景尤为重要。

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

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

相关文章

<九>JavaScript中的基本数据类型和引用数据类型

一、栈内存和堆内存 基本数据类型(值类型)存放在“栈内存”中。引用数据类型(对象类型)存放在“堆内存”中。栈内存和堆内存是一种对内存的管理方式和模型概念,不存在物理分割。 “栈”具有线程和“先进后出”的特点…

GBJ2510-ASEMI逆变器专用整流桥GBJ2510

编辑:ll GBJ2510-ASEMI逆变器专用整流桥GBJ2510 型号:GBJ2510 品牌:ASEMI 封装:GBJ-4 最大平均正向电流:25A 最大重复峰值反向电压:1000V 产品引线数量:4 产品内部芯片个数:…

基于ssm防疫信息登记系统的设计与实现论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本防疫信息登记系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息…

配置https环境

为什么要配置https环境 在使用 HTML5 的 API 时,很多 API 只能在 https 保证安全的情况下才能开启。这就要求我们在本地开发环境也能够配置 https,否则你需要每次部署到配有 https 的测试环境中才能看到预览效果,这对开发的敏捷度造成了极大…

网络空间搜索引擎- FOFA的使用技巧总结

简介 FOFA是一款网络空间测绘的搜索引擎,旨在帮助用户以搜索的方式查找公网上的互联网资产。 FOFA的查询方式类似于谷歌或百度,用户可以输入关键词来匹配包含该关键词的数据。不同的是,这些数据不仅包括像谷歌或百度一样的网页,还…

AI语音电话机器人识别技术声音合成声音是怎么实现的

AI语音识别技术的声音合成是通过将文本转换为声音信号的过程实现的。这个过程包含以下步骤: 文本分析和处理:首先,输入的文本会接受分析和处理。这可能涉及到词法分析、语法分析和语义分析等技术,用于理解文本的含义和上下文。 …

【Mybatis】日常知识点随笔(持续更新)

目录 【K】Mybatis使用Select注解书写简单sql 【K】MySQL 数据类型与 Java 类型的对应关系 【K】Mybatis相同代码复用 1. 定义公共 SQL 片段 2. 引用公共 SQL 片段 3. 使用参数 4. 复用和组合 5. 注意事项 【K】mysql如何实现插入一条数据后立刻获取该数据自增长id进行…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)更改应用图标

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)更改应用图标 一、操作环境 操作系统: Windows 10 专业版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、更改图标 图标的位置:entry->src->main->resources->-b…

智慧校园2.0物联网管理平台建设方案:PPT全文22页,附下载

关键词:物联网解决方案,智慧校园解决方案,物联网平台建设方案,物联网应用技术 一、智慧校园2.0物联网管理平台建设背景 1、教育现代化和强国建设的需要:近年来,国家为了加快推进教育现代化、教育强国建设…

java SpringCloud版本b2b2c鸿鹄云商平台全套解决方案

使用技术: Spring CloudSpring BootMybatis微服务服务监控可视化运营 B2B2C平台: 平台管理端(包含自营) 商家平台端(多商户入驻) PC买家端、手机wap/公众号买家端 微服务(30个通用微服务如:商品、订单、购物车、个人中心、支…

kubernetesr安全篇之云原生安全概述

云原生 4C 安全模型 云原生 4C 安全模型,是指在四个层面上考虑云原生的安全: Cloud(云或基础设施层)Cluster(Kubernetes 集群层)Container(容器层)Code(代码层&#xf…

[密码学]AES

advanced encryption standard,又名rijndael密码,为两位比利时数学家的名字组合。 分组为128bit,密钥为128/192/256bit可选,对应加密轮数10/12/14轮。 基本操作为四种: 字节代换(subBytes transformatio…

结构体基础例题

这里写目录标题 例题一例题解析答案 例题二例题解析答案 例题三例题解析答案 例题四例题解析答案 例题五例题解析及答案 例题六例题解析及答案 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 🐒🐒🐒 个人主页 &#x1f978…

Elasticsearch——快速入门

从零基础的内容开始介绍Elasticsearch,主要包含以下内容: Elasticsearch的定义、优点,以及典型的业务场景。Elasticsearch中重要的概念。Elasticsearch典型的接入方式。安装Elasticsearch。使用Kibana调试Elasticsearch。Elasticsearch节点的…

何为内存泄漏?如何监测并防止内存泄漏事故发生?

内存泄漏会严重影响计算机的性能,但它们到底是什么,为什么会发生?如何检测和防止内存泄漏呢? 本文需要解决的关键要点: 1)当应用程序无法返回分配的内存时,就会发生内存泄漏,逐渐消…

JavaEE:线程池精讲

目录 一.什么是线程池 二.线程池的实现原理 🎈为什么要有工厂模式? 三.线程池的构造方法解读 🎈线程池的拒绝策略 四.自己实现一个线程池 一.什么是线程池 简单来说,线程池就好比一块鱼塘,鱼塘中的每条鱼就是一个线程…

如何在Eclipse中安装WindowBuilder插件,详解过程

第一步:找到自己安装eclipse的版本,在Help-关于eclipse里面,即Version 第二步:去下面这个网站找到对应的 link(Update Site),这一步很重要,不然版本下载错了之后还得删除WindowBuil…

常用的Webstrom插件

Active Tab Highlighter 高亮选中的tab Atom Material Icons 图标,个人觉得还是挺好看,各类分拣也能区分的很明显 Code Remark 代码标记 Gitmoji Plus git提交时候的小图标 GitToolBox git工具,免费版本就支持鼠标在哪一行就显示提交的信…

Scala多线程爬虫程序的数据可视化与分析实践

一、Scala简介 Scala是一种多种类型的编程语言,结合了针对对象编程和函数式编程的功能。它运行在Java虚拟机上,具有强大的运算能力和丰富的库支持。Scala常用于大数据处理、并发编程和Web应用程序开发。其灵活性和高效性编程成为编写多线程爬虫程序的理…

Python开发GUI常用库PyQt6和PySide6介绍之一:概述

Python开发GUI常用库PyQt6和PySide6介绍之一:概述 Python开发GUI有许多选择,下面是常见的选择: Tkinter:Tkinter是Python标准库中的一个GUI工具包,易于学习和使用。它提供了丰富的组件和布局选项,适用于简…