高负载web架构(二)

b.在node6上安装nginx作为静态内容处理

编译安装nginx

# tar xfnginx-1.6.1.tar.gz -C /usr/local/

首先添加用户nginx,实现以之运行nginx服务进程:

# groupadd -rnginx

# useradd -r -gnginx nginx

安装一些依赖的包

# yum install -ygcc gcc-c++ pcre-devel openssl-devel

接着开始编译和安装:

# ./configure--prefix=/usr/local/nginx --error-log-path=/var/log/nginx/error.log--http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid--lock-path=/var/lock/nginx.lock --user=nginx --group=nginx--with-http_ssl_module --with-http_flv_module --with-http_stub_status_module--with-http_gzip_static_module--http-client-body-temp-path=/usr/local/nginx/client--http-proxy-temp-path=/usr/local/nginx/proxy --with-pcre

# make &&make install

提供启动脚本,/etc/rc.d/init.d/nginx

#!/bin/sh

#

# nginx - thisscript starts and stops the nginx daemon

#

# chkconfig:   - 85 15

#description:  Nginx is an HTTP(S) server,HTTP(S) reverse \

#               proxy and IMAP/POP3 proxy server

# processname:nginx

# config:      /etc/nginx/nginx.conf

# config:      /etc/sysconfig/nginx

# pidfile:     /var/run/nginx.pid

# Source functionlibrary.

./etc/rc.d/init.d/functions

# Sourcenetworking configuration.

./etc/sysconfig/network

# Check thatnetworking is up.

["$NETWORKING" = "no" ] && exit 0

nginx="/usr/local/nginx/sbin/nginx"

prog=$(basename$nginx)

NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"

[ -f/etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

make_dirs() {

# make required directories

user=`nginx -V 2>&1 | grep"configure arguments:" | sed ‘s/[^*]*--user=\([^ ]*\).*/\1/g‘ -`

options=`$nginx -V 2>&1 | grep‘configure arguments:‘`

for opt in $options; do

if [ `echo $opt | grep ‘.*-temp-path‘`]; then

value=`echo $opt | cut -d"=" -f 2`

if [ ! -d "$value" ]; then

# echo "creating"$value

mkdir -p $value && chown-R $user $value

fi

fi

done

}

start() {

[ -x $nginx ] || exit 5

[ -f$NGINX_CONF_FILE ] || exit 6

make_dirs

echo -n $"Starting $prog: "

daemon $nginx -c $NGINX_CONF_FILE

retval=$?

echo

[ $retval -eq 0 ] && touch$lockfile

return $retval

}

stop() {

echo -n $"Stopping $prog: "

killproc $prog -QUIT

retval=$?

echo

[ $retval -eq 0 ] && rm -f$lockfile

return $retval

}

restart() {

configtest || return $?

stop

sleep 1

start

}

reload() {

configtest || return $?

echo -n $"Reloading $prog: "

killproc $nginx -HUP

RETVAL=$?

echo

}

force_reload() {

restart

}

configtest() {

$nginx -t -c $NGINX_CONF_FILE

}

rh_status() {

status $prog

}

rh_status_q() {

rh_status >/dev/null 2>&1

}

case"$1" in

start)

rh_status_q && exit 0

$1

;;

stop)

rh_status_q || exit 0

$1

;;

restart|configtest)

$1

;;

reload)

rh_status_q || exit 7

$1

;;

force-reload)

force_reload

;;

status)

rh_status

;;

condrestart|try-restart)

rh_status_q || exit 0

;;

*)

echo $"Usage: $0{start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"

exit 2

esac

而后为此脚本赋予执行权限:

# chmod +x/etc/rc.d/init.d/nginx

添加至服务管理列表,并让其开机自动启动:

# chkconfig --addnginx

# chkconfig nginxon

而后就可以启动服务并测试了:

# service nginxstart

# ss -tnlp | grep80

上传文件测试访问

访问中文文件名乱码问题

解决办法:http://www.apelearn.com/bbs/thread-7630-1-1.html

