一、LAMMP简介

  LAMMP指的是:Linux(操作系统)、Apache(HTTP服务器)、Memcached(缓存服务器)、Mysql(数据库)及PHP(有时也指Perl或Python)的首字母缩写。是一组知名的高性能廉价的用来架构WEB服务器的开源软件;它们各自都是一个独立的程序,但因为常被结合在一起使用,拥有较好的兼容性,组合起来共同构建了一个非常强大而又稳定WEB应用程序平台。

二、使用软件及服务器架构说明

wKiom1L3iXPwwBVTAACbSrAeM4s629.jpg

服务器系统:CentOS-6.4-x86_64

apache+php  192.168.80.10

mysql 192.168.70.10

memcached 92.168.70.20

客户端请求一个网页数据所要经过的过程如:

1、客户端向Apache服务器发出一个请求经过Internet,由Internet路由到Apache服务器上

2、Apache服务器首先判断请求的是动态还是静态网页,如果是静态页面,由Apache服务器直接返回给客户端;如果是动态页面则自已不处理,交给后台php服务器处理

3、php服务器在处理过程中如果需要调用Mysql数据库服务器的数据,则先查找Memcached缓存服务器(应用程序中要定义),如果Memcached服务器缓存的有要查询的数据则直接返回给php服务器;如果Memcached服务器中缓存的没有要查询的数据,php服务器则会向数据库服务器查询数据

4、php服务器从数据查询到数据不会立即返回给前台Apache服务器;则会先缓存到Memcached服务器然后再返回给Apache服务器(应用程序中要定义缓存)

5、再由Apache服务器返回给客户端

本次实验中使用到的安装包下载地址:

apr-1.4.6.tar.gz  http://pan.baidu.com/s/1qWk6K00

apr-util-1.5.1.tar.gz  http://pan.baidu.com/s/1kTyUeMz

httpd-2.4.4.tar.bz2  http://pan.baidu.com/s/1hqqmJwK

mysql-5.6.15-linux-glibc2.5-x86_64.tar.gz  http://pan.baidu.com/s/1mgBJqBI

php-5.5.8.tar.bz2 http://pan.baidu.com/s/1jGwUpeu

xcache-3.1.0.tar.gz  http://pan.baidu.com/s/1oxdIA

memcache-2.2.7.tgz http://pecl.php.net/get/memcache-2.2.7.tgz

libevent-2.0.21-stable.tar.gz  http://pan.baidu.com/s/1qW77vvY

memcached-1.4.15.tar.gz http://memcached.googlecode.com/files/memcached-1.4.15.tar.gz

三、安装apache,php,xcache,mysql以及memcache客户端

  1.安装apr,apr-util与httpd

APR:(Apache portable Run-time libraries.Apache可移植运行库)APR目的如其名称一样,主要为上层的应用程序提供一个可以跨越多操作系统平台使用的底层支持接口库;而Apache使用这个之后可以有效提高Apache的静态页面的处理能力。

[root@localhost ~]# tar -axvf apr-1.4.6.tar.gz -C /usr/local/src

[root@localhost ~]# tar -axvf apr-util-1.5.1.tar.gz -C /usr/local/src

[root@localhost ~]# tar -axvf httpd-2.4.4.tar.bz2 -C /usr/local/src

[root@localhost ~]# cd /usr/local/src/apr-1.4.6/

进入/usr/local/src/apr-1.4.6/

先来安装apr,其目录下也有README,不会安装的可以看一下,根据里边的指示进行安装:

[root@localhost apr-1.4.6]# vim README

[root@localhost apr-1.4.6]# ./configure --prefix=/usr/local/apr 指定安装目录为/usr/local/apr

[root@localhost apr-1.4.6]# make && make install

接下来安装apr-util

[root@localhost apr-1.4.6]# cd ../apr-util-1.5.1/

