Mayx的博客

Logo

Mayx's Home Page

View My GitHub Profile

About Me

5 January 2020 - 字数统计:2306 - 阅读大约需要7分钟 - Hits: Loading...

Mayx的运维笔记

by mayx


新年新Bug!

开端

前天,我维护的花火学园宕机了,由于在上面安了乱七八糟的各种各样的东西,所以我以为它只是日常卡机,所以我就随手重启了一下。
重启完之后,它凉了,不知道为什么,数据库连不上了……于是我开始问另外一个同样可以登录服务器的人,问他有没有动过数据库,结果听起来貌似他好几个月都没登服务器了。于是我慌了,试着手动启动MySQL的服务,然而黑色的界面里冷冰冰的Job for mysql.service failed告诉我事情没有那么简单。我按照错误的提示查看了详细信息,然而里面也只是简单的记录了一句mysql.service: Main process exited, code=exited, status=1/FAILURE这样通俗而又简单的一句话……这和没说有什么区别……谁都知道它启动失败了……
没办法,这时候只能向网站的上一代运维求助了 (向大佬低头) ,经过大佬不知道什么样的操作,终于找到了真正的错误详细信息,看起来好像是数据库中的用户表出了问题。于是大佬重置了用户表,总算是勉强把MySQL服务重新启动了。
不过虽然这时候再做一些简单的配置,应该差不多就可以重新上线了,不过考虑了一下,为了让以后不会再出现乱七八糟的事,我打算把网站重新迁移一遍,让系统环境做一个大更新!

重建的过程

首先重新租一台服务器吧,之前用的是Ubuntu的服务器,现在一年过去了,也该考虑考虑稳定性的问题了,于是我把系统换成了CentOS。
然后为了之后配置起来方便一些,我依然决定使用服务器商已经配置好的LEMP应用,这样建好以后我也不用再考虑安装服务器软件的问题了。
在新的服务器部署的过程中,我回到原来的服务器,开始打包网站的数据库和文件,做好向新的服务器转移的准备。
没多久,新的服务器就部署好了,于是我直接一个scp就把所有的文件传到了新的服务器上。不得不说,服务器直接传输文件的速度是真的快,几个GiB的文件几分钟就传完了。顺便感叹一下,花火学园的数据居然也都好几个GiB了,想当年我接手的时候还不到2GiB。
然后就是导入数据库和解压网站文件,以及配置Nginx,完成以后,网站不出所料的可以正常使用了。
然后就是设置DNS之类乱七八糟的事,以及Cloudflare的CDN之类的,不过还好之前设置过防火墙白名单的配置,这次也方便了不少。
不过这还没完,既然换了新的服务器,而这一年里我对服务器的了解也更深了一些,至少应该做一些优化吧。
所以呢,我就先把BBR给装上了,搞太多东西也很麻烦,所以我就直接用了一键脚本。顺便又搞了Swap,毕竟服务器只有1GiB的内存,是应该多搞点内存,虽然可能速度会降低,但还是求稳嘛,而且服务器好像是SSD的硬盘,应该影响不大。
到这里,基础的环境部分我就自认为搞好了。

之后的优化

到了第二天,我又心血来潮,想再搞点别的东西来优化服务器,首先我的目标是把对内的TCP/IP sockets全部换成UNIX domain sockets,用UNIX domain sockets可以减少不少系统开销,所以我首先对PHP-FPM开刀。
其实改起来也很简单,就是把PHP-FPM的配置文件中的listen项从IP地址换成文件,然后把Nginx中的fastcgi_pass改成带unix:前缀的文件就OK了。我改完之后真就以为OK了,但是现实中的502 Bad Gateway打破了我的幻想,看来没那么简单……
后来我仔细看了一下PHP-FPM文件的注释,发现了一句警告:

; WARNING: If you switch to a unix socket, you have to grant your webserver user
;          access to that socket by setting listen.acl_users to the webserver user.

哦哦,原来是要设置listen.acl_users……然后我把nginx加了进去,重启之后它就好了。
之后我打算优化一下MySQL,不过我也不是很清楚MySQL中怎么设置UNIX domain sockets,本来是打算就此放过,不过我听说好像数据库连接中用127.0.0.1要比localhost要好,因为少了一次解析。我听着感觉好像有那么点道理,然后就去把网站配置的数据库地址给改了。
不过后来发现查了一下,发现好像MySQL对localhost地址有特殊规定,在MySQL中如果使用localhost,那么连接就会走UNIX domain sockets,而使用127.0.0.1就会和平常一样走TCP/IP sockets。
看完之后我感觉有那么点不爽啊,然后就回去又把我的数据库地址改了回去,不仅如此,我还打算关掉3306端口,后来查了一下,发现在配置文件中加入skip-networking就可以了。
之后我查看了一下端口,除了443端口和我的SSH的端口外还有一个奇怪的25端口,看着感觉很不爽,查了一下是postfix的端口,然后我一个不爽就把postfix随手卸载掉了。
再往后,我看了看我的Nginx日志,发现大小有那么点不对劲,才建的服务器日志已经有400-500MiB了?!虽然花火学园平时流量不算小,但也不至于这么夸张吧?后来我发现我没有过滤静态资源的日志,之后又修改了一下配置文件,心里就舒服多了😁。
于是,花火学园的优化就到此结束。

后记

我其实应该仔细看看日志的,向莫名其妙出现的BUG说不定是攻击? (被害妄想症23333) 后来我翻了翻日志好像也没这个倾向。
另外我确实不应该把正在开发中的项目和主站放在同一个服务器,至少鸡蛋也不应该放到同一个篮子里面嘛……这次我打算做好主站的所有配置,保证它的正常运行。

tags: 运维 - 笔记
召唤伊斯特瓦尔