【运维实践项目|003】:Nginx集群化运维升级项目

项目名称

项目简称或代号:SUN项目(这个可以自己随便编一个,每个公司的每个项目简称或代号都是内部任意起名的,显得专业一点,一般是项目关键词的首拼,比如这个CSUN是:ScaleUp Nginx)

项目全名:Nginx集群化运维升级项目 - "ScaleUp Nginx"

项目背景

随着公司业务的发展和用户量的不断增长,现有的Nginx服务器集群已逐渐无法满足高性能、高可用的要求。同时,老旧的Nginx版本存在安全隐患和性能瓶颈,需要进行升级和优化。因此,公司决定启动"ScaleUp Nginx"项目,对Nginx集群进行全面的升级和改造。

项目目标

  1. 升级Nginx到[ nginx-1.25.4]版本,提高安全性和性能。

  2. 优化Nginx集群架构,提高系统的可扩展性和容错能力。

  3. 实现Nginx集群的自动化运维,减少人工干预和错误。

  4. 制定完善的监控和告警策略,确保Nginx集群的稳定运行。

项目成果

  1. 成功将Nginx升级到 nginx-1.25.4版本,并通过安全测试。

  2. 构建了高性能、高可用的Nginx集群架构,支持水平扩展和负载均衡。

  3. 实现了Nginx集群的自动化运维,包括配置管理、版本更新、故障恢复等。

  4. 建立了完善的监控和告警系统,确保Nginx集群的稳定运行。

我的角色与职责

在"ScaleUp Nginx"项目中,我担任运维团队的核心成员,负责Nginx集群的升级、优化和自动化运维工作。

我主要完成的工作内容

  1. 研究Nginx最新版本的功能和性能,制定升级方案。

  2. 编写自动化脚本,实现Nginx集群的自动化部署和配置管理。

  3. 优化Nginx集群架构,包括负载均衡、缓存、SSL配置等。

  4. 搭建监控和告警系统,实时监控Nginx集群的运行状态。

本次项目涉及的技术

  1. Nginx及其模块(如ngx_http_ssl_module、ngx_http_proxy_module等)

  2. 自动化运维工具(如Ansible、Shell脚本等)

  3. 监控和告警系统(如Prometheus、Grafana、zibbix等)

  4. 版本控制系统(如Git)

本次项目遇到的问题与解决方法

问题1:nginx-1.25.4版本与现有应用存在兼容性问题。

解决方法:分析兼容性问题的原因,调整Nginx配置或应用代码,确保兼容性。

问题2:自动化部署脚本执行过程中存在错误。 解决方法:检查脚本逻辑和语法,发现因为操作系统未安装开发工具包组件,修复错误并在nginx自动化安装脚本中添加安装开发工具包组件的相关命令,并进行充分的测试。

本次项目中可能被面试官问到的问题

问题1:为什么选择nginx-1.25.4版本,nginx官方最新版本是哪一个版本?

nginx官方发布的版本公告为2024-04-23发布的版本nginx-1.26.1,截至2024年5.13日并未发布新版本。

选择nginx-1.25.4版本是因为新版本nginx的功能相比于老版本更强大和更加稳定。没有考虑最新版本是因为考虑到最新版本发布的时间并不久,可能会存在稳定性等未知因素,经综合考虑觉得采用新版本但不能是最新的nginx版本。

问题2:Nginx应用场景?

  • http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。

  • 虚拟主机。可以实现在一台服务器虚拟出多个网站,例如个人网站使用的虚拟机。

  • 反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会应为某台服务器负载高宕机而某台服务器闲置的情况。

  • nginz 中也可以配置安全管理、比如可以使用Nginx搭建API接口网关,对每个接口服务进行拦截。

问题3:Nginx 有哪些优点?

  • 跨平台、配置简单。

  • 非阻塞、高并发连接:处理 2-3 万并发连接数,官方监测能支持 5 万并发。

  • 内存消耗小:开启 10 个 Nginx 才占 150M 内存。

  • 成本低廉,且开源。

  • 稳定性高,宕机的概率非常小。

  • 内置的健康检查功能:如果有一个服务器宕机,会做一个健康检查,再发送的请求就不会发送到宕机的服务器了。重新将请求提交到其他的节点上