centos上直接用yum安装:
yum install -y convmv
假如,转码命令为:
convmv  -f 源编码 -t 目标编码  --notest  filename 
我想,大多数情况下,因为这个文件名是乱码,所以没有办法去表示它,只好使用通配:
convmv -f GBK -t UTF-8  --notest  *.txt

此时浏览器内容显示的是乱码,查看一下发现浏览器的显示格式为utf-8,改一下GBK的,这样就显示正常了

c.在node5上安装nginx+php

编译安装nginx

# tar xfnginx-1.6.1.tar.gz -C /usr/local/

首先添加用户nginx,实现以之运行nginx服务进程:

# groupadd -rnginx

# useradd -r -gnginx nginx

安装一些依赖的包

# yum install -ygcc gcc-c++ pcre-devel openssl-devel

接着开始编译和安装:

# ./configure--prefix=/usr/local/nginx --error-log-path=/var/log/nginx/error.log--http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid--lock-path=/var/lock/nginx.lock --user=nginx --group=nginx--with-http_ssl_module --with-http_flv_module --with-http_stub_status_module--with-http_gzip_static_module--http-client-body-temp-path=/usr/local/nginx/client--http-proxy-temp-path=/usr/local/nginx/proxy --with-pcre

# make &&make install

提供启动脚本,/etc/rc.d/init.d/nginx

#!/bin/sh

#

# nginx - this scriptstarts and stops the nginx daemon

#

# chkconfig:   - 85 15

# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \

#               proxy and IMAP/POP3 proxy server

# processname: nginx

# config:      /etc/nginx/nginx.conf

# config:      /etc/sysconfig/nginx

# pidfile:     /var/run/nginx.pid

# Source function library.

./etc/rc.d/init.d/functions

# Source networkingconfiguration.

. /etc/sysconfig/network

# Check that networking isup.

[ "$NETWORKING"= "no" ] && exit 0

nginx="/usr/local/nginx/sbin/nginx"

prog=$(basename $nginx)

NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"

[ -f /etc/sysconfig/nginx] && . /etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

make_dirs() {

# make required directories

user=`nginx -V 2>&1 | grep"configure arguments:" | sed ‘s/[^*]*--user=\([^ ]*\).*/\1/g‘ -`

options=`$nginx -V 2>&1 | grep‘configure arguments:‘`

for opt in $options; do

if [ `echo $opt | grep ‘.*-temp-path‘`]; then

value=`echo $opt | cut -d"=" -f 2`

if [ ! -d "$value" ]; then

# echo "creating"$value

mkdir -p $value && chown-R $user $value

fi

fi

done

}

start() {

[ -x $nginx ] || exit 5

[ -f $NGINX_CONF_FILE ] || exit 6

make_dirs

echo -n $"Starting $prog: "

daemon $nginx -c $NGINX_CONF_FILE

retval=$?

echo

[ $retval -eq 0 ] && touch$lockfile

return $retval

}

stop() {

echo -n $"Stopping $prog: "

killproc $prog -QUIT

retval=$?

echo

[ $retval -eq 0 ] && rm -f$lockfile

return $retval

}

restart() {

configtest || return $?

stop

sleep 1

start

}

reload() {

configtest || return $?

echo -n $"Reloading $prog: "

killproc $nginx -HUP

RETVAL=$?

echo

}

force_reload() {

restart

}

configtest() {

$nginx -t -c $NGINX_CONF_FILE

}

rh_status() {

status $prog

}

rh_status_q() {

rh_status >/dev/null 2>&1

}

case "$1" in

start)

rh_status_q && exit 0

$1

;;

stop)

rh_status_q || exit 0

$1

;;

restart|configtest)

$1

;;

reload)

rh_status_q || exit 7

$1

;;

force-reload)

force_reload

;;

status)

rh_status

;;

condrestart|try-restart)

rh_status_q || exit 0

;;

*)

echo $"Usage: $0{start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"

exit 2

esac

