Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;nginx可以作为一个HTTP服务器进行网站的发布处理,而且可以作为反向代理进行负载均衡的实现。
Nginx功能丰富,支持很多第三方模块的扩展。本次对于公司项目中的环境nignx升级,针对此次升级的操作步骤和升级心得进行分享。
1总体概述
Nginx是一个功能非常强大的web服务器加反向代理服务器,同时又是邮件服务器。在项目使用中,使用最多的三个核心功能是反向代理、负载均衡和静态服务器,这三个不同功能的使用,都跟nginx的配置密切相关。
1.1nignx概述
Nginx是一个高性能的HTTP和反向代理web服务器。因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。当Nginx服务升级到新版本时,必须要将旧的二进制文件Nginx替换掉,通常情况下这是需要重启服务的,但Nginx支持重启服务来完成新版本的平滑升级。nignx高可用解决tomcat服务器宕机、nginx服务器本身宕机导致访问失败的问题。
1.2使用场景
Nginx是一个高性能的http服务器和反向代理服务器,同时也是一个IMAP,SMTP以及POP3服务器。
Kubernetes是一个开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。kubernetes从搭建集群到使用网上介绍的五花八门,笔者经过实际操作,简单介绍nignx的三个使用场景。
1.2.1反向代理
关于代理,首先我们要明确一个概念,所谓代理就是一个代表、一个渠道。此时设计到两个角色,一个是被代理角色,一个是目标角色,被代理角色通过这个代理访问目标角色,完成一些任务的过程称为代理操作过程。打个比方,就好像生活中的专卖店客人到专卖店买了一双鞋,这个专卖店就是代理,被代理角色就是厂家,目标角色就是用户。
说反向代理之前,我们先看看正向代理,正向代理也是大家最常接触得到的代理模式,我们会从两个方面来说关于正向代理的处理模式,分别从软件方面和生活方面来解释一下什么叫正向代理。
在如今的网络环境下,如果由于技术需要访问国外的某些网站,你会发现通过浏览器,是没有办法访问国外网站的,此时大家可能都会用一个操作FQ进行访问,FQ的方式主要是找到一个可以访问国外网站的代理服务器,我们将请求发送给代理服务器,代理服务器去访问国外的网站,然后将访问到的数据传递给我们。
上述这样的代理模式称为正向代理,正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。
关于反向代理的处理方式,例如:在购物网站中,每天同时连接到网站的访问人数已经爆表,单个服务器远远不能满足人民日益增长的购买欲望了,此时就出现了一个大家耳熟能详的名词:分布式部署;也就是通过部署多台服务器来解决访问人数限制的问题。
反向代理具体是通过多个客户端给服务器发送的请求,nginx服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理。此时请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确,nginx扮演的就是一个反向代理角色。
反向代理,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。通常情况下,我们在实际项目操作时,正向代理和反向代理很有可能会存在一个应用场景中,正向代理客户端的请求去访问目标服务器,目标服务器是一个反向单利服务器,反向代理了多台真实的业务处理服务器。
1.2.2负载均衡
那么在了解了Nginx的反向代理之后,我们要通过Nginx的反向代理实现另一个重要功能——负载均衡。
Nginx服务器是介于客户端和服务器之间的中介,通过上一篇博客讲解的反向代理功能,客户端发送的请求先经过Nginx,然后通过Nginx将请求根据相应的规则分发到相应服务器。
主要配置指令为上一讲的pass_proxy指令以及upstream指令。负载均衡主要通过专门的硬件设备或者软件算法实现。通过硬件设备实现的负载均衡效果好、效率高、性能稳定,但是成本较高。而通过软件实现的负载均衡主要依赖于均衡算法的选择和程序的健壮性。均衡算法又主要分为两大类:
静态负载均衡算法:主要包括轮询算法、基于比率的加权轮询算法或者基于优先级的加权轮询算法。
动态负载均衡算法:主要包括基于任务量的最少连接优化算法、基于性能的最快响应优先算法、预测算法及动态性能分配算法等。
静态负载均衡算法在一般网络环境下也能表现得比较好,动态负载均衡算法更加适用于复杂的网络环境。
1.2.3nginx特点
Nginx是一个高性能Web和反向代理服务器,它具有很多非常优越的特性。在高连接并发的情况下,nginx是Apache服务器不错的替代品,能够支持高达50000个并发连接数的响应,使用epoll and kqueue作为开发模型。
nginx作为负载均衡服务器,既可在内部直接支持和PHP程序对外进行服务,也可支持作为HTTP代理服务器对外进行服务。nginx采用C语言进行编写,不论系统资源开销还是CPU使用效率都比Perlbal要好很多。
1.3工作原理
Nginx是一款轻量级WEB服务器,也是一款反向代理服务器。nginx可以支持Rails和PHP程序、可以作为HTTP反向代理服务器、作为负载均衡服务器、作为邮件代理服务器、帮助实现前端动静分离。
nginx具有高稳定、高性能、资源占用少、功能丰富、模块化结构、支持热部署等特点。
2升级说明
下面将对于此次升级和nignx,还有nignx的常用命令进行说明。本次升级可在不中断服务的情况下,使用新版本、重编译的nginx可执行程序替换旧版本的可执行程序。
2.1环境介绍
公司对于五台部署的高可用环境有一定的规范,该项目环境为三台master和两台worker,接下来针对当前环境进行简单介绍。
3台master:
部署: 3个keepalived,3个haproxy,3个ingress-controller,2个nfs服务端,1个nfs 客户端,2个drbd,3个redis(用于umc);
2台worker:
部署:2个keepalived,2个nginx,2个私有镜像库,2个nfs 客户端,2个umc,2个数据库(可以单独服务器部署),若干产品服务,对应产品的redis集群(开发环境单机)。
2.2升级思路
本次升级可在不中断服务的情况下,使用新版本、重编译的nginx可执行程序替换旧版本的可执行程序。
1.先查看keepalived的虚拟ip在哪台服务器上;
2.修改keepalived副服务器(没vip的)
a)停掉keepalived服务;
b)停掉nginx进程;
c)升级nginx;
d)启动nginx;
e)启动keepalived服务。
3.修改keepalived主服务器(有vip的)
a)停掉keepalived服务;
b)停掉nginx进程;
c)升级nginx;
d)启动nginx;
e)启动keepalived服务。
2.3常用命令
对于nignx中常用的nignx命令进行介绍。
3前置条件
接下来需要对于环境进行确认,为了更好地确认nignx升级情况,要对于项目环境进行明确的确认。
3.1查看地址
首先要查看项目环境中的IP地址。
3.2查看状态
对于原有在启动中的nignx状态进行查看。
3.3停止keepalived
停止本地高可用。
查看keepalived状态,确认keepalived已停止。
4配置nignx
接下来就对于nignx部署的内容进行配置。
4.1上传文件
在/usr/local/tools目录下,把nignx升级版本文件上传到对应目录,并解压。
4.2重新编译
1.进入新的版本文件夹内:
2.重新编译的代码和模块。(黄色区域是当前版本号建文件)
3.执行make编译如果没有发生错误,就执行make install安装:
4.3文件修改
nginx服务器的配置信息主要集中在nginx.conf这个配置文件中,所以接下来对于nginx.conf进行配置。
1.首先把旧文件中的数据同步到新版本中。
2.进到keepalived文件夹中,修改keepalived.conf文档:
3.然后查看vrrp_script chk_http_port中,script的引号中“文件路径”。
4.4停止nignx
1.把nignx进行停止,开启高可用;
2.停止nginx;
3.查看nginx状态,确认nignx已停止。
4.5验证nignx
接下来对于nginx的状态和高可用的状态进行查看,验证nignx是否升级成功。
1.首先开启keepalived;
2.查看keepalived状态;
3.查看nginx状态;
当查看状态为正在运行中,则升级nignx成功。
5心得体会
接下来我会从技能收获、个人总结、心得总结三个方面介绍本次升级nignx的感受。
5.1技能收获
在本次升级中,主要配置修改nginx.conf文件,它主要由三部分组成:全局块、http块和events块。http块中可以包含多个server块,一个server块中又可以包含多个location块。
如果某指令在不同层级的块中出现,则采用“就近原则”,以较低级的块配置为准。
1.全局块:是默认配置文件从开始到events块之间的部分内容,主要设置一些影响nginx服务器整体运行的配置命令,也就是全局配置。通常包括配置运行nginx服务器的用户(组),worker process数,pid存放路径,日志路径及配置文件引入等。
2.events块:主要设置影响nginx服务器与用户的网络连接,对服务器性能影响很大。常用的是设置是否开启对多worker process下的网络连接序列化,是否允许同时接受多个网络连接,选取事件驱动模型,每个worker process最大连接数等。
3.http块:可以包含server块的配置,主要配置代理、缓存和日志等和第三方模块。http全局块中配置的指令包括文件引入、mime-type定义、日志定义、连接超时时间和单连接请求数上限等。
4.server块:每个server块就相当于一个虚拟主机。server块中常见的配置是本虚拟主机的监听配置和本虚拟主机的名称或者ip配置。
5.location块:location块其实是server块中的一个指令。此块的主要功能是,基于nginx服务器接收到的请求字符串,对除虚拟主机名称之外的字符串进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等,第三方模块也是在这块中配置。
5.2个人总结
在升级nignx前,不要把原有旧的静态文件删除,先检查nignx是否做了动静分离,做好文件备份,来保证升级不出错。(本次升级的环境中没有静态文件,所以文中没有提到)在本次升级过程中,对于升级步骤进行了记录,把随时记录内容形成习惯,在撰写文档时会更加高效。
5.3心得总结
公司项目需要进行nignx升级,在升级nignx期间,通过对于linux命令的使用,增加了对linux系统的了解程度,也对nignx这一概念进行了理解。自己在着手升级nignx时,需要把几处旧的配置文件信息修改成新的版本号,这需要对环境中的文件特别熟悉,不可错改、忘改、改错。
在生产环境中升级产品时,一定要仔细认真。撰写此篇文档,主要是为了复盘整理升级nignx的步骤,加深对于升级工作的印象。每一次的文档撰写,都有不一样的收获和感悟,未来工作一定要更加认真仔细,同时养成定期复盘撰写文档的工作习惯。