一、lamp分离部署工作图

二、LAMP的安装与配置

1、环境准备

2、对 PHP 服务器进行部署

#以下为安装PHP及其依赖
[root@php ~ ]# tar zxf libmcrypt-2.5..tar.gz -C /usr/src
[root@php ~]# tar zxf php-5.6..tar.gz -C /usr/src
[root@php ~]# yum -y install libxml2-devel openssl-devel bzip2-devel
[root@php ~]# cd /usr/src/libmcrypt-2.5.
[root@php libmcrypt-2.5.]# ./configure --prefix=/usr/local/libmcrypt && make && make install
[root@php libmcrypt-2.5.]# cd ../php-5.6./
[root@php php-5.6.]# ./configure --prefix=/usr/local/php5. --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl --enable-fpm --enable-sockets -

上面编译安装PHP的选项作用解释如下:

  • —prefix=/usr/local/php5.6 #安装位置

  • —with-mysql=mysqlnd #支持 mysql

  • —with-pdo-mysql=mysqlnd #支持 pdo 模块

  • —with-mysqli=mysqlnd #支持 mysqli 模块

    # 上面的三选项的作用:数据库与 php 不在一个服务器上,指定此种方式,安装数据库连接驱动。

  • —with-openssl #支持 openssl 模块

  • —enable-fpm #支持 fpm 模式

  • —enable-sockets #启用 socket 支持

  • —enable-sysvshm #启用系统共享内存支持

  • —enable-mbstring #多字节字串、像我们的中文就是多字节字串

  • —with-freetype-dir #支持 freetype、就要装 freetype-devel、跟字体相关的、字体解析工具

  • —with-jpeg-dir

  • —with-png-dir

    上面的二选项的作用:处理 jpeg、png 图片的、php 可以动态生成 jpeg 图片

  • —with-zlib #是个压缩库、在互联网传输时用来压缩传输的

  • —with-libxml-dir=/usr #这个 libxml 是用来解析 xml 的、指定/usr 下

  • —enable-xml #支持 xml 的

  • —with-mhash #支持 mhash

  • —with-mcrypt=/usr/local/libmcrypt #libmcrypt-devel 这个程序包所指定的

  • —with-config-file-path=/etc #指定配置文件的存放路径的

  • —with-config-file-scan-dir=/etc/php.d #配置文件扫描路径

  • —with-bz2 #支持 BZip2

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

#以下为调整PHP的配置文件及控制服务的启停
[root@php php-5.6.]# cp php.ini-production /etc/php.ini #复制源码中中提供的PHP配置文件
[root@php php-5.6.]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
#复制其服务控制脚本文件
[root@php php-5.6.]# chmod +x /etc/init.d/php-fpm #赋予执行权限
[root@php php-5.6.]# chkconfig --add php-fpm #添加为系统服务,以便支持systemctl管理
[root@php php-5.6.]# chkconfig php-fpm on #开启
#复制php-fpm提供的默认配置文件并编辑它
[root@php php-5.6.]# cp /usr/local/php5./etc/php-fpm.conf.default /usr/local/php5./etc/php-fpm.conf
[root@php php-5.6.]# vim /usr/local/php5./etc/php-fpm.conf
listen = 192.168.20.5: #监听地址是本机的IP9000端口
pm.max_children = #最大启动的进程数
pm.start_servers = #初始启动进程数
pm.min_spare_servers = #最小空闲进程
pm.max_spare_servers = #最大空闲进程
#修改完成后,保存退出即可
[root@php php-5.6.]# systemctl start php-fpm #启动PHP服务
[root@php php-5.6.]# netstat -anput | grep php-fpm #确认其9000端口以启动
[root@php ~]# mkdir -p /var/www/html #创建其网页存放目录,须和apache服务器的网页存放路径一样
[root@php ~]# firewall-cmd --permanent --add-port=/tcp #防火墙放行9000端口的流量
[root@php ~]# firewall-cmd --reload #重载以便生效