而后为此脚本赋予执行权限:

# chmod +x/etc/rc.d/init.d/nginx

添加至服务管理列表,并让其开机自动启动:

# chkconfig --addnginx

# chkconfig nginxon

而后就可以启动服务并测试了:

# service nginxstart

# ss -tnlp | grep80

安装php,MySQL独立部署为一台机器

解压

# tar xfphp-5.4.26.tar.bz2 -C /usr/local/

安装依赖的包:

#yuminstall -y libxml2-devel bzip2-devel libmcrypt-devel libcurl-devel

说明:

这里为了支持apache的worker或event这两个MPM,编译时使用了--enable-maintainer-zts选项。

如果使用PHP5.3以上版本,为了链接MySQL数据库,可以指定mysqlnd,这样在本机就不需要先安装MySQL或MySQL开发包了。mysqlnd从php 5.3开始可用,可以编译时绑定到它(而不用和具体的MySQL客户端库绑定形成依赖),但从PHP 5.4开始它就是默认设置了。

# ./configure --with-mysql=mysqlnd--with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd

编译安装libmcrypt

# tar zxvflibmcrypt-2.5.8.tar.gz

# cdlibmcrypt-2.5.8

# ./configure

# make &&make install

配置

# ./configure--prefix=/usr/local/php --with-mysql=mysqlnd --with-openssl --enable-fpm--with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --enable-mbstring--with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib-dir--with-libxml-dir=/usr --enable-xml --with-mhash --with-mcrypt --with-config-file-path=/etc/php --with-config-file-scan-dir=/etc/php--with-bz2 --with-curl

编译和安装

#make &&make install

启动fastcgi:

# cp/usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

# cpphp.ini-production /etc/php.ini

# cpsapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm

# chmod +x/etc/rc.d/init.d/php-fpm

# chkconfig --addphp-fpm

# vim/usr/local/php/etc/php-fpm.conf

启用如下选项:

pm.max_children =50

pm.start_servers =5

pm.min_spare_servers= 2

pm.max_spare_servers= 8

pid =/var/run/php-fpm.pid

把/usr/local/nginx/conf/fastcgi_params中的内容替换为

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;

启用nginx配置文件中

location / {

root   html;

index index.php index.htmlindex.htm; 需要加上index.php

}

.....

location ~ \.php$ {

root           html;

fastcgi_pass   127.0.0.1:9000;

fastcgi_index  index.php;

fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

include        fastcgi_params;

}

# cat /usr/local/nginx/html/index.php

<?php

phpinfo();

?>

#service php-fpmstart

测试访问

时间: 2024-10-12 21:14:15

高负载web架构(二)的相关文章

高负载web架构(一)

架构图 需求分析1.haproxy用来做多个web服务的前端反代,由于haproxy处于最前端而且是向外提供服务,如果出现宕机时那么整个服务都不可用,那么需要给haproxy做高可用,这里使用比较轻量级的keepalived作为haproxy的高可用:2.使用varnish作为整个服务的第二层,我们知道varnish的并发能力并不是很优秀,这里varnish既提供了缓存功能又提供了反向代理的功能,此处用2台varnish来做高可用,并且实现后端内容的动静分离,动态内容都分发node4.node5

高负载web架构(三)

d.在node4上安装apache+tomcat 安装jdk1.7.0_67 需要依赖JDK才能运行 jdk1.7.0_67和apache-tomcat-7.0.55.tar.gz存在兼容性问题   apache-tomcat-7.0.42.tar.gz #rpm -ivh jdk-7u67-linux-x64.rpm # tar xf apache-tomcat-7.0.55.tar.gz-C /usr/local/ 导出命令 # cat/etc/profile.d/java.sh expor

高负载web架构(四)

