最近几日在研究把我的论坛重新移回openshift(或者另外几个超低配置的PaaS),由于现在论坛略有人气,若直接跑在openshift的环境上会使小红帽的小霸王服务器不堪重负,再加上近期有人CC攻击我的网站,openshift虽然不会死机崩溃,但是却会出现Apache(HTTP服务器)负载过大,同时不断的刷新主页,也会让MySQL数据库查询执行缓慢,于是就回导致网站网站打开时间直奔1分钟…

【更新】新版openshift已经完全不同于旧版,虽然功能强大,但是操作复杂,笔者仍未学会。

搬迁后准备使用多台openshift或者多个PaaS平台来构建一个简单的负载平衡架构,首先数据库方面需要采用Memcached+MySQL的形式,经过测试,在压力测试(仅刷新首页)的情况下,使用Memcached对数据库进行缓存可以有效降低MySQL负载.在Discuz!处于关闭站点的状态下时,可以使几乎全部的访问量落在Memcached服务器上,也就是说这种情况下请求已经完全不需要经由MySQL查询而是直接通过Memcached读取.

初步解决了MySQL问题之后接下来就是HTTP服务器了,一个后端服务器肯定不能满足我的需求,于是我需要两个甚至三个后端服务器.同时我还需要使用PHP7(假定)作为后端服务器,由于openshift没有这个模板,所以我们需要自建环境.自建环境使用的DIY模板不支持官方的负载平衡,于是尝试自己建一个.

目前初步使用的架构是这样的:
Nginx最为最前端,反向代理HaProxy的负载平衡器,同时提供静态资源缓存.后端HaProxy对两台Nginx+PHP6的HTTP服务器进行负载平衡,同时MySQL由Memcached进行缓存.这个架构下即使全部使用256M内存的容器,也可以承受住相对大的并发访问..

HaProxy相对于Nginx专精于负载平衡,openshift官方的负载平衡就是使用这款软件,相比起Nginx提供的几种负载平衡机制,HaProxy有更多更有效的机制,此外利用HaProxy还可以实现更加专业和复杂的负载平衡..

进行测试后发现若使用如上架构,对最前端的Nginx进行2000并发30秒的压力测试,全部的访问全部落在前端的Nginx缓存上,后端的服务器几乎没有任何压力,于是便直接对HaProxy服务器发起2000并发30秒的压力测试,结果非常明显.这轮压力测试几乎是平均的落在两个后端上..HaProxy我采用的是最上连接优先的形式.

从上图可以看得出来,HaProxy的负载平衡还是非常有效的.

头图版权:存在の居場所@loundraw|PID=54040423