问题4:nginx中怎么配置反向代理?

在nginx配置文件的server模块中配置要代理的后端服务器的信息,如下:

server {  
......location / {  proxy_pass http://ip:端口;  proxy_set_header Host $host;  proxy_set_header X-Real-IP $remote_addr;  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  }  
}#在server块中,你需要指定Nginx监听的端口和域名
#使用location指令来定义哪些URL应该被代理到后端服务器
#使用proxy_pass指令来指定请求应该被转发到的后端服务器地址。你可以使用在upstream指令中定义的服务器组名
#使用proxy_set_header指令来设置请求头,以便后端服务器能够正确地处理请求
如果要代理的后端服务器比较多,也可以在upstream模块中配置多个后端服务器地址端口信息,然后在server模块中直接调用这个upstream模块名称即可
upstream name_001 {  server backend1.example.com;  server backend2.example.com;  
}
​
server {  
.......location / {  proxy_pass http://name_001;  }  
}

问题5:什么是正向代理?

一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。

客户端才能使用正向代理。正向代理总结就一句话:代理端代理的是客户端。例如说:我们使用的OpenVPN 等等。

问题6:什么是反向代理?

反向代理(Reverse Proxy)方式,是指以代理服务器来接受 Internet上的连接请求,然后将请求,发给内部网络上的服务器并将从服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

问题7:nginx反向代理服务器的优点是什么?

反向代理服务器可以隐藏源服务器的存在和特征。它充当互联网云和web服务器之间的中间层。这对于安全方面来说是很好的,特别是当使用web托管服务时。

问题8:nginx和apache的区别

  • 轻量级,同样起web服务,比apache占用更少的内存和资源。

  • 抗并发,nginx处理请求是异步非阻塞的,而apache则是阻塞性的,在高并发下nginx能保持低资源,低消耗高性能。

  • 高度模块化的设计,编写模块相对简单。

  • 最核心的区别在于apache是同步多进程模型,一个连接对应一个进程,nginx是异步的,多个连接可以对应一个进程。

问题9:什么是动态资源、静态资源分离?

动态资源、静态资源分离,是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。

动态资源、静态资源分离简单的概括是:动态文件与静态文件的分离。

问题10:Nginx负载均衡实现的策略有哪些?

  • 轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某个服务器宕机,能自动剔除故障系统。

upstream backserver { server 192.168.0.12; server 192.168.0.13; 
} 
  • 权重 weight:weight的值越大,分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。其次是为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。

# 权重越高,在被访问的概率越大,如上例,分别是20%,80%。
upstream backserver { server 192.168.0.12 weight=2; server 192.168.0.13 weight=8; 
} 
  • ip_hash( IP绑定):每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题

upstream backserver { ip_hash; server 192.168.0.12:88; server 192.168.0.13:80; 
} 
  • fair(第三方插件):必须安装upstream_fair模块。

对比 weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能地进行负载均衡,响应时间短的优先分配。

# 哪个服务器的响应速度快,就将请求分配到那个服务器上。
upstream backserver { server server1; server server2; fair; 
} 
  • url_hash(第三方插件):必须安装Nginx的hash软件包

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。

upstream backserver { server squid1:3128; server squid2:3128; hash $request_uri; hash_method crc32; 
}

问题11:nginx的URL重定向怎么配置的?

  • 使用rewrite指令进行URL重写和重定向。rewrite指令的基本语法是rewrite regex replacement [flag];,其中regex是匹配URL的正则表达式,replacement是替换后的URL,flag是重写标记。

  • 如果只是进行简单的URL重定向,也可以直接使用return指令,如return 301 /new-url;表示将请求永久重定向到/new-url

示例配置:将/old-url重定向到/new-url的示例配置如下

server {  
......location /old-url {  return 301 /new-url; # 永久重定向到/new-url  }  
...... 
}
使用rewrite指令进行更复杂的URL重写和重定向:server {  
......location /old-url {  rewrite ^/old-url(.*)$ /new-url$1 permanent; # 永久重定向到/new-url,并保留查询参数  }  
......
}

经验教训与自我提升

通过本次项目,我深刻认识到运维工作的重要性和复杂性。我意识到自己在技术深度和广度上还有待提高,特别是在自动化运维和监控方面。未来,我将继续学习和实践,不断提高自己的技能和能力。

展望未来

展望未来,我将继续关注Nginx及其相关技术的发展趋势,不断探索和实践新的运维技术和方法。同时,我将与团队成员紧密合作,共同为公司业务的稳定和发展贡献力量。

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

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

相关文章

一道dp错题

dis(a,b)就是两点之间的距离公式 那么这道题该怎么解呢,.先看数据范围x,y<1e4,so,18个点两点之间距离最大18*1e4*sqrt(2)<2^18,所以如果跳过的点大于18个点,那么显然一个区间内最多不会跳跃超过17个点 现在我们想知道前i个点跳跃几次在哪跳跃能够达到最小花费,不妨设跳…

【OceanBase诊断调优】—— 转储错误(错误代码 4138/ORA-01555)

当读事务很长时&#xff0c;租户进行转储会报 4138/ORA-01555 错误。本文介绍该错误的处理方法。 适用版本 OceanBase 数据库 V2.X 及以后的版本 问题现象 当读事务很长&#xff0c;租户进行转储时会出现以下错误。 Oracle 租户&#xff1a; ORA-01555&#xff1a;snapsho…

Keil调用跟踪

调试时程序卡在一个位置&#xff0c;恰巧这个函数被很多地方调用&#xff0c;需要知道上一步在哪。 程序暂停后&#xff0c; 查看调用堆栈&#xff0c;点击Keil菜单栏中的“View”&#xff0c;然后选择“Call Stack”&#xff08;调用堆栈&#xff09;选项。这将显示当前的调用…

市场活动系统搭建

精细差异化运营在今天的企业越来越普遍&#xff0c;运营驱动占据了业务经营的主导地位。各种营销活动&#xff0c;帮助我们差异化运营、激发潜在客户、带动连带消费、增加销售额度、提升用户增长、实现品牌宣传。 天猫、京东上有各种各样的促销活动。如&#xff1a;满减、满返、…

算法day04

第一题 &#xff1a; 209. 长度最小的子数组 有上题可知&#xff0c;我们会采用双指针和单调性的思路来解决 我们本题采用左右双指针从数组的0位置同向前进&#xff0c;所以将此类模型称为滑块&#xff1b; 步骤思路如下&#xff1a; 步骤一&#xff1a; 定义所有双指针都指向…

Prompt提示词的技巧

Prompt提示词的技巧 要让GPT类模型产生最符合我们需求的输出&#xff0c;我们需要精心设计和调整输入的提示词&#xff08;Prompt&#xff09;。 1、明确性&#xff1a; 确保你的提示词清晰、具体。GPT类模型会根据你给出的信息来生成文本&#xff0c;因此&#xff0c;提供详…

【实践】使用vscode来debug go程序的尝鲜

配置 首先&#xff0c;当然得配置好vscode 的go环境&#xff0c; 装个go插件就基本满足了 配置 launch.json, 可以配置多个环境的程序启动参数&#xff08;很友好&#xff09; {"version": "0.2.0","configurations": [{"name": &…

ArrayList与LinkedList的区别

一、背景与现状 在Java编程中&#xff0c;ArrayList和LinkedList都是实现List接口的重要类&#xff0c;用于存储和操作动态大小的元素集合。两者在Java集合框架中占据了核心地位&#xff0c;并被广泛应用于各种软件项目中。然而&#xff0c;尽管它们都提供了类似的功能&#x…

海外客户开发渠道有哪些

海外客户开发是一个多元化的过程&#xff0c;涉及线上与线下多个渠道。以下是一些有效的海外客户开发渠道&#xff1a; 平台电商&#xff1a; 利用国际B2B电商平台&#xff0c;如阿里巴巴国际站、 Globalsources、Made-in-China等&#xff0c;这些平台拥有庞大的国际买家流量&a…

STM32学习和实践笔记(27):USART串口通信实验程序

本实验所要实现的功能是&#xff1a;STM32F1通过USART1实现与PC机对话&#xff0c;STM32F1的USART1收到PC机发来的数据后原封不动的返回给PC机显示。同时使用D1指示灯不断闪烁提示系统正常运行。程序框架如下&#xff1a; &#xff08;1&#xff09;初始化USART1&#xff0c;并…

linux 开发常用命令

一、查看 相关服务 1.查看 数据库 相关服务 这里以mysql 和 redis 为例 &#xff08;1&#xff09;使用 ps 命令 执行命令会列出&#xff0c;“mysql”、“redis”名称的进程 ps aux | grep redis 示例&#xff1a; rootspray:~# ps aux | grep mysql mysql 1609816 0.…

Flutter 中的 FilterChip 小部件:全面指南

Flutter 中的 FilterChip 小部件&#xff1a;全面指南 在 Flutter 中&#xff0c;FilterChip 是一种特殊类型的 Chip&#xff0c;用于呈现过滤选项。用户可以通过点击 FilterChip 来应用相应的过滤条件&#xff0c;这在需要对列表或集合进行筛选的场景中非常有用&#xff0c;如…

51单片机实现俄罗斯方块游戏编程

一、设计要求 &#xff08;1&#xff09;利用51单片机&#xff0c;设计一款俄罗斯方块游戏&#xff0c;完成硬件电路的开发和程序的编写调试&#xff1b; &#xff08;2&#xff09;采用LCD12864液晶作为游戏运行界面&#xff1b; &#xff08;3&#xff09;利用按键输入灵活…

Spring Boot集成dubbo快速入门Demo

1.什么是dubbo&#xff1f; Apache Dubbo 是一款微服务开发框架&#xff0c;它提供了 RPC通信 与 微服务治理 两大关键能力。这意味着&#xff0c;使用 Dubbo 开发的微服务&#xff0c;将具备相互之间的远程发现与通信能力&#xff0c; 同时利用 Dubbo 提供的丰富服务治理能力…

HTML飘落的花瓣

目录 写在前面 HTML​​​​​​​简介 完整代码 代码分析 系列推荐 写在最后 写在前面 本期小编给大家推荐HTML实现的飘落的花瓣&#xff0c;无需安装软件&#xff0c;直接下载即可打开~ HTML​​​​​​​简介 HTML&#xff08;Hypertext Markup Language&#xff…

探索Playwright:Python下的Web自动化测试革命

在如今这个互联网技术迅速发展的时代&#xff0c;web应用的质量直接关系着企业的声誉和用户的体验。因此&#xff0c;自动化测试成为了保障软件质量的重要手段之一。今天&#xff0c;我将带大家详细了解一款在测试领域大放异彩的神器——Playwright&#xff0c;并通过Python语言…

一觉醒来 AI科技圈发生的大小事儿 05月13日

&#x1f4f3;博弈论让 AI 更加正确、高效&#xff0c;LLM 与自己竞争 研究团队设计了共识博弈&#xff0c;通过让语言模型的生成器和判别器相互博弈来提高模型的准确性和内部一致性。这种方法不需要对基础模型进行训练或修改&#xff0c;可以在笔记本电脑上快速执行。研究结果…

基于微信小程序+JAVA Springboot 实现的【停车场小程序】app+后台管理系统 (内附设计LW + PPT+ 源码+ 演示视频 下载)

项目名称 项目名称&#xff1a; 停车场微信小程序的设计与实现 在当前信息技术飞速发展的背景下&#xff0c;停车场微信小程序的开发成为了一个创新的解决方案&#xff0c;旨在提高停车场管理的效率和用户的停车体验。本项目通过深入分析现有停车场管理系统的不足&#xff0c…

内存屏障 - LINUX KERNEL MEMORY BARRIERS 上 与 下

内存屏障&#xff08;Memory Barrier&#xff09;是在计算机体系结构中使用的一种同步机制&#xff0c;用于确保在多线程或多核处理器环境中&#xff0c;对共享内存的操作按照预期顺序进行。它们通过强制在特定点执行一些指令来规定内存访问的顺序&#xff0c;并防止内存乱序执…

弱网对抗的策略有哪些?

在弱网环境下&#xff0c;数据传输可能会面临丢包、延迟、抖动等问题&#xff0c;因此采取合适的弱网对抗策略对于确保数据传输的稳定性和可靠性至关重要。以下是一些常见的弱网对抗策略&#xff1a; 数据压缩&#xff1a;使用压缩算法如Gzip、Brotli等对数据进行压缩&#xf…