/ php

一次apache迁移到nginx的历险记

起因

话说在2016年的某一天,老大在阿里云购买服务器需要重启,但是这一次的重启涉及到IP变换。总的来看是一件简简单单的事情,但就由于太久没接触服务器配置,结果引出了一点点小风波。

域名解析

这一步处理起来很简单,只需要在域名服务商的管理面板,修改域名指向的IP地址即可。但是域名解析是有缓存时间的,这个时候,修改后只能默默等待域名解析更新。

启动服务

首先在最前面的服务器软件是nginx和apache,之所以有两个是因为历史遗留问题,这个会在开机自动启动。然后老大的应用主要是php和python,并且由于写好了启动应用的shell脚本,所以执行shell脚本即可。

RDS添加白名单

为什么用RDS呢?其实出于性能和可靠性的考虑。用了RDS就省去自己去搞异地灾备和定时备份。然后数据库主要IO操作比较频繁,并且数据量或者访问量比较大的时候还是需要独立的数据库服务器,然后RDS是优化过数据库的,所以选择RDS可以节省很大部分运维成本,并且性能更佳。但是RDS需要设置IP才可以访问,所以IP变了就需要加入白名单。

apache与nginx在服务器的出生

一开始,老大的服务器仅仅是部署一个wordpress博客的,那么那个时候就简单选择了centos+apache+php+mysql的架构。后来老大需要往服务器部署python应用,怎么办呢?apache还是可以跟python交互的(使用mod_python模块),那么问题也算是解决了,其实是当时懒得迁移。随着https的普及,老大的应用怎么说也得紧跟潮流的,所以也打算上https,当然为了节省成本,证书就选择自签。然后既然需要监听443端口,那么又考虑到nginx做反向代理不错,所以就使用nginx了,然后https反向代理到原来的http,这就是两者之所以共存在老大的服务器的原因。

废除apache

其实这个念头很早就有了,apache比较吃内存,想换成nginx节省一下内存,刚好这次重启提供动力来解决这一事情。使用apache的原因仅仅是老大的PHP应用,为了解决这个问题,就只需要安装一个php-fpm,然后nginx转发过去处理即可。然后python应用就使用gunicorn来托管。轻轻松松迁移并且停用了apache,这个时候看了一下内存,还剩几百M,那么愉快的去玩耍了。

灾难发生

突然某一天,某业务崩溃了,那时候排查服务器,发现内存仅仅剩下几十M。一查发现php-fpm启动了35个进程,把内存都吃光了,马上去查配置文件,限制了进程数,内存也降下来了。

迁移过程的redis意外

由于迁移过程没跟技术进行沟通,所以启动redis采用了默认方式,并没有指定配置文件和数据库存放位置,所以引发老大应用某些强依赖redis的数据的操作出现未知错误。修正启动方式后,问题修复。

备注
  • php-fpm的配置要设置好进程数,不然默认配置会吃光你服务器的内存。
  • redis启动方式要注意指定配置文件和数据持久化文件存放位置。
  • 服务器维护需要编写手册,按册子维护。
一点点想说的

以后得应用都打包成docker镜像,一个shell来维护。