[root@localhost apr-util-1.5.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/bin/apr-1-config

指明安装路径以及apr-config的完全路径。

[root@localhost apr-util-1.5.1]# make && make install

接下来安装httpd

[root@localhost httpd-2.4.4]# ./configure \

--prefix=/usr/local/apache \

--sysconfdir=/etc/httpd \  配置文件目录

--enable-so \   启用动态模块加载

--enable-rewrite \   允许URL重写

--with-apr=/usr/local/apr/bin/apr-1-config \   指定apr安装路径

--with-apr-util=/usr/local/apr-util/bin/apu-1-config \  指定apr-util安装路径

--with-prce \  支持perl的正则表达式

-with-z   支持压缩

安装过程中发现一个错误:

configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/

少了一个pcre库文件:

此时查看我的系统中已经安装的与pcre相关的包,发现只有一个pcre-7.8-6.el6.x86_64,所以我需要再安装一个pcre-devel

[root@localhost httpd-2.4.4]# rpm -qa |grep pcre

pcre-7.8-6.el6.x86_64

[root@localhost httpd-2.4.4]# yum --disablerepo=* --enablerepo=c6-media install pcre-devel

再次执行

[root@localhost httpd-2.4.4]# ./configure --prefix=/usr/local/apache  --sysconfdir=/etc/httpd --enable-so --enable-rewrite --with-apr=/usr/local/apr/bin/apr-1-config  --with-apr-util=/usr/local/apr-util/bin/apu-1-config  --with-prce -with-z

[root@localhost httpd-2.4.4]# make && make install

执行完毕后来到apache目录:

[root@localhost httpd-2.4.4]# cd /usr/local/apache/

执行如下命令开启httpd服务:

[root@localhost apache]# bin/httpd -k start

服务开启!

可以执行如下命令来查看httpd端口是否打开:

[root@localhost apache]# netstat -tupln |grep httpd

接下来给httpd服务做一个控制脚本:

在/etc/init.d/下创建一个httpd文件,并且给它执行权限:

[root@localhost ~]# cd /etc/init.d/

[root@localhost init.d]# touch httpd

[root@localhost init.d]# chmod a+x httpd

[root@localhost init.d]# vim httpd

脚本内容如下:

#!/bin/bash

prog=/usr/local/apache/bin/httpd

lockfile=/var/lock/subsys/httpd


start () {

       if [ -e $lockfile ];then

       echo "the httpd is started"

       else

       echo "the httpd is starting......"

       sleep 1

        $prog -k start &>/dev/null && echo "[ok]"  && touch $lockfile || echo "fail"

       fi



}


stop () {

       if [ ! -e $lockfile ];then

       echo " the httpd is stoped"

       else

       echo "the httpd is stopping......"

       sleep 1

       $prog -k stop &>/dev/null  && echo "[ok]" && rm -rf $lockfile || echo "fail"

       fi


}


status () {

       if [ -e $lockfile ];then

       echo " the httpd is started"

       else

       echo " the httpd is stoped"


       fi


}



case "$1" in


start)

       start

       ;;

stop)

       stop

       ;;

status)

       status

       ;;

restart)

       stop

       start

       ;;

*)

       echo "USAGE:start|stop|status|restart"

esac


2.安装mysql

这里使用的是绿色软件包安装的:

[root@localhost ~]# tar -zxvf mysql-5.6.15-linux-glibc2.5-x86_64.tar.gz -C /usr/local/ 解压mysql安装包

[root@localhost ~]# cd /usr/local/

[root@localhost local]# ln -s mysql-5.6.15-linux-glibc2.5-x86_64 mysql 给mysql目录创建一个链接mysql

[root@localhost local]# cd mysql

mysql目录下有一个INSTALL-BINARY二进制安装帮助文件,根据里边的提示进行安装就行了

[root@localhost mysql]# vim INSTALL-BINARY