3、配置apache服务器(切换到apache服务器进行以下操作)

[root@apache ~]# cd /usr/local/http-2.4./conf/
[root@apache conf]# vim httpd.conf #编辑apache服务的主配置文件
# 启用以下两个模块(将下面两行前面的“#”号去掉即可)
# LoadModule proxy_module modules/mod_proxy.so
# LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
Include conf/extra/httpd-vhosts.conf #启用虚拟主机的配置文件
..............#省略部分内容
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
#定位到上面两行(注意,这两行一定是没有被注释的),然后写入下面两行配置,让apache可以识别php格式的页面 AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
<IfModule dir_module> #定位到该标签
DirectoryIndex index.php index.html #在index.html前添加index.php
</IfModule>
#至此保存退出即可
[root@apache conf]# vim extra/httpd-vhosts.conf #编辑虚拟主机配置文件 # 虚拟主机的配置文件如下
<VirtualHost *:>
ServerAdmin lv916551516@.com
DocumentRoot "/var/www/html"
ServerName www.test.com
ErrorLog "logs/test-error_log"
CustomLog "logs/test-access_log" common
ProxyRequests Off
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://192.168.20.5:9000/var/www/html/$1
<Directory "/var/www/html">
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
# 编辑完成后,保存退出
[root@apache conf]# mkdir -p /var/www/html/ #创建网页根目录
[root@apache conf]# echo this is a test file >> /var/www/html/index.html
[root@apache conf]# apachectl restart #重启apache服务

以上虚拟主机的配置文件解释如下:

ProxyRequests off #关闭正向代理

ProxyPassMatch #把以.php 结尾的文件请求发送到 php-fpm 进程,php-fpm 至少需要知道运行的目录和 URI,所以这里直接在 fcgi://192.168.20.5:9000 后指明了这两个参数,其它的参数的传递已经被 mod_proxy_fcgi.so 进行了封装,不需要手动指定。

特别注意的是,/var/www/html/需要与    中的 DocumentRoot 后的路径一致ProxyPassMatch #只有满足特定正则模式的内容才会匹配并执行此规则,这里的模式是,^/(..php(/.)?)$ ,从网站(虚拟主机

的根目录开始,匹配任何以 .php 结尾,或者在 .php 之后紧跟一个 / 再跟别的内容的路径。

^ (caret) 和 $ (dollar)标志要匹配的路径的开始和结束

( )括号里的内容可以用 $1 来表示,以方便后面引用它。

fcgi://192.168.20.5:9000 通过 mod_proxy_fcgi 来转发的代理,使用 fastCGI 协议,转到PHP-FPM 监听的端口。

/var/www/html #非常重要!必须与虚拟主机的路径匹配,且必须是对应 php 文件在操作系统中的绝对路径,否则会找不到文件。4、回到PHP服务器,测试LAMP环境

4、回到PHP服务器,测试LAMP环境

#编写以下两个网页文件
[root@php ~]# cat /var/www/html/index.php #用来显示PHP的版本信息
<?php
phpinfo();
?>
[root@php ~]# cat /var/www/html/test.php #用来测试连接数据库
<?php
$link=mysqli_connect('192.168.20.6','lvjz','pwd@123');
if($link) echo "恭喜你,数据库连接成功!!!"; else echo "connect shibai";
mysqli_close($link);
?

5、在MySQL服务器上添加用户,并赋予远程登录的权限

[root@localhost src]# mysql -uroot -p
Enter password: #验证数据库用户密码
mysql> create database bbs; #创建专用的数据库
Query OK, row affected (0.00 sec)
mysql> grant all on bbs.* to lvjz@192.168.20.5 identified by 'pwd@123'; #授权用户为lvjz
Query OK, rows affected (0.01 sec)

客户端访问web服务器的www.test.com 进行测试:

