实现基于 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.rhkb.cn/news/220291.html

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

相关文章

Linux——权限

个人主页:日刷百题 系列专栏:〖C语言小游戏〗〖Linux〗〖数据结构〗 〖C语言〗 🌎欢迎各位→点赞👍收藏⭐️留言📝 ​ ​ 一、 Linux下用户的分类 Linux下有两种用户: 1. root(超级管理员用户…

饥荒Mod 开发(十三):木牌传送

饥荒Mod 开发(十二):一键制作 饥荒Mod 开发(十四):制作屏幕弹窗 一键传送源码 饥荒的地图很大,跑地图太耗费时间和饥饿值,如果大部分时间都在跑图真的是很无聊,所以需要有一个能够传送的功能,不仅可以快速…

JOSEF约瑟三相电流继电器 HJL-93/AY AC220V 0.2-6A 导轨安装

HJL-93B数字式交流三相电流继电器 系列型号 HJL-93/AY数字式交流三相电流继电器;HJL-93/A数字式交流三相电流继电器; HJL-93/BY数字式交流三相电流继电器;HJL-93/B数字式交流三相电流继电器; HJL-F93/AY数字式交流三相电流继电…

ARM KEIL 安装

根据设备类型安装开发工具及环境 Arm,Cortex ----> MDK-Arm 8051 ----> C51 80251 ----> C251 C166,XC166,XC2000 MCU设备 ----> C155 填写信息提交后下载 点击MDK539.EXE下载 : MDK539.EXE 双击MDK539安装 点击Next 默认安装路径,点击Ne…

Linux系统管理、服务器设置、安全、云数据中心

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 我们来快速了解liunx命令 文章目录 前言解析命令提示符linux的文件和目录文件和目录管理文件操作 进程管理命令系统管理网络管理 书籍推荐 本文以服务器最常用的CentOS为例 解析命令提示…

星融元中标华夏银行项目,助力金融数据中心可视网建设工作

近日,星融元成功入围华夏银行国产品牌网络流量汇聚分流器(TAP)设备供应商,在助力头部金融机构构建数据中心可视网络的建设工作中,星融元又一次获得全国性股份制银行客户的青睐。 华夏银行作为全国性股份制商业银行积极…

前端开发中的webpack打包工具

前端技术发展迅猛,各种可以提高开发效率的新思想和框架层出不穷,但是它们都有一个共同点,即源代码无法直接运行,必须通过转换后才可以正常运行。webpack是目前主流的打包模块化JavaScript的工具之一。 本章主要涉及的知识点有&am…

UDP特性之组播(多播)

UDP特性之组播 1. 组播的特点2. 设置主播属性2.1 发送端2.2 接收端 3. 组播通信流程3.1 发送端3.2 接收端 4. 通信代码 原文链接 在公司测试广播和多播有一点问题。。。 1. 组播的特点 组播也可以称之为多播这也是UDP的特性之一。组播是主机间一对多的通讯模式,是…

Linux之FTP 服务器

一、FTP服务器匿名账户服务器配置 1、测试是否已安装vsftp服务器: 2、启动vsftp服务器: 3、修改vsftp主配置文件,允许匿名登录 4、重新启动vsftpd服务,禁用防火墙 5、打开FTP服务的数据文件存放目录/var/ftp,复制若干文件到该目…

端口占用命令 netstat (centos)+netstat (windows)

linux 1.使用 netstat 命令查看端口占用情况 netstat -tlnp 使用 -p 选项查看进程信息。 使用 -t 选项列出 TCP 协议的连接:类似(使用 -u 选项列出 UDP 协议的连接:) 2.查找占用指定端口号的应用信息 netstat -tlnp | grep 3…

C#拼接JSON

一、业务背景 最近项目需要与U8c对接,实现增删改查,借此机会,梳理一下C#解析Json字符串的问题。 这篇文章,先以新增接口为例。 二、新增接口 查看需要传入的json格式。 拼接json,无非就是{}和[]的来回嵌套。 首先&am…

「数据结构」二叉树1

🎇个人主页:Ice_Sugar_7 🎇所属专栏:C启航 🎇欢迎点赞收藏加关注哦! 文章目录 🍉树🍉二叉树🍌特殊二叉树🍌二叉树的性质🍌存储结构 🍉…

Multimodal Chain-of-Thought Reasoning in Language Models语言模型中的多模态思维链推理

Abstract 大型语言模型 (LLM) 通过利用思维链 (CoT) 提示生成中间推理链作为推断答案的基本原理,在复杂推理方面表现出了令人印象深刻的性能。然而,现有的 CoT 研究主要集中在语言情态上。我们提出了 Multimodal-CoT,它将语言(文本…

基于Arduino的智能太阳能追光系统(论文+源码)

1. 系统设计 本次的设基于Arduino的智能太阳能追光系统的设计,整体结构如图2.1所示。整个系统包括Arduino开发板,按键模块,太阳能板,X轴电机,Y轴电机,电池充电模块,电源模块,四路光照检测模块等…

网神防火墙后台用户敏感信息泄露漏洞复现

简介 网神防火墙是一款由中国知名网络安全公司启明星辰开发的防火墙产品。它提供了全面的网络安全防护功能,旨在保护企业网络免受各种网络威胁和攻击。 该产品存在用户账号信息泄露漏洞,通过构造特定数据包,获取防火墙管理员登录的账号密码。 漏洞复现 FOFA语法: body=&…

PCL点云处理之点云置平(拟合平面绕中心旋转到绝对水平)(二百二十七)

PCL点云处理之点云置平(绕中心旋转到绝对水平)(二百二十七) 一、什么是点云置平二、算法流程三、算法实现一、什么是点云置平 有时候,我们处理的点云平面并非位于水平面,而是位于某个任一三维平面上,而大多数算法又只能在水平面处理,或者水平面的点云处理是相对更简单…

springcloud:对象存储组件MinIO

类似于FastDFS/HDFS的一个文件存储服务! SpringBoot整合MinIO实现分布式文件服务! #MinIO简介? Minio 是个基于 Golang 编写的开源对象存储套件,基于Apache License v2.0开源协议,虽然轻量,却拥有着不错的…

Kafka-Kafka基本原理与集群快速搭建(实践)

Kafka单机搭建 下载Kafka Apache Download Mirrors 解压 tar -zxvf kafka_2.12-3.4.0.tgz -C /usr/local/src/software/kafkakafka内部bin目录下有个内置的zookeeper(用于单机) 启动zookeeper(在后台启动) nohup bin/zookeeper-server-start.sh conf…

图片速览 PoseGPT:基于量化的 3D 人体运动生成和预测(VQVAE)

papercodehttps://arxiv.org/pdf/2210.10542.pdfhttps://europe.naverlabs.com/research/computer-vision/posegpt/ 方法 将动作压缩到离散空间。使用GPT类的模型预测未来动作的离散索引。使用解码器解码动作得到输出。 效果 提出的方法在HumanAct12(一个标准但小规…

KSP音频抓包

1. 按照网上其他教程&#xff0c;安装KSP抓音频 Biu~笔记&#xff1a;高通蓝牙ADK&#xff08;38&#xff09;-- KSP in MDE - 大大通(简体站) Biu~笔记&#xff1a;高通蓝牙ADK&#xff08;22&#xff09;--DSP音频链路监听 - 大大通(简体站) <<Biu~笔记&#xff1a;高…