shell> groupadd mysql

 79 shell> useradd -r -g mysql mysql

 80 shell> cd /usr/local

 81 shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz

 82 shell> ln -s full-path-to-mysql-VERSION-OS mysql

 83 shell> cd mysql

 84 shell> chown -R mysql .

 85 shell> chgrp -R mysql .

 86 shell> scripts/mysql_install_db --user=mysql

 87 shell> chown -R root .

 88 shell> chown -R mysql data

 89 shell> bin/mysqld_safe --user=mysql &

 90 # Next command is optional

 91 shell> cp support-files/mysql.server /etc/init.d/mysql.server


[root@localhost mysql]# groupadd mysql

[root@localhost mysql]# useradd -r -g mysql mysql

[root@localhost mysql]# chown -R mysql .

[root@localhost mysql]# chgrp -R mysql .

[root@localhost mysql]# scripts/mysql_install_db  --user=mysql

做到这一步是出现错误:

缺少libaio库,所以安装libaio

[root@localhost mysql]# yum --disablerepo=* --enablerepo=c6-media install libaio

[root@localhost mysql]# scripts/mysql_install_db  --user=mysql 再次执行此命令

[root@localhost mysql]# cp my.cnf /etc

[root@localhost mysql]# cp support-files/mysql.server /etc/init.d/mysqld 控制脚本

[root@localhost mysql]# chmod a+x /etc/init.d/mysqld

[root@localhost mysql]# service mysqld start 启动mysqld服务

[root@localhost mysql]# netstat -tupln |grep mysqld 查看mysqld服务端口开启状况

[root@localhost mysql]# chkconfig --add mysqld

[root@localhost mysql]# chkconfig mysqld on 设置为开机启动

[root@localhost mysql]# vim /etc/profile

PATH=$PATH:/usr/local/mysql/bin  将mysql生成的bin文件写入到系统的环境变量中

[root@localhost mysql]# . /etc/profile 重新读取 /etc/profile

此时已经可以在任何位置进入mysql

此时如果执行mysql命令后出现如下错误:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

这个mysql.sock 文件可能是在根目录下下的/tmp/目录下,可以直接在/var/lib/目录下创建一个mysql目录,然后把mysql.sock 拷进去就行了

[root@localhost mysql]# mysqladmin -u root -p password '123' 创建一个管理员账户root,密码为123

[root@localhost mysql]# vim /etc/ld.so.conf.d/mysql.conf

/usr/local/mysql/lib   为了使mysql生成的lib文件能被其他程序所调用,在/etc/ld.so.conf.d/下创建一个mysql.conf 文件,并把bin文件的路径写进去

[root@localhost mysql]# ldconfig 刷新缓存

[root@localhost mysql]# vim /etc/man.config  

48 MANPATH /usr/local/mysql/man

为了使mysql生成的man文件能被其他程序所调用,在/etc/man.conf中把man文件的路径写进去。

3.安装php(php-fpm)

[root@localhost ~]# tar -jxvf php-5.5.8.tar.bz2 -C /usr/local/src/

[root@localhost ~]# mkdir -pv /etc/php  /etc/php5.d

解压完成后进入解压好的目录:

[root@localhost ~]# cd /usr/local/src/php-5.5.8/

目录下有一个INSTALL文件,可以查看一下:

[root@localhost php-5.5.8]# vim INSTALL

[root@localhost php-5.5.8]#  ./configure    \

--prefix=/usr/local/php \

--enable-fpm   \

--enable-sockets  \

--with-mysql=mysqlnd \

--with-mysqli=mysqlnd  \

--with-pdo-mysql=mysqlnd \

--enable-mbstring  \   支持多字符集

--with-png-dir \

-with-jpeg-dir  \

--with-zlib  \

--with-freetype-dir \

--with-config-file-path=/etc/php \  放置php的初始化文件php.ini的目录

--with-config-file-scan-dir=/etc/php5.d   做一个扫描目录,是php运行时可以扫描到配置目录下额外的配置

所以要提前把这两个目录建好,这就是为什么刚才建立了两个目录。

[root@localhost php-5.5.8]# make && make install