客户端访问web服务器的www.test.com/test.php 进行测试:

看到上面两个测试页说明 apache、php、mysql 之间可以协同工作了。

三、Web网站压力测试

网站性能压力测试是服务器网站性能调优过程中必不可缺少的一环。只有让服务器处在高压情况下,才能真正体现出软件、硬件等各种设置不当所暴露出的问题。

性能测试工具目前最常见的有以下几种:ab、http_load、webbench、siege。我比较习惯用apahce自带的ab工具。

ab 非常实用,它不仅可以对 apache 服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。比如 nginx、tomcat、IIS 等。

1、ab 的原理

ab 命令会创建多个并发访问线程,模拟多个访问者同时对某一 URL 地址进行访问。它的测试目标是基于 URL 的,因此,它既可以用来测试 apache 的负载压力,也可以测试 nginx、lighthttp、tomcat、IIS 等其它 Web 服务器的压力。

ab 命令对发出负载的计算机要求很低,它既不会占用很高 CPU,也不会占用很多内存。但却会给目标服务器造成巨大的负载,其原理类似 CC gong击。自己测试使用也需要注意,否则一次上太多的负载。可能造成目标服务器资源耗完,严重时甚至导致死机。

2、ab的安装

ab 的安装非常简单,如果是源码安装 apache 的话,那就更简单了。apache 安装完毕后 ab命令存放在 apache 安装目录的 bin 目录下。如下:

/usr/local/http2.4.23/bin/ab。

如果 apache 是通过 yum 的 RPM 包方式安装的话,ab 命令默认存放在/usr/bin 目录下。如下:which ab

注意:如果不想安装 apache 但是又想使用 ab 命令的话,我们可以直接安装 apache 的工具包 httpd-tools。如下:

yum -y install httpd-tools

查看 ab 是否安装成功,可以切换到上述目录下,使用 ab –V 命令进行检测。

[root@apache conf]# ab -V     #好像报错了
ab: error while loading shared libraries: libssl.so.1.0.: cannot open shared object file: No such file or directory
[root@apache conf]# export LD_LIBRARY_PATH="/usr/local/openssl/lib/"
#执行该命令,设置环境变量即可
[root@apache conf]# ab -V
This is ApacheBench, Version 2.3 <$Revision: $>
.................... #省略部分内容

3、ab压力测试