f.在node9上部署好zabbix 监控: 最关键的工具:传感器:收集数据,检测数据 过程: 数据采集 --> 数据存储 --> 数据展示 报警:采集到的数据超出阈值 常见的实现监控SNMP:Simple Network Management Protocol 简单网络管理协议 有两部分组成:监控端(NMS)和被监控端(agent) SNMP的工作模式: NMS主动向agent采集数据 agent主动向NMS报告数据 NMS请求agent修改配置 SNMP的组件:三部分组成 MIB:mana

nginx+keepalived高可用web架构

1.下载所需的软件包 (1).keepalived软件包     keepalived-1.1.20.tar.gz (2).nginx软件包     nginx-1.1.6.tar.gz (3).nginx模块软件包     libunwind-0.99.tar.gz     agentzh-encrypted-session-nginx-module-v0.02-0-gc752861.tar.gz     chunkin-nginx-module-0.23rc2.tar.gz     goog

实战Nginx负载均衡高冗余高可用WEB架构

最近公司主力网站之一改版完成终于上线了,牵扯了我大半年的时间,现在终于有时间坐下来写点东西,总结沉淀一下自己的技术心得.此次,根据服务器的数量和质量,我采用负载均衡高冗余的架构,考虑单点故障,WEB也抛弃了apache,而使用的是nginx,数据库还是使用主.从架构.该架构目前承载80W的PV,没有大的压力. 这里简单谈一下web的选择疑问,是使用nginx还是apache,很多朋友在规划网站的时候都出现难以选择的问题,甚至有朋友在建设初用apache后期改成nginx.接下来我说一下我的规划选

大型高并发高负载web应用系统架构-数据库架构策略

转自CSDN 在WEB网站的规模从小到大不断扩展的过程中,数据库的访问压力也不断的增加,数据库的架构也需要动态扩展,在数据库的扩展过程基本上包含如下几步,每一个扩展都可以比上一步骤的部署方式的性能得到数量级的提升. 1.WEB应用和数据库部署在同一台服务器上 一般的小规模的网站采用这种方式,用户量.数据量.并发访问量都比较小,否则单台服务器无法承受,并且在遇到性能瓶颈的时候升级硬件所需要的费用非常高昂,在访问量增加的时候,应用程序和数据库都来抢占有限的系统资源,很快就又会遇到性能问题. 2.WE

PHP高并发高负载系统架构

1.为什么要进行高并发和高负载的研究 1.1.产品发展的需要 1.2.公司发展的需要 1.3.当前形式决定的 2.高并发和高负载的约束条件 2.1.硬件 2.2.部署 2.3.操作系统 2.4.Web 服务器 2.5.PHP 2.6.MySQL 2.7.测试 3.解决之道——硬件篇 处理能力的提升:部署多颗CPU,选择多核心.具备更高运算频率.更大高速缓存的CPU: 处理能力的提升最直接的反应在于Web请求的处理效率和PHP程序的执行效率. 内存带宽与容量:更大的内存带宽和容量: 内存带宽与容量

大型高并发高负载web应用系统架构

在WEB网站的规模从小到大不断扩展的过程中,用户访问量和并发量不断增加. 构建大型的商业网站绝对不可能像构建普通的小型网站一样一蹴而就,需要从严格的软件工程管理的角度进行认真规划,有步骤有逻辑地进行开发. 对于大型网站来说,所采用的技术涉及面极其广泛,从硬件到软件.编程语言.数据库.Web服务器.防火墙等各个领域都有了很高的要求,已经不是原来简单的html静态网站所能比拟的. 那如何优化程序和网站进行部署呢? 以下是我的几点个人看法(个人用NHibernater + MySQL或MSSQL) 一

Haproxy+Keepalived(双机热备)搭建高可用web架构

1.目的搭建web高可用架构,用haproxy作为前段负载均衡分摊后端web服务器压力,Keepalived保证haproxy的存活(双机热备:一台haproxy挂了,自动切换到另外一台haproxy上)2.环境(系统均为centos7,防火墙与selinux都关闭)192.168.0.100:web1(端口7000).web2(端口8000)192.168.0.101:haproxy1.keepalived(MASTER)192.168.0.102:haproxy2.keepalived(BA