Blog 服务器数据库故障说明

3月12日21时14分至21时35分,USTC Blog 服务和 freeshell 控制面板无法访问。我们对本次故障给您带来的不便深表歉意。

故障原因是数据库连接数最大限制过低(151 个),连接数达到最大限制后无法建立新数据库连接。需要在 MySQL 配置文件 /etc/mysql/my.cnf 中增大 max_connections

修复方法是依次重启 mysql 服务和 php-sandbox 服务。由于 mysql 连接数满,sudo service mysql restart 会失败,因而 monit 在发现数据库无法连接后,尝试自动重启 mysql 失败了;每分钟监控 blog 首页 HTTP 状态并重启相关服务的脚本,由于也是使用 service mysql restart,同样没有奏效。最后 左格非(Alkaid)kill 掉了 mysql 进程,再启动 mysql 服务,才算活过来。

造成大量数据库连接的可能是来自北京某数据中心的 Web 扫描,在21时的前5分钟,伪装成 OS X 10.10 上的 Safari 浏览器,以每秒数十个请求的速度扫描 kekao.ustc.edu.cn 的某些敏感路径。21时03分,扫描到 phpmyadmin 目录(数据库管理工具),遂以全速暴力尝试密码,但估计没有破解出密码。由于 nginx 每 IP 每秒 50 次 HTTP 请求的安全限制,每秒尝试密码的次数接近 50 次。

我们使用 ab 重试了这个尝试密码的过程,每秒几乎恰好涌入 50 个请求,不过数据库连接数一直稳定在 21~23(php-fpm 的线程数,每个线程一个持久数据库连接),没有出现异常。从服务器监控看到,服务中断之前的10分钟出现了负载高峰,而我们模拟的压力测试没有造成负载高峰。因此大量数据库连接的罪魁祸首有可能仍然藏在幕后。

     66 [12/Mar/2015 20 56
     33 [12/Mar/2015 20 57
     26 [12/Mar/2015 20 58
     70 [12/Mar/2015 20 59
    650 [12/Mar/2015 21 00
   3490 [12/Mar/2015 21 01
   2399 [12/Mar/2015 21 02
   3223 [12/Mar/2015 21 03
   5315 [12/Mar/2015 21 04
     74 [12/Mar/2015 21 05
     32 [12/Mar/2015 21 06
     82 [12/Mar/2015 21 07
     22 [12/Mar/2015 21 08
     60 [12/Mar/2015 21 09
    104 [12/Mar/2015 21 10
     50 [12/Mar/2015 21 11
     88 [12/Mar/2015 21 12
     27 [12/Mar/2015 21 13
     98 [12/Mar/2015 21 14

LUG 网络服务3月9日网络中断说明

由于 全校范围的网络故障,3 月 9 日下午 17:00 ~ 18:00 网络时断时续,3 月 10 日凌晨 0:00 ~ 6:00 大约每半小时断网一次。

昨天的故障和 3 月 5 日持续 45 分钟的故障,原因估计是 近代物理楼某接口发送大量 ARP 包导致核心交换机 CPU 过载,换句话说,就是核心交换机被拒绝服务攻击了。

现代交换机通常是使用 ASIC(专用芯片)或 FPGA 来做绝大部分数据包的转发,只有少数控制包(如 ARP、STP 包)要交给交换机 CPU 做处理,交换机的 CPU 通常计算能力非常有限。例如 MAC 地址学习功能一般是由 CPU 进行的,首先所有 ARP 包被发到 CPU,CPU 把 MAC 地址和物理端口的映射关系写入到 ASIC 或 FPGA 中的二层转发表。如果交换机收到大量 ARP 包,又没有在入站端口对 ARP 包进行限速,就会导致交换机 CPU 忙不过来。

非常抱歉近几天的网络故障给您带来的不便。同时强烈谴责(有意或无意)进行网络攻击的人,对全校师生造成了这么大的麻烦!

Gitlab升级至7.8.1

GitLab终于发布了这个历史最大的版本更新!

本次维护历时70分钟,服务共中断60分钟。

维护时发现的问题:

  1. redis占用了大量IO资源,导致GitLab响应缓慢(redis进程长期处于D状态),因此手动重启了redis。故障原因未知。
  2. 默认路由再次消失。为了彻底根治,增加了/etc/openvpn/up.sh脚本。

7.8.1 主要特性:

  • 邮件通知系统改进
  • 多处UI改进
  • 评分逻辑改进
  • 增加多种issue状态
  • API功能增强
  • 改善数据库性能
  • 其他59项改进,详细请见这里

Freeshell 修复控制面板操作失败问题

从 3 月 1 日中午开始,freeshell 控制面板所有涉及主机名变化的操作(如创建删除虚拟机、修改主机名)都会失败,原因是 DNS 更新失败。而 DNS 更新失败的原因是 freeshell Web 服务器与 LUG 权威 DNS 服务器之间的时间不同步(相差 5 分钟),提示这个错误:dns_request_getresponse: clocks are unsynchronized

现在 freeshell Web 服务器上安装了 ntp daemon,与 time.ustc.edu.cn 同步,现在操作失败问题已经解决。非常抱歉此问题给您带来的不便!

多谢各位用户的 bug 反馈。

GitLab服务器维护通知

GitLab服务器计划于2015年3月2日升级维护,计划维护时间为21:00 ~ 21:30。届时GitLab代码托管服务将短暂性中断。

维护内容:

  • 升级GitLab至 7.8.1 stable

给您带来的不便,深表歉意。

update: 由于硬盘占用率过高,数据备份未能如期完成。更新推迟至22:30~23:30