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

2024-05-14 11:36

本文主要是介绍【运维实践项目|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及其相关技术的发展趋势,不断探索和实践新的运维技术和方法。同时,我将与团队成员紧密合作,共同为公司业务的稳定和发展贡献力量。

这篇关于【运维实践项目|003】:Nginx集群化运维升级项目的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/988635

相关文章

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

HDFS—集群扩容及缩容

白名单:表示在白名单的主机IP地址可以,用来存储数据。 配置白名单步骤如下: 1)在NameNode节点的/opt/module/hadoop-3.1.4/etc/hadoop目录下分别创建whitelist 和blacklist文件 (1)创建白名单 [lytfly@hadoop102 hadoop]$ vim whitelist 在whitelist中添加如下主机名称,假如集群正常工作的节

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