[root@apache ~]# ab -c  -n  127.0.0.1/index.html   #对本机的静态网页进行测试
#-n:在测试会话中所执行的请求个数(即总请求数)。
#-c:一次产生的请求个数(即 并发用户数 )。 This is ApacheBench, Version 2.3 <$Revision: $>
Copyright Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 127.0.0.1 (be patient)
Completed requests
Completed requests
Completed requests
Completed requests
Completed requests
Completed requests
Completed requests
Completed requests
Completed requests
Completed requests
Finished requests Server Software: Apache/2.4.
Server Hostname: 127.0.0.1
Server Port: Document Path: /index.html #请求的资源
Document Length: bytes #HTTP 响应数据的正文长度 Concurrency Level: #并发个数(并发用户数)
Time taken for tests: 2.093 seconds #所有这些请求处理完成所花费的时间
Complete requests: #完成请求数
Failed requests: #失败的请求数
Total transferred: bytes
#表示所有请求的响应数据长度总和,包括每个 HTTP响应数据的头信息和正文数据的长度。
HTML transferred: bytes #网页文件的大小(就是去除响应头部后的大小)
Requests per second: 477.87 [#/sec] (mean)
#吞吐量,计算方式:请求的次数/用户等待时间(Complete requests/Time taken for tests)
Time per request: 1046.320 [ms] (mean)
#用户平均等待一个页面的时间,计算方式:用户等待时间/完成请求的次数(Complete requests/Concurrency Level)
Time per request: 2.093 [ms] (mean, across all concurrent requests)
#服务器处理一个请求花费的时间,计算方式:用户等待时间/完成请求的次数(Time taken for tests/Complete requests)
Transfer rate: 123.20 [Kbytes/sec] received
#用户请求的数据大小,计算方式:数据的总长度/用户等待时间(Total trnasferred/ Time taken for tests)
#这个统计很好的说明服务器的处理能力达到极限时,其出口宽带的需求量。(即平均每秒网络上的流量) Connection Times (ms)
min mean[+/-sd] median max
Connect: 401.1
Processing: 224.7
Waiting: 208.0
Total: 559.7 Percentage of the requests served within a certain time (ms)
%
%
%
%
%
%
%
%
% (longest request)
以上部分的数据用于描述每个请求处理时间的分布情况,比如以上测试,%的请求处理时间都不超过 834ms,这个处理时间是指前面的 Time per request,即对于单个用户而言,平均每个请求的处理时间。

4、ab 性能指标

在进行性能测试过程中有几个指标比较重要:

1、吞吐率(Requests per second)

服务器并发处理能力的量化描述,单位是 reqs/s,指的是在某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。

注:吞吐率是基于并发用户数的。这句话代表了两个含义:

  • 吞吐率和并发用户数相关

  • 不同的并发用户数下,吞吐率一般是不同的
    计算公式:总请求数/处理完成这些请求数所花费的时间,即
    Request per second=Complete requests/Time taken for tests
    必须要说明的是,这个数值表示当前机器的整体性能,值越大越好。

2、并发连接数(The number of concurrent connections)
并发连接数指的是某个时刻服务器所接受的请求数目,简单的讲,就是一个会话。

3、并发用户数(Concurrency Level)
要注意区分这个概念和并发连接数之间的区别,一个用户可能同时会产生多个会话,也即连接数。

4、用户平均请求等待时间(Time per request)
计算公式:处理完成所有请求数所花费的时间/(总请求数/并发用户数),即:
Time per request=Time taken for tests/(Complete requests/Concurrency Level)

5、服务器平均请求等待时间(Time per request:across all concurrent requests)
计算公式:处理完成所有请求数所花费的时间/总请求数,即:
Time taken for/testsComplete requests
可以看到,它是吞吐率的倒数。
同时,它也等于用户平均请求等待时间/并发用户数,即
Time per request/Concurrency Level

四、部署PHP加速软件Xcache

Xcache是一款用来为PHP页面做缓存的工具。当然,实际工作环境中,是不会对PHP动态页面来做缓存的,意义不大(动态页面嘛,数据更新较快)又占用内存空间。这里只是为了表现出,PHP动态页面,也是可以做缓存的。

1、安装Xcache

在对PHP部署时,我提供了一个下载的链接,其中包含了这个xcache这个源码包,上传至PHP服务器即可。

[root@php ~]# tar zxf xcache-3.2..tar.gz -C /usr/src
[root@php ~]# cd /usr/src/xcache-3.2./
[root@php xcache-3.2.]# /usr/local/php5./bin/phpize #使用PHP中的phpize生成configure文件
Configuring for:
PHP Api Version:
Zend Module Api No:
Zend Extension Api No: [root@php xcache-3.2.]# ./configure --enable-xcache --enable-xcache-coverager --enable-xcache-optimizer --with-php-config=/usr/local/php5./bin/php-config && make && make install
#安装完成后,记住结尾提示的路径,以后会用到,如下:
/usr/local/php5./lib/php/extensions/no-debug-zts-

2、创建Xcache缓存文件

[root@php ~]# touch /tmp/xcache
[root@php ~]# chmod /tmp/xcache #保证有写入权限

3、复制 Xcache 后台管理程序到网站根目录

[root@php xcache-3.2.]# cp -r htdocs/ /var/www/html/xcache

4、配置PHP支持Xcache

[root@php xcache-3.2.]# vim /etc/php.ini  #编辑PHP的主配置文件
#在文件末尾添加以下内容
[xcache-common]
extension = /usr/local/php5./lib/php/extensions/no-debug-zts-/xcache.so
#这就是指定安装Xcache后返回的目录
[xcache.admin]
xcache.admin.enable_auth = Off
[xcache]
xcache.shm_scheme ="mmap"
xcache.size=60M
xcache.count =
xcache.slots =8K
xcache.ttl=
xcache.gc_interval =
xcache.var_size=64M
xcache.var_count =
xcache.var_slots =8K
xcache.var_ttl=
xcache.var_maxttl=
xcache.var_gc_interval =
xcache.test =Off
xcache.readonly_protection = Off
xcache.mmap_path ="/tmp/xcache"
xcache.coredump_directory =""
xcache.cacher =On
xcache.stat=On
xcache.optimizer =Off
[xcache.coverager]
xcache.coverager =On
xcache.coveragedump_directory =""
[root@php xcache-3.2.]# systemctl restart php-fpm #重启PHP
[root@php xcache-3.2.]# vim /etc/exports #设置nfs /var/www/html/ 192.168.20.0/(rw,sec=sys,sync,no_root_squash)

5、回到apache服务器,挂载nfs共享目录,以便同步网页根目录下的文件

[root@apache ~]# showmount -e 192.168.20.5  #确认可以查看到PHP共享的目录
Export list for 192.168.20.5:
/var/www/html 192.168.20.0/
[root@apache ~]# mount -t nfs 192.168.20.5:/var/www/html/ /var/www/html/
#挂载
[root@apache ~]# df -hT /var/www/html/ #确认已挂载
文件系统 类型 容量 已用 可用 已用% 挂载点
192.168.20.5:/var/www/html nfs4 39G .0G 34G % /var/www/html

6、测试

访问www.test.com/xcache ,即可看到如下页面:

至此,Linux 下安装 php 加速软件 Xcache 完成。

7、对apache的动态页面进行测试

[root@apache ~]# export LD_LIBRARY_PATH="/usr/local/openssl/lib/"
[root@apache ~]# ab -c 100 -n 1000 http://192.168.20.4/index.php #进行第一次测试
......#省略部分内容
Time taken for tests: 4.292 seconds
......#省略部分内容
Requests per second: 232.99 [#/sec] (mean)
......#省略部分内容
[root@apache ~]# ab -c 100 -n 1000 http://192.168.20.4/index.php #进行第二次测试
......#省略部分内容
Time taken for tests: 1.631 seconds
......#省略部分内容
Requests per second: 613.29 [#/sec] (mean)
......#省略部分内

查看Xcache的命中率:

原文链接:https://mp.weixin.qq.com/s?__biz=MzA4Nzg5Nzc5OA==&mid=2651680843&idx=1&sn=364cd8931c2f4ea728970cb204f16866&chksm=8bcbb3e2bcbc3af473193150f5008043cbc53ee63c6fed51c3f329f0a54097afa9d8a55929e0&mpshare=1&scene=23&srcid=&sharer_sharetime=1574643521412&sharer_shareid=a3ddf867e44058df9979f019c4b7ebfd#rd

lamp的动静分离部署的更多相关文章

  1. LNMP下动静分离部署phpmyadmin软件包

    LNMP环境肯定是先要配置好的.可以参考我之前的博客.那我们直接进行配置,我这里使用了三台机器进行动静分离部署,第一台负责nginx反向代理,第二台负责php-fpm应用程序以及mariadb的服务器 ...

  2. Nginx+lamp构建动静分离项目

    一.nginx代理的概述 概述:nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个内部网络代理上网的代理 ...

  3. HAproxy+varnish动静分离部署wordpress

    author:JevonWei 版权声明:原创作品 实验背景:将wordpress应用部署在后端服务器上,使用HAProxy做代理服务器,Varnish做缓存服务器,后端有四台web服务器,web1和 ...

  4. 19.Tomcat多实例部署及负载均衡、动静分离

    Tomcat多实例部署及负载均衡.动静分离 目录 Tomcat多实例部署及负载均衡.动静分离 Tomcat多实例部署 安装jdk 设置jdk环境变量 安装tomcat 配置 tomcat 环境变量 修 ...

  5. keepalived高可用haproxy负载均衡varnish缓存wordpress的动静分离(第一次配置成功)

    haproxy和nginx都可以作为七层和四层反代服务器对外提供服务,此文通过haproxy和keealived配置varnish搭建wordpress的动静分离站点 一.实验环境 五台虚拟机: ha ...

  6. LAMP环境搭建实现网站动静分离[转]

    目录: 1.环境概述 2.动静分离拓扑图 3.各服务器功能规划 4.各服务器基础环境配置 5.httpd安装配置 6.php安装配置及启用opcache加速功能 7.mysql安装配置 8.wordp ...

  7. lamp分离部署

    目录 lamp分离部署 1. 安装httpd 2. 安装mysql 3. 安装php 4. 配置apache并部署项目 4.1 启用代理模块 4.2 配置虚拟主机 4.3 部署PbootCMSPHP企 ...

  8. 10、nginx+uwsgi+django部署(动静分离)

    10.1.说明: 1.介绍: 创建Django项目,可以通过 pyhon3 manage.py runserver 0.0.0.0:8080 & 命令更方便地调试程序,但是如果当一个项目完成了 ...

  9. Ubuntu:一个部署好的tomcat应用(war包)怎么用Nginx实现动静分离?

    今天想把之前的一个demo用Nginx把资源分离开来,在网上看了一天,整整弄了一天,硬是没弄出来. 要么全是同样的内容的,要么就是环境跟我这里不一样的.再加上对Nginx没接触过,给我都整哭了差点. ...

随机推荐

  1. drf 第一节

    drf django-restframework ''' 1.接口:接口的概念.数据接口文档.接口规范(restful).Postman接口测试工具 2.drf请求生命周期 - CBV 3.drf的基 ...

  2. js 获取json对象的 键 和 值

    直接上图 结果:

  3. 数据结构系列文章之队列 FIFO

    转载自https://mp.weixin.qq.com/s/ILgdI7JUBsiATFICyyDQ9w Osprey  鱼鹰谈单片机 3月2日 预计阅读时间: 6 分钟 这里的 FIFO 是先入先出 ...

  4. setTimeout设置为0 为啥不能立马执行

    setTimeout(function(){}, timer) 是指延时执行.第一个参数是回调函数,第二个参数是指延时多久执行回调函数. setTimeout(function(){console.l ...

  5. Codeforces Round #509 (Div. 2) F. Ray in the tube(思维)

    题目链接:http://codeforces.com/contest/1041/problem/F 题意:给出一根无限长的管子,在二维坐标上表示为y1 <= y <= y2,其中 y1 上 ...

  6. Codeforces Round #586 (Div. 1 + Div. 2) C. Substring Game in the Lesson

    链接: https://codeforces.com/contest/1220/problem/C 题意: Mike and Ann are sitting in the classroom. The ...

  7. Unrecognized SSL message, plaintext connection? 将https 换为http 即可

    请求链接:https://59********* 升级后的项目地址有https换为了http  ,出现这个错误,改为http请求即可

  8. my_note

    1.C# $ 内插字符串 Console.WriteLine($"The value of pi is {Math.PI}"); 替代string.format 2. switch ...

  9. DockerAPI版本不匹配的问题

    1.问题描述 在执行docker指令的时候显示client和server的API版本不匹配,如下: 说明:在这里server API的版本号比client API版本号低,因此不能有效实现cilent ...

  10. Dean and Schedule (URAL 2026)

    Problem A new academic year approaches, and the dean must make a schedule of classes for first-year ...