在这里,php作为一个独立的服务,它的控制脚本以及配置文件可从如下途径得到:

[root@localhost php-5.5.8]# cp php.ini-development /etc/php/php.ini 得到php.ini 文件

[root@localhost php-5.5.8]# cd sapi/fpm/

[root@localhost fpm]# cp init.d.php-fpm /etc/init.d/php-fpm  得到控制脚本

[root@localhost fpm]# chmod a+x /etc/init.d/php-fpm  给予可执行权限

[root@localhost fpm]# cp php-fpm.conf /usr/local/php/etc  得到配置文件

[root@localhost fpm]# service php-fpm start  启动php-fpm服务

[root@localhost fpm]# chkconfig --add php-fpm

[root@localhost fpm]# chkconfig php-fpm on

编辑httpd的配置文件:

[root@localhost ~]# vim /etc/httpd/httpd.conf

将下列两行前的“#”去掉,应该是在110至120行之间。

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

然后在最后加上两句:

AddType application/x-httpd-php .php

AddType application/x-httpd-php-source .phps

添加默认php主页

DirectoryIndex index.php index.htm (245行左右)

然后再添加一行:

ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/usr/local/apache/htdocs/$1

做反向代理时无论访问一个什么样的地址,只要是以php结尾的,就转发到本地9000端口默认站点主目录下的.php文件即(.*\.php)

然后来编辑一个页面测试apache和php是否连接成功:

[root@localhost fpm]# cd /usr/local/apache/htdocs/

[root@localhost htdocs]# vim index.php

<?php

phpinfo ();

?>

把调用的函数输出到页面上

然后在客户主机上访问http://192.168.80.10会出现如下界面,说明php和apache连接成功!

wKioL1L3iZbD0xKYAAKU4p8Phnk417.jpg

然后测试php和mysql能否连接成功:

同样编辑inde.php文件

<?php

$LINK=mysql_connect('192.168.70.20','root','123');

if ($LINK)

echo "ok";

else

echo "no";

?>

如果连接成功输出ok否则输出no。

访问后发现输出为no,连接失败。

wKiom1L3idSCia2bAAFhwL8mLsA503.jpg

原因是mysql只允许本地访问,可以到mysql内的mysql数据库上查看一下:

wKiom1L3idTQSsafAAC9fygppME519.jpg

给予其他主机的访问权限;

grant all privileges on *.* to root@'%' identified by '132';

给所有以root身份密码为123身份登录的人所有权限

flush privileges; 刷新权限

完成后可以看到被授权的主机中多出来一个“%”就是所有主机的意思,然后再次测试:

wKiom1L4M06AKpFrAAEm3m1rB2Y216.jpg


测试成功!



4.安装Xcache

[root@localhost ~]# tar -zxvf xcache-3.1.0.tar.gz -C /usr/local/src/

[root@localhost ~]# cd /usr/local/src/xcache-3.1.0/

[root@localhost xcache-3.1.0]# /usr/local/php/bin/phpize

[root@localhost xcache-3.1.0]# ./configure  --enable-xcache  --with-php-config=/usr/local/php/bin/php-config

[root@localhost xcache-3.1.0]# make && make install

完成之后生成了一个文件路径:

wKioL1L3idHSrWTUAABaPvwh5YI793.jpg

[root@localhost xcache-3.1.0]# cp xcache.ini  /etc/php5.d

[root@localhost xcache-3.1.0]# vim /etc/php5.d/xcache.ini

将刚才那个文件路径写入第四行,如下图所示:

wKioL1L3ie7RXIE7AABY2ckj5wY343.jpg

然后重启php-fpm。

5.安装PHP的memcache客户端

memcache-2.2.7.tgz  (FastCGI连接Memcache服务器的软件包)

http://pecl.php.net/get/memcache-2.2.7.tgz

[root@localhost ~]# tar -zxvf memcache-2.2.7.tgz  -C /usr/local/src/

