Linuxcentos+Varnish+nginx+phpFastCGI+MYSQL5+MenCache+MenCachedb构建大流量服务器集群.docx

上传人:b****5 文档编号:8220824 上传时间:2023-01-29 格式:DOCX 页数:21 大小:176.34KB
下载 相关 举报
Linuxcentos+Varnish+nginx+phpFastCGI+MYSQL5+MenCache+MenCachedb构建大流量服务器集群.docx_第1页
第1页 / 共21页
Linuxcentos+Varnish+nginx+phpFastCGI+MYSQL5+MenCache+MenCachedb构建大流量服务器集群.docx_第2页
第2页 / 共21页
Linuxcentos+Varnish+nginx+phpFastCGI+MYSQL5+MenCache+MenCachedb构建大流量服务器集群.docx_第3页
第3页 / 共21页
Linuxcentos+Varnish+nginx+phpFastCGI+MYSQL5+MenCache+MenCachedb构建大流量服务器集群.docx_第4页
第4页 / 共21页
Linuxcentos+Varnish+nginx+phpFastCGI+MYSQL5+MenCache+MenCachedb构建大流量服务器集群.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

Linuxcentos+Varnish+nginx+phpFastCGI+MYSQL5+MenCache+MenCachedb构建大流量服务器集群.docx

《Linuxcentos+Varnish+nginx+phpFastCGI+MYSQL5+MenCache+MenCachedb构建大流量服务器集群.docx》由会员分享,可在线阅读,更多相关《Linuxcentos+Varnish+nginx+phpFastCGI+MYSQL5+MenCache+MenCachedb构建大流量服务器集群.docx(21页珍藏版)》请在冰豆网上搜索。

Linuxcentos+Varnish+nginx+phpFastCGI+MYSQL5+MenCache+MenCachedb构建大流量服务器集群.docx

Linuxcentos+Varnish+nginx+phpFastCGI+MYSQL5+MenCache+MenCachedb构建大流量服务器集群

Linux(centos)+Varnish+nginx+php(FastCGI)+MYSQL5+MenCache+MenCachedb构建大流量服务器集群-linux服务器应用

架构Varnish+nginx+php(FastCGI)+MYSQL5+MenCache+MenCachedb

说明:

       我在设计系统架构时,进行了大胆的尝试,只用6台Web服务器,达到了可承受4000万PV(页面访问量)的性能:

  抛弃了Apache,因为它能承受的并发连接相对较低;

  抛弃了Squid,因为它在内存利用、访问速度、并发连接、清除缓存等方面不如Varnish;

  抛弃了PHP4,因为PHP5处理面向对象代码的速度要比PHP4快,另外,PHP4已经不再继续开发;

  抛弃了F5BIG-IP负载均衡交换机,F5虽然是个好东西,但由于价格不菲,多个部门多个产品都运行在其之上,流量大、负载高,从而导致性能大打折扣;

  利用Varnishcache减少了90%的数据库查询,解决了MySQL数据库瓶颈;

  利用Varnishcache的内存缓存命中加快了网页的访问速度;

  利用Nginx+PHP5(FastCGI)的胜过Apache10倍的高并发性能,以最少的服务器数量解决了PHP动态程序访问问题;

  利用Memcached处理实时数据读写;

  利用HAProxy做接口服务器健康检查;

  经过压力测试,每台Web服务器能够处理3万并发连接数,承受4千万PV完全没问题。

  保证4千万PV的并发连接数:

(40000000PV/86400秒*10个派生连接数*5秒内响应*5倍峰值)/6台Web服务器=19290连接数

实验证明:

    

 

    举个简单的例子,服务器192.168.0.2上运行Nginx+PHP,192.168.0.3上运行Apache+PHP,你在192.168.0.4上安装压力测试工具webbench,以30万并发连接分别请求Nginx和Apache服务器上的一个PHP文件60秒钟。

在这期间,你用你的浏览器访问Apache服务器上的PHP文件,会发现要么是“该页无法显示”、要么是等待好几秒钟才能打开,而Nginx服务器的PHP文件,依然没有丝毫影响,访问速度仍然飞快。

webbench-c300000-t60 http:

//192.168.0.2/index.php

webbench-c300000-t60 http:

//192.168.0.3/index.php

 

以下为Nginx0.5.33+PHP5.2.5(FastCGI)服务器在3万并发连接下,开启的10个Nginx进程和250个php-cgi进程时的系统负载情况:

 

 

-------------------------------------------------------------------------

安装步骤:

  (系统要求:

Linux2.6+内核,本文中的Linux操作系统为AS4.3)

  一、获取相关开源程序:

  1、下载程序源码包到当前目录:

  本文中提到的所有开源软件为截止到2007年9月21日的最新稳定版。

