【转】【个人笔记】免费空间+便宜VPS和OpenResty,Ngx_lua,Redis搭建系统负载均衡环境

一朋友在淘宝花费100元买了16美金,扣除手续费Paypal实到账15.46美金,朋友希望我用便宜VPS帮他设计一套系统负载均衡环境。首先他的要求说简单也简单,但是说麻烦更麻烦,预算只能在15.46美金以内,而且要求尽量网站动静分离。

网站主要只有一套CMS,静态内容对内存的要求不太高,找了两天,又构思了两天构架,终于给他架设了一套自认为超级NB环境:免费空间+便宜VPS+OpenResty +Ngx_lua +Redis高效系统负载平衡环境,经过测试,15美金的服务器能支持每天2-3万IP的访问量。

一、超级便宜VPS主机选购

便宜VPS选购

1、购买了两个inceptionhosting的VPS主机,年付是4.11美元一个,配置是:2 CPU Cores、256mb Ram、3GB SSD Disk Space、350 GB Transfer、5 x IPv6、1 x NAT IPv4,机房Dallas USA

2、reversehosts的VPS主机买一个7美元一年,配置是RAM: 128 MB、Burst: 256 MB、IPv4 Addresses: 1、Disk Space: 15 GB、Bandwidth: 500 GB。

3、两个inceptionhosting的VPS主机和一个reversehosts的VPS主机总共花了15.22美金,正好在预算以内,当然我们至少还需要使用免费大容量PHP空间一个。

4、吐槽一下:inceptionhosting之所以卖这么便宜,最主要的问题上没有独立IP,不过独立IP只是为了糊弄搜索引擎的,所以全部域名都会用reversehosts反代一次,并且专门在DNSPOD针对搜索引擎设置,而用户访问的话,有没有独立IP反而没那么重要。

5、部落介绍了不少的国外的VPS主机都是走“低价亲民”路线,年付几美元有不少:

二、第一台VPS负载均衡配置:免费空间、nginx、ngx_lua、Redis

搭建系统负载均衡环境

1、假设在 inceptionhosting两台VPS分别为192.168.8.1和192.168.8.2 ,而reversehosts的VPS主机为192.168.8.3

2、首先用192.168.8.1作为做负载均衡,安装nginx,重点是安装proxy_cache,ngx_lua模块,同时安装redis作为cache缓存。

3、P-roxy_cache是nginx自带的内置缓存模块,配置一下就可以用了。ngx_lua模块是淘宝开发的nginx第三方模块,它能将lua语言嵌入到nginx配置中,从而使用lua就极大增强了nginx的能力.

4、Redis是REmote DIctionary Server的缩写,是一个开源、支持网络、基于内存、键值对存储数据库,在响应速度和命中率上还是比较高效的,我们主要用它来做Cache的缓存。

5、另外上这里还不得不提一下OpenResty (也称为 ngx_openresty),这是是一个全功能的 Web 应用服务器,它打包了标准的 Nginx 核心,很多的常用的第三方模块,以及它们的大多数依赖项。

4、OpenResty主要由章亦春维护。在 2011 年之前曾由淘宝网赞助,此后一直主要由美国的 CloudFlare 公司 提供支持。OpenResty的强大之处就在于它有着非常多的第三方组件:

  • LuaJIT
  • ArrayVarNginxModule
  • AuthRequestNginxModule
  • CoolkitNginxModule
  • DrizzleNginxModule
  • EchoNginxModule
  • EncryptedSessionNginxModule
  • FormInputNginxModule
  • HeadersMoreNginxModule
  • IconvNginxModule
  • StandardLuaInterpreter
  • MemcNginxModule
  • Nginx
  • NginxDevelKit
  • LuaCjsonLibrary
  • LuaNginxModule
  • LuaRdsParserLibrary
  • LuaRedisParserLibrary
  • LuaRestyCoreLibrary
  • LuaRestyDNSLibrary
  • LuaRestyLockLibrary
  • LuaRestyMemcachedLibrary
  • LuaRestyMySQLLibrary
  • LuaRestyRedisLibrary
  • LuaRestyStringLibrary
  • LuaRestyUploadLibrary
  • LuaRestyUpstreamHealthcheckLibrary
  • LuaRestyWebSocketLibrary
  • LuaUpstreamNginxModule
  • PostgresNginxModule
  • RdsCsvNginxModule
  • RdsJsonNginxModule
  • RedisNginxModule
  • Redis2NginxModule
  • SetMiscNginxModule
  • SrcacheNginxModule
  • XssNginxModule