[root@localhost ~]# cd /usr/local/src/memcache-2.2.7

[root@localhost memcache-2.2.7]# /usr/local/php/bin/phpize

[root@localhost memcache-2.2.7]# ./configure   --enable-memcache  --with-php-config=/usr/local/php/bin/php-config

[root@localhost memcache-2.2.7]# make && make install

执行完成后也会得到一个文件路径:这个路径下有mamcache.so文件,把它写入/etc/php5.d/xcache.ini

[root@localhost memcache-2.2.7]# vim /etc/php5.d/xcache.ini

添加以下两行:

wKioL1L3ie6ScYV1AABJaBf2RUU264.jpg

四、安装libevent与Memcached

  1、Memcache简介及原理

Memcached是一款开源、高性能、分布式内存对象缓存系统,可应用各种需要缓存的场景,其主要目的是通过降低对Database的访问来加速web应用程序。它是一个基于内存的“键值对”存储,用于存储数据库调用、API调用或页面引用结果的直接数据,如字符串、对象等

  Memcached是一款开发工具,它既不是一个代码加速器,也不是数据库中间件。其设计哲学思想主要反映在如下方面:

  1. 简单key/value存储:服务器不关心数据本身的意义及结构,只要是可序列化数据即可。存储项由“键、过期时间、可选的标志及数据”四个部分组成

   2. 功能的实现一半依赖于客户端,一半基于服务器端:客户负责发送存储项至服务器端、从服务端获取数据以及无法连接至服务器时采用相应的动作;服务端负责接收、存储数据,并负责数据项的超时过期

   3. 各服务器间彼此无视:不在服务器间进行数据同步

   4. O(1)的执行效率

   5. 清理超期数据:默认情况下,Memcached是一个LRU缓存,同时,它按事先预订的时长清理超期数据;但事实上,memcached不会删除任何已缓存数据,只是在其过期之后不再为客户所见;而且,memcached也不会真正按期限清理缓存,而仅是当get命令到达时检查其时长

2、libevent安装及配置

[root@localhost ~]# tar -zxvf libevent-2.0.21-stable.tar.gz -C /usr/local/src/

[root@localhost libevent-2.0.21-stable]# ./configure    --prefix=/usr/local/libevent/

[root@localhost libevent-2.0.21-stable]# make   && make install

3、Memcache安装及配置

[root@localhost ~]# tar -zxvf memcached-1.4.15.tar.gz -C /usr/local/src/

[root@localhost ~]# cd /usr/local/src/memcached-1.4.15/

[root@localhost memcached-1.4.15]# ./configure --prefix=/usr/local/memcached   --with-libevent=/usr/local/libevent/

[root@localhost memcached-1.4.15]#  make && make install

[root@localhost bin]# ./memcached -p 11211 -m 64m  -u nobody 启动memcached服务

连接测试

telnet localhost 11211

Trying 127.0.0.1...

Connected to localhost.localdomain (127.0.0.1).

Escape character is '^]'.

set foo 0 0 3     (保存命令)

bar               (数据)

STORED            (结果)

get foo           (取得命令)

VALUE foo 0 3     (数据)

bar               (数据)

结果如下图所示:

wKioL1L4MnXDoMA8AAB8ul7KwEk991.jpg

五、做一个测试页面

[root@localhost memcache-2.2.7]# vim /usr/local/apache/htdocs/index.php

<?php

error_reporting(E_ALL & ~E_NOTICE);

$mc = new memcache;

$mc->addServer("localhost", 11211);

$mc->set("foo", "Hello!");

$mc->set("bar", "Memcached...");

$arr = array(

$mc->get("foo"),

$mc->get("bar")

);

var_dump($arr);

?>

访问后结果如下:

wKiom1L4MsvBYPQvAADI1SgWkFw825.jpg

然后来到memcached服务器上产看能否得到数据:

wKioL1L4MsOxVGRyAACPTt_iCFU640.jpg

成功得到数据!