我将它们打了两个压缩包。

  第一个压缩包:

nginx_php_mysql_1.0_1of2.zip:

  下载地址:

  第二个压缩包:

nginx_php_mysql_1.0_2of2.zip:

  下载地址:

  2、解压缩:

 unzipnginx_php_mysql_1.0_1of2.zip

 unzipnginx_php_mysql_1.0_2of2.zip

-------------------------------------------------------------------------

一、)安装Nginx

1.)安装

 Nginx("enginex")是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。

Nginx是由IgorSysoev为俄罗斯访问量第二的Rambler.ru站点开发的,它已经在该站点运行超过两年半了。

Igor将源代码以类BSD许可证的形式发布。

尽管还是测试版,但是,Nginx已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。

欢迎访问Nginx的中文维基,

2.)安装Nginx所需的pcre库:

[root@localhost]#tarzxvfpcre-7.2.tar.gz

[root@localhost]#cdpcre-7.2/

[root@localhost]#./configure

[root@localhost]#make&&makeinstall

[root@localhost]#cd../

3.)Nginx的编译参数如下:

[root@localhost]#./configure--user=www--group=www--prefix=/usr/local/nginx--with-openssl=/usr/include/openssl--with-pcre=/usr/local/lib--with-http_stub_status_module--without-http_memcached_module--without-http_fastcgi_module--without-http_rewrite_module--without-http_map_module--without-http_geo_module--without-http_autoindex_module    

在这里,需要说明一下,由于Nginx的配置文件中我想用到正则,所以需要pcre模块的支持。

上面安装步骤里我已经安装了pcre及pcre-devel的rpm包,但是Ngxin并不能正确找到.h/.so/.a/.la文件,因此我稍微变通了一下:

[root@localhost]#mkdir/usr/include/pcre/.libs/

[root@localhost]#cp/usr/local/lib/libpcre.a/usr/include/pcre/.libs/libpcre.a

[root@localhost]#cp/usr/local/lib/libpcre.a/usr/include/pcre/.libs/libpcre.la

[root@localhost]#cp/usr/local/lib/libpcre.a/usr/include/pcre/libpcre.a

[root@localhost]#cp/usr/local/lib/libpcre.a/usr/include/pcre/libpcre.la

然后,修改objs/Makefile大概在908行的位置上,注释掉以下内容:

./configure--disable-shared

接下来,就可以正常执行make及makeinstall了。

4.)修改配置文件/usr/local/server/nginx/conf/nginx.conf

以下是我的nginx.conf内容,仅供参考:

#运行用户

user  nobodynobody;

#启动进程

worker_processes  2;

#全局错误日志及PID文件

error_log  logs/error.lognotice;

pid        logs/nginx.pid;

#工作模式及连接数上限

events{

        useepoll;

        worker_connections      1024;

}

#设定http服务器,利用它的反向代理功能提供负载均衡支持

http{

        #设定mime类型

        include       conf/mime.types;

        default_type  application/octet-stream;

        #设定日志格式

        log_formatmain         '$remote_addr-$remote_user[$time_local]'

                                                '"$request"$status$bytes_sent'

                                                '"$http_referer""$http_user_agent"'

                                                '"$gzip_ratio"';

        log_formatdownload'$remote_addr-$remote_user[$time_local]'

                                                '"$request"$status$bytes_sent'

                                                '"$http_referer""$http_user_agent"'

                                                '"$http_range""$sent_http_content_range"';

        #设定请求缓冲

        client_header_buffer_size    1k;

        large_client_header_buffers  44k;

        #开启gzip模块

        gzipon;

        gzip_min_length  1100;

        gzip_buffers     48k;

        gzip_types       text/plain;

        output_buffers   132k;

        postpone_output  1460;

        #设定accesslog

        access_log  logs/access.log  main;

        client_header_timeout  3m;

        client_body_timeout    3m;

        send_timeout           3m;

        sendfile                on;

        tcp_nopush              on;

        tcp_nodelay             on;

        keepalive_timeout  65;

        #设定负载均衡的服务器列表

        upstreammysvr{

                #weigth参数表示权值,权值越高被分配到的几率越大

                #本机上的Squid开启3128端口

                server192.168.8.1:

3128weight=5;

                server192.168.8.2:

80   weight=1;

                server192.168.8.3:

80   weight=6;

        }

        #设定虚拟主机

        server{

                listen          80;

                server_name     192.168.0.1;

                charsetgb2312;

                #设定本虚拟主机的访问日志

                #access_log  logs/access.log  main;

                #如果访问/img/*,/js/*,/css/*资源,则直接取本地文件,不通过squid

                #如果这些文件较多,不推荐这种方式,因为通过squid的缓存效果更好

                location~^/(img|js|css)/  {

                        root    /home/web;

                        expires24h;

                }

                #对"/"启用负载均衡

                location/{

                        proxy_pass      http:

//mysvr;

                        proxy_redirect          off;

                        proxy_set_header        Host$host;

                        proxy_set_header        X-Real-IP$remote_addr;

                        proxy_set_header        X-Forwarded-For$proxy_add_x_forwarded_for;

                        client_max_body_size    10m;

                        client_body_buffer_size128k;

                        proxy_connect_timeout   90;

                        proxy_send_timeout      90;

                        proxy_read_timeout      90;

                        proxy_buffer_size       4k;

                        proxy_buffers           432k;

                        proxy_busy_buffers_size64k;

                        proxy_temp_file_write_size64k;

                }

                #设定查看Nginx状态的地址

                location/NginxStatus{

                        stub_status             on;

                        access_log              on;

                        auth_basic              "NginxStatus";

                        auth_basic_user_file  conf/htpasswd;

                }

        }

}