5、OpenResty官网:

  • 1、官方网站:http://openresty.org/cn/

6、OpenResty安装前要确保perl 5.6.1+, libreadline, libpcre, libssl安装在您的VPS上,Debian 和 Ubuntu 用户可执行以下命令:

 apt-get install libreadline-dev libpcre3-dev libssl-dev perl 

7、Fedora 和 RedHat 用户可以执行以下命令:

 yum install readline-devel pcre-devel openssl-devel 

8、安装OpenResty直接执行以下命令:

 wget http://openresty.org/download/ngx_openresty-1.5.11.1.tar.gz
tar xzvf ngx_openresty-1.5.11.1.tar.gz
cd ngx_openresty-1.5.11.1/
./configure --with-luajit
make
make install 

9、Redis官网:

  • 1、官方网站:http://redis.io/

10、Redis安装执行以下命令:

 wget http://download.redis.io/releases/redis-2.8.6.tar.gz
tar zxvf redis-2.8.6.tar.gz
mv redis-2.8.6 redis
cd redis
make MALLOC=libc
make install 

11、配置好nginx.conf。

 #注:proxy_temp_path和proxy_cache_path指定的路径必须在同一分区
  proxy_temp_path   /data/proxy_temp_dir;
  #设置Web缓存区名称为cache_one,内存缓存空间大小为64MB,1天没有被访问的内容自动清除,硬盘缓存空间大小为2GB。
  proxy_cache_path  /data/proxy_cache_dir  levels=1:2   keys_zone=cache_one:64m inactive=1d max_size=2g;

  #这里server的先后顺序为先免费空间,后reversehosts,只要免费空间能够访问,就不访问reversehosts,免费空间除了生成HTML的时候,主要最为HTML静态空间  使用,免费空间可以多搞几个,多加几个server而已。
  upstream backend_server {
    server   此处为免费空间IP:80 weight=3 max_fails=2 fail_timeout=30s;
    server   192.168.8.3:80 weight=3 max_fails=2 fail_timeout=30s;
  }

 server
  {
    listen       80;
    server_name  news.yourdomain.com;
    index index.html index.htm;
    root  /home/news;  

    location /
    {
         #如果后端的服务器返回404 502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。
         proxy_next_upstream http_404 http_502 http_504 error timeout invalid_header;
         proxy_cache cache_one;
         #对不同的HTTP状态码设置不同的缓存时间
         proxy_cache_valid  200 304 12h;
         #以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希,存储缓存内容到二级缓存目录内
         proxy_cache_key $host$uri$is_args$args;
         proxy_set_header Host  $host;
         proxy_set_header X-Forwarded-For  $remote_addr;
         proxy_pass http://backend_server;
         expires      1d;
    } 

12、配置好server.conf。

 #这里server的先后顺序为先inceptionhosting,后reversehosts,只要inceptionhosting能够访问,就不访问reversehosts,PHPCMS动态访问。

  upstream backend_server {
    server   192.168.8.2:80 weight=3 max_fails=2 fail_timeout=3s;
    server   192.168.8.3:80 weight=3 max_fails=2 fail_timeout=3s;
  }
  server
  {
    listen       80;
    server_name  www.yourdomain.com;
    index index.html index.htm;
    root  /home/www; 

三、第二台VPS负载均衡配置:LNMP,eAccelerator,Redis和inotify+rsync

第二台VPS负载均衡配置:LNMP,eAccelerator,Redis和inotify+rsync

1、假设在 inceptionhosting两台VPS分别为192.168.8.1和192.168.8.2 ,而reversehosts的VPS主机为192.168.8.3,上面已经在192.168.8.1配置好系统堪称环境。

2、现在到192.168.8.2上安装LNMP+eAccelerator+redis,mysql设置远程访问,相应的教程有:

3、同时还要安装inotify+rsync ,用于实时同步架构与192.168.8.3同步文件。只同步phpcms用户上传附件,设置成只允许上传jpg,gif,png,最大500KB。附件访问192.168.8.3空间。

4、本来怕2G空间做数据库怕不够,后来通过计算,按照每篇文章5000字计算(绝大多数文章不到5000字),大约占用10KB空间,那么2G空间可以达到20W条数据,足够用了。

四、第三台VPS负载均衡配置:LNMP,SFTP

第三台VPS负载均衡配置:LNMP,SFTP

1、现在在192.168.8.3上安装LNMP+SFTP+nginx的http_image_filter_module模块,主要开nginx进程,php只要开两个,平时只作为PHPCMS生成是使用,以及192.168.8.2不能访问时的临时替代。

2、本机主要作为图片空间使用,所以http_image_filter_module是个人需要,不是必须。SFTP命令把图片传送到日本的buttobi空间,以bob.buttobi.net空间作为图片备份与后备。

3、至此:192.168.8.2与192.168.8.3 MYSQL主从同步,192.168.8.3为备份。免费PHP空间安装PHPCMS,数据库设置为192.168.8.2,为HTML主力。

4、免费空间+便宜VPS负载均衡配置的最终结果是:

  • 1、192.168.8.1为WEB均衡负载,SSD空间。
  • 2、192.168.8.2为PHP与MYSQL主力,SSD空间。
  • 3、192.168.8.3为PHP.MYSQL与HTML替补,图片主力,普通空间。
  • 4、免费PHP空间为HTML主力。
  • 5、bob.buttobi.net为图片替补。

5、这样,除了均衡负载以外,PHP.MYSQL.HTML.图片都有了主从空间,最大的程度保证了数据安全。

五、便宜VPS架设系统负载均衡环境可行性分析

1、最后计算一下350G均衡负载流量能够支持多大的PV量,按照平均每个HTML文件50KB计算,用户访问一次,负载均衡VPS需要先下载后台VPS文件,结果流量是100KB。

2、但是在实际访问中,至少有一半的PV是访问的相同的文件,这个文件数量假设是5000条,那么下载后台VPS文件一次以后就不需要再次下载,再次访问就只需要50KB。

3、350G通过计算大约能支持500万PV,平均每天大概17万PV,以IP与PV比,1:10就是超级粘性用户了,一般能达到1:5就不错,这样最后能支持每天2-3万IP。

4、如果把页面精简,应该可以精简到平均35KB左右,再小的话,页面的美化就很难了,不是每个网站做成天涯那样的简陋还能吸引人。

5、按照35KB计算,大约能支持680万PV,平均每天大概22.67万PV。这也只是纸上谈兵,256M内存能不能支持是个很大问题,更何况是OpenVZ,只要能达到理论数据的一半,这套系统就算成功!

文章出自:热心朋友投稿   由部落编辑整理,版权归原作者所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源。


暧昧贴

发表评论

    微笑 大笑 拽 大哭 奸笑 流汗 喷血 生气 囧 不爽 晕 示爱 卖萌 吃惊 迷离 爱你 吓死了 呵呵

      已有3条评论

    1. avatar CC#Bench
      2222015-02-21 19:59回复求知若饥,虚心若愚。
      1. avatar CDog#Sofa
        好牛逼的感觉
        负载平衡神马的完全没接触过呢(还不是因为网站没什么访问量完全不需要负载平衡WW   TAT
        2015-02-16 10:31回复我是沙发!
        1. avatarCC
          回复了CDog:.......最近在研究这一块。。。。。我把两个树莓派准备放在一起均衡负载........ 2015-02-16 15:30回复 求知若饥,虚心若愚。