去年年底因为使用了云存储和其他方面的原因,计划的将服务器缩减一个机柜出来。这样今年每月机房的费用可以减少1万左右。前前后后抽空在弄这个任务,现做个笔记小结下。以redis
服务和图片存储服务器的下架为主。
Redis 的迁移
原来一些机器的配置比较低,Redis 服务器比较多。去年新增的几台服务器都是128G,所以需要将原来的服务器集中存放到新服务器上。redis 数据库的迁移,也还算轻车熟路了。https://mengkang.net/424.html 数据同步完毕之后,再到业务代码中修改请求地址。
注意事项:
将启动命令添加到/etc/rc.local
中。
迁移前一段时间需要观察监控旧服务器的确是没有请求了,可以通过netstat
配合tcpdump
一起。比如迁移的时192.169.50.138
的6307
的业务。可以在138服务器上通过
netstat -anc|grep "138:6307"
查看是否有请求,但是发现这个命令有时候不准,同时可以直接通过tcpdump
直接监控网卡的流量
tcpdump -i em2 -vv -nn host 192.168.50.138 and port 6307
最好是收集一定周期的日志,后期我就发现gearman
的业务的遗漏。
图片存储的重构
因为使用了网宿的云存储,大部分的回源压力都是指向云存储的,而我们源站只是做以为一个备份,原来因为单机 I/O 压力过大和防止硬盘损坏,机房有4台磁盘阵列作为主要存储,本部分区存在冗余,现在下架三台。需要做的工作是将图片资源通过rsync
同步到一台服务器上,然后在前端主机nginx
配置回源的域名和对应的目录。(还是有遗漏,部分用户头像被我们直接搬回公司了,通过rsync
从公司回传到机房了,可以通过--bwlimit
参数限速。通过iptraf -g
来查看带宽使用情况。)
Crontab 的检查
比如上面说的gearman
的业务,一般守护进程都在crontab
都会有监控的shell
脚本。注意该服务的搬迁时,该服务的搬迁。有些服务可能一时半会没搬迁不会显露出问题,比如周报、月报数据,可能下个月才发现。
同时,由于gearman worker
程序是在我迁移redis
之前就以守护进程的形式常驻内存了,当我修改完各个redis
服务的请求地址时,gearman worker
的程序实际还没更新的,所以出现了上面说的老服务器还有请求的情况。同理这些和迁移的redis
有关的守护程序,重启下。
架构体系的更新
由于我们各个服务器都并非单一职能的,所以可能用作其他业务。比如一台redis
服务器可能是keepalived
的backup
。那么需要新找一台服务器添加为backup
,同时涉及到新nginx
环境的搭建,配置,旧的负载均衡服务器的配置修改(后端服务器ip
,图片资源回源请求地址等)。类似的还有php
,java
的配置等。
云服务的回源 web 服务器的配置(中间漏了一台,后期给补上了)。
同时,代码上下、分发脚本,服务批量重启脚本,也需要配合一起修改。
关机重启
因为下架的机器分布在多个机柜,现在要腾出来一个机柜,那么有的机器就需要断电了,(比较暴力,见笑了。)所以需要之前要检查各个服务器的/etc/rc.local
文件,确保应该自启动的服务都已经添加了,其他初始化的配置也都正常。注意 Redis 缓存数据的保存和恢复。
监控
迁移完毕之后,除了常规的业务代码,还需要注意图片资源的回源是否正常、服务器 I/O 压力是否正常、检查nginx
日志是否出现502
,500
,404
错误。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。