运行以下命令检测配置文件是否无误:

  如果没有报错,那么就可以开始运行Nginx了,执行以下命令即可:

  备注:

conf/htpasswd文件的内容用apache提供的htpasswd工具来产生即可,内容大致如下:

 

5.)查看Nginx运行状态

 

输入地址http:

//192.168.0.1/NginxStatus/,输入验证帐号密码,即可看到类似如下内容:

Activeconnections:

328

serveracceptshandledrequests

9309898228890

Reading:

1Writing:

3Waiting:

324

这里我是用虚拟机做的测试,所以链接数比较少.

  第一行表示目前活跃的连接数

  第三行的第三个数字表示Nginx运行到当前时间接受到的总请求数,如果快达到了上限,就需要加大上限值了。

top-b-nl

查看NGINX的进程号:

netstat-n|awk'/^tcp/{++S[$NF]}END{for(ainS)printa,S[a]}'

6.)配置支持FCGI文件

vi/usr/local/webserver/nginx/conf/fcgi.conf

输入以下内容:

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;

fastcgi_param  SERVER_SOFTWARE    nginx;

fastcgi_param  QUERY_STRING       $query_string;

fastcgi_param  REQUEST_METHOD     $request_method;

fastcgi_param  CONTENT_TYPE       $content_type;

fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;

fastcgi_param  REQUEST_URI        $request_uri;

fastcgi_param  DOCUMENT_URI       $document_uri;

fastcgi_param  DOCUMENT_ROOT      $document_root;

fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  REMOTE_ADDR        $remote_addr;

fastcgi_param  REMOTE_PORT        $remote_port;

fastcgi_param  SERVER_ADDR        $server_addr;

fastcgi_param  SERVER_PORT        $server_port;

fastcgi_param  SERVER_NAME        $server_name;

#PHPonly,requiredifPHPwasbuiltwith--enable-force-cgi-redirect

#fastcgi_param  REDIRECT_STATUS    200;

7.)启动Nginx

ulimit-SHn51200

/usr/local/nginx/sbin/nginx-c/usr/local/nginx/conf/nginx.conf

-------------------------------------------------------------------------

8.)配置开机自动启动Nginx+PHP

vi/etc/rc.local

在末尾增加以下内容:

/usr/local/php/bin/spawn-fcgi-a127.0.0.1-p10080-C250-uwww-f/usr/local/php/bin/php-cgi

ulimit-SHn51200

/usr/local/nginx/sbin/nginx-c/usr/local/nginx/conf/nginx.conf

-------------------------------------------------------------------------

  

二.)安装MYSQL

安装mysql-5.0.45.tar.gz,下面是总体的编译文件

1.-static  13%

   --with-client-ldflags=-all-static

   --with-mysqld-ldflags=-all-static

静态链接提高13%性能

2.-pgcc  1%

   CFLAGS="-O3-mpentiumpro-mstack-align-double"CXX=gcc 

     CXXFLAGS="-O3-mpentiumpro-mstack-align-double 

     -felide-constructors-fno-exceptions-fno-rtti"

如果是Inter处理器,使用pgcc提高1%性能

3.UnixSocket  7.5%

   --with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock

使用unix套接字链接提高7.5%性能,所以在windows下mysql性能肯定不如unix下面

4.--enable-assembler

允许使用汇编模式(优化性能)

[root@localhost]#tarzxvfmysql-5.0.45.tar.gz

[root@localhost]#./configure--prefix=/usr/local/mysql/--without-debug--with-unix-socket-path=/tmp/mysql.sock--with-client-ldflags=-all-static--with-mysqld-ldflags=-all-static--enable-assembler--with-extra-charsets=gbk,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 动态背景

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1