当前位置: 首页 > 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小时服务。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 面试算法-148-轮转数组
  • Chatgpt掘金之旅—有爱AI商业实战篇|内容策展业务|(八)
  • Springboot中JSCH的使用
  • RabbitMQ面经 手敲浓缩版
  • iOS 开发中上传 IPA 文件的方法(无需 Mac 电脑
  • 2014最新AI智能系统ChatGPT网站源码+Midjourney绘画网站源码+搭建部署教程文档
  • 【嵌入式开发 Linux 常用命令系列 4.3 -- git add 不 add untracked file】
  • Zookeeper脑裂解决方案
  • 面试题:MySQL 优化篇
  • 达梦备份与恢复
  • vue3中封装table表格
  • git提交代码时报错,提不了
  • 【Linux进阶之路】地址篇
  • Java集合体系面试题
  • 书生·浦语大模型-第三节课笔记/作业
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • 2017年终总结、随想
  • Android优雅地处理按钮重复点击
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • eclipse(luna)创建web工程
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • Sass Day-01
  • Vue UI框架库开发介绍
  • Vue组件定义
  • webpack入门学习手记(二)
  • 给初学者:JavaScript 中数组操作注意点
  • 今年的LC3大会没了?
  • 你对linux中grep命令知道多少?
  • ​1:1公有云能力整体输出,腾讯云“七剑”下云端
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​人工智能书单(数学基础篇)
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (C语言)fgets与fputs函数详解
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (八十八)VFL语言初步 - 实现布局
  • (二)WCF的Binding模型
  • (二)原生js案例之数码时钟计时
  • (二十四)Flask之flask-session组件
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (十一)c52学习之旅-动态数码管
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • (四)鸿鹄云架构一服务注册中心
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)iOS字体
  • (转)Sublime Text3配置Lua运行环境
  • (转)程序员疫苗:代码注入
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .Net 4.0并行库实用性演练