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

深入浅出 -- 系统架构之负载均衡Nginx实现高可用

一、Nginx的高可用

   线上如果采用单个节点的方式部署Nginx,难免会出现天灾人祸,比如系统异常、程序宕机、服务器断电、机房爆炸、地球毁灭....哈哈哈,夸张了。但实际生产环境中确实存在隐患问题,由于Nginx作为整个系统的网关层接入外部流量,所以一旦Nginx宕机,最终就会导致整个系统不可用,这无疑对于用户的体验感是极差的,因此也得保障Nginx高可用的特性。

接下来则会通过keepalivedVIP机制,实现Nginx的高可用。
VIP并不是只会员的意思,而是指Virtual IP,即虚拟IP

keepalived在之前单体架构开发时,是一个用的较为频繁的高可用技术,比如MySQL、Redis、MQ、Proxy、Tomcat等各处都会通过keepalived提供的VIP机制,实现单节点应用的高可用。

Keepalived+重启脚本+双机热备搭建

具体青请参考,在上篇《深入浅出 -- 系统架构之Keepalived搭建双机热备》中通过keepalived如何搭建了主从双机热备。

Nginx高可用性测试

   经过上述步骤后,keepalivedVIP机制已经搭建成功,在上个阶段中主要做了几件事:

  • 一、为部署Nginx的机器挂载了VIP
  • 二、通过keepalived搭建了主从双机热备。
  • 三、通过keepalived实现了Nginx宕机重启。

由于前面没有域名的原因,因此最初server_name配置的是当前机器的IP,所以需稍微更改一下nginx.conf的配置:

sever{listen    80;# 这里从机器的本地IP改为虚拟IPserver_name 192.168.12.111;# 如果这里配置的是域名,那么则将域名的映射配置改为虚拟IP
}

最后来实验一下效果:

在上述过程中,首先分别启动了keepalived、nginx服务,然后通过手动停止nginx的方式模拟了Nginx宕机情况,过了片刻后再次查询后台进程,我们会发现nginx依旧存活。

从这个过程中不难发现,keepalived已经为我们实现了Nginx宕机后自动重启的功能,那么接着再模拟一下服务器出现故障时的情况:

在上述过程中,我们通过手动关闭keepalived服务模拟了机器断电、硬件损坏等情况(因为机器断电等情况=主机中的keepalived进程消失),然后再次查询了一下本机的IP信息,很明显会看到VIP消失了!

现在再切换到另外一台机器:192.168.12.130来看看情况:

此刻我们会发现,在主机192.168.12.129宕机后,VIP自动从主机飘移到了从机192.168.12.130上,而此时客户端的请求就最终会来到130这台机器的Nginx上。

最终,利用KeepalivedNginx做了主从热备之后,无论是遇到线上宕机还是机房断电等各类故障时,都能够确保应用系统能够为用户提供7x24小时服务。

http://www.lryc.cn/news/334312.html

相关文章:

  • 鲸鱼优化算法(Whale Optimization Algorithm)
  • C++内存管理new-delete大法及实现原理
  • Spring WebFlux响应式实现WebFilter解决跨域问题
  • 第4章 Redis,一站式高性能存储方案,笔记问题
  • UVA540 Team Queue 解题报告
  • 基础贪心问题
  • day13 java final 类和对象的初始化执行顺序
  • 蓝桥杯gcd汇总
  • 极市平台 | 综述:一文详解50多种多模态图像融合方法
  • 数据结构系列-队列的结构和队列的实现
  • MySQL——查询数据的处理
  • 【机器学习300问】59、计算图是如何帮助人们理解反向传播的?
  • ctfshow web入门 php特性 web108--web115
  • 京东API接口采集商品详情数据(测试入口如下)
  • Mac brew 安装软件
  • 【顶部距离计算】计算元素顶部与浏览器顶部的距离
  • 守护人类健康:人工智能赋能医疗领域创新应用
  • linux常用指令(一)——cat、more、cp
  • 基于RTThread的学习(三):正点原子潘多拉 QSPI 通信 W25Q128 实验
  • Mac反编译APK
  • Java数据结构-队列
  • JVM专题——类文件结构
  • 零基础10 天入门 Web3之第2天
  • Vue和FastAPI实现前后端分离
  • 34470A是德科技34470A数字万用表
  • iOS 开发中上传 IPA 文件的方法(无需 Mac 电脑
  • c语言多媒体文件管理及检索系统220
  • 链表之双向链表的实现
  • 小白学大模型:什么是生成式人工智能?
  • 并发编程01-深入理解Java并发/线程等待/通知机制