LAMMP,是以下几个单词的首字母:

      L是Linux的缩写,Linux操作系统,Linux以稳定、安全、且开源著称的操作系统,适用于做  服务器。

      A是Apache的缩写,Apache是一款提供Web服务器的开源软件,Apache是一个极具稳定安全、高度模块化、支持模块动态扩展的Web服务器,是搭建Web服务器的首选之一,据统计全球有50%左右的Web服务器是用Apache搭建的。

      M是Mysql的缩写,Mysql是数据库管理系统,数据库管理软件,也是开源软件。

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

      P是PHP的缩写,是一种面向对象的编程语言。

LAMMP主要的优点是解决了应用程序与数据库之间的瓶颈问题,有效提高了访问速度,这就是LAMMP架构。

wKioL1L4N9-RNYOIAACOLNkwS9E560.png

LAMMP架构是分别搭建在不同的服务器上面,在工作中,更是应该如此,一台服务器提供多种应用,服务器会很消耗资源,提供服务的性能也会降低。

此架构中各服务器的工作

     http在此架构中,响应回复用户html的请求

     php是把php程序执行的结果响应给http

     Memcached是根据用户请求的动态网页文件中是否需要Memcached服务器缓存数据,Memcached是把数据存储在内存中的,速度可想而知了。

     Mysql是响应用户是否需写入查询数据

   1、当用户只需要请求web服务器的html页面时,http直接响应请求,所经过的过程为1--->8
   2、当用户需请求一个web服务器的动态的页面时,http把用户请求的php执行程序发送给php服务器执行,php把执行的结果返回给http服务器,服务器把程序生成的的静态页面响应给客户端。所经过的过程1--->2--->7--->8
   3、当用户需要请求的web服务器资源中需要数据时,http把用户请求的php执行发送给php服务器,执行过程中需要对数据进行操作时且Memcached中没有缓存时,php去请求Mysql服务器的资源,mysql服务器把数据响应给php,如果此数据需要缓存则php把数据缓存到Memcached服务器上,然后把数据响应给http,http生成静态的页面响应给客户端。所经过的过程1--->2--->5--->6[--->3]--->7--->8(如果需要缓存则会经过3过程)
   4、当用户需要请求的web服务器资源中需要数据时,http把用户请求的php执行程序给 php服务器执行,执行过程中需要对数据进行操作时Memcached中有缓存时,Memcached直接把 数据响应给php服务器,然后把数据响应给http,http生成静态的页面响应给客户端。所经过的过程1--->2--->3--->4--->7--->8


http服务器的配置


安装环境

[root@localhost httpd-2.4.6]# yum install pcre-devel   openssl-devel -y

安装apr

[root@localhost ]# tar -zxvf apr-1.4.6.tar.bz2  -C /usr/local/src

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

[root@localhost apr-1.4.6]# ./configure --prefix=/usr/local/httpd/apr

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

安装apr-util

[root@localhost ]#  tar -zxvf apr-util-1.5.2.tar.bz2   -C /usr/local/src

[root@localhost ]# cd /usr/local/src/apr-util-1.5.2

[root@localhost apr-util-1.5.2]# ./configure --prefix=/usr/local/httpd/apr-util --with-apr=/usr/local/httpd/apr/

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

安装http

[root@localhost ]# tar -zxvf httpd-2.4.6.tar.bz2   -C /usr/local/src

[root@localhost ]# cd /usr/local/src/httpd-2.4.6

[root@localhost httpd-2.4.6]# ./configure --prefix=/usr/local/httpd/apache --sysconfdir=/etc/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/httpd/apr --with-apr-util=/usr/local/httpd/apr-util --enable-modules=most --enable-mpms-shared=all --with-mpm=event

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

编写http的控制脚本

脚本在/etc/rc.d/init.d/httpd

#!/bin/bash

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

lockfile=/var/lock/subsys/httpd

start(){

     if [ -e $lockfile ];then

     echo "httpd server isstarted"

     else echo -n "httpd server isstarting... "

     sleep 1

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

     fi

}

stop(){

     if [ ! -e $lockfile ];then

     echo "httpd server is stoped"

     else echo -n "httpd server isstoping... "

     sleep 1

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


     fi

}

status(){

     if [ -e $lockfile ];then

     echo "httpd server isstarted"

     else echo "httpd server nofound"

     fi

}

case $1 in

start)

start

;;

stop)

stop

;;

restart)

stop

start

;;

status)

status

;;

*)

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

;;

esac


为此脚本赋予执行权限

1[root@localhost init.d]# chmod +x /etc/rc.d/init.d/httpd


将httpd加入服务列表

1[root@localhost init.d]# chkconfig --add httpd


启动httpd服务

1[root@localhost init.d]# service httpd  start

wKioL1L4d_PyEW6-AAASd_J3ijY602.png



php服务器的配置

[root@localhost ]# tar -zxvf php-5.4.19.tar.bz2  -C /usr/local/src

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

[root@localhost php-5.4.19]# ./configure --prefix=/usr/local/httpd/php --with-mysql=mysqlnd --with-openssl --with-mysqli=mysqlnd --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml  --enable-sockets --enable-fpm --with-mcrypt  --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2

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


配置php文件

[root@localhost php-5.4.19]# cp php.ini-production /etc/php.ini

[root@localhost php-5.4.19]# cp /usr/local/httpd/php/etc/php-fpm.conf.default/usr/local/httpd/php/etc/php-fpm.conf


配置php-fpm脚本,并添加到开机启动项里

[root@localhost php-5.4.19]# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm[root@localhost php-5.4.19]# chmod +x /etc/rc.d/init.d/php-fpm

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

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


编辑php-fpm配置文件

[root@localhost php-5.4.19]# vim /usr/local/httpd/php/etc/php-fpm.conf

listen = 172.16.10.2:9000#设置本机IP监听9000端口

pm.max_children = 50# 设置生成子进程数(设置并发量)                                            

pm.start_servers = 5#设置开机启动进程数

pm.min_spare_servers = 2#设置最小空闲进程数

pm.max_spare_servers = 5#设置最大空闲进程数

pid = /usr/local/httpd/php/var/run/php-fpm.pid     #指定pid文件

error_log = log/php-fpm.log                        #开启日志功能


启动php-fpm

[root@localhost php-5.4.19]# service php-fpm start

wKiom1L4d-nDEIMUAAAqnHTyvKo792.png


wKioL1L4eOHDBDDBAABaG24Bb-w816.png



mysql服务器配置



[root@localhost ]#groupadd -r mysql

[root@localhost ]# useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql

[root@localhost ]#chown -R mysql:mysql /mydata/data

[root@localhost ]# tar -zxvf mysql-5.5.33-linux2.6-x86_64.tar.gz -C /usr/local/src

[root@localhost ]# mv mysql-5.5.33-linux2.6-x86_64 /usr/local/

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

[root@localhost local]# ln -s mysql-5.5.33-linux2.6-x86_64/ mysql

[root@localhost local]#cd mysql

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

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

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

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

[root@localhost mysql]# chown -r mysql data


配置mysql文件

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

[root@localhost local]# cd mysql

[root@localhost mysql]# cp support-files/my-large.cnf  /etc/my.cnf


加入到开机启动项

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

[root@localhost mysql]#chkconfig mysql on


为http和php配置phpmyadmin

[root@localhost ]# unzip phpMyAdmin-4.0.5-all-languages.zip

[root@localhost ]# mv phpMyAdmin-4.0.5-all-languages /web/htdoc/php

[root@localhost ]#cd /web/htdoc/php

[root@localhost php]# cp config.sample.inc.php config.inc.php

[root@localhost php]# vim config.inc.php

$cfg['Servers'][$i]['host'] = '172.16.10.3';  #指定mysql的IP


wKiom1L4fIejbRhXAADRsm4KkLg462.png


memcache服务器安装


因为memecache依赖于libevent,因此需要安装libevent

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

[root@localhost ]# cd libevent-2.0.21-stable

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

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

[root@localhost ]# ln -s /usr/local/libevent/include/ /usr/include/libevent

`/usr/include/libevent' -> `/usr/local/libevent/include/'

[root@localhost ]# echo "/usr/local/libevent/lib/"> /etc/ld.so.conf.d/libevent.conf

[root@localhost ]# ldconf


安装memcache

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

[root@localhost ]# cd /usr/local/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]# vim /etc/init.d/memcached

#!/bin/bash

#

# Init file formemcached

#

# chkconfig: - 8614

# description: Distributed memory caching daemon

#

# processname: memcached

# config: /etc/sysconfig/memcached

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

## Default variables

PORT="11211"

USER="nobody"

MAXCONN="1024"

CACHESIZE="64"

OPTIONS=""

RETVAL=0

prog="/usr/local/memcached/bin/memcached"

desc="Distributed memory caching"

lockfile="/var/lock/subsys/memcached"

start() {

echo -n $"Starting $desc (memcached): "

daemon $prog -d -p $PORT -u $USER -c $MAXCONN -m $CACHESIZE

RETVAL=$?

[ $RETVAL -eq 0] && success && touch $lockfile || failure

echo

return$RETVAL

}

stop() {

echo -n $"Shutting down $desc (memcached): "

killproc $prog

RETVAL=$?

[ $RETVAL -eq 0] && success && rm -f $lockfile || failure

echo

return$RETVAL

}

restart() {

stop

start

}

reload() {

echo -n $"Reloading $desc ($prog): "

killproc $prog -HUP

RETVAL=$?

[ $RETVAL -eq 0] && success || failure

echo

return$RETVAL

}

case"$1"in

start)

start

;;

stop)

stop

;;

restart)

restart

;;

condrestart)

[ -e $lockfile ] && restart

RETVAL=$?

;;

reload)

reload

;;

status)

status $prog

RETVAL=$?

;;

*)

echo $"Usage: $0 {start|stop|restart|condrestart|status}"

RETVAL=1

esac


[root@localhost bin]# chmod +x /etc/init.d/memcached

[root@localhost bin]# service memcached start

Starting Distributed memory caching (memcached):           [  OK  ]



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

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

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

Configuring for:

PHP Api Version:         20100412

Zend Module Api No:      20100525

Zend Extension Api No:   220100525

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

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


修改php配置文件加载memcache模块

[root@localhost memcache-2.2.7]# vim /etc/php.ini;extension=php_pspell.dll;

extension=php_shmop.dllextension=/usr/local/httpd/php/lib/php/

extensions/no-debug-non-zts-20100525/memcache.so  #添加此行,添加模块

重启php-fpm

[root@localhost htdoc]# service php-fpm restart

Gracefully shutting down php-fpm . done

Starting php-fpm  done

wKiom1L4gxOCcTVZAACd9wn0IbU087.png

测试memcached与php连接是否正常

[root@localhost htdoc]# pwd

/web/htdoc

[root@localhost htdoc]# cat test.php

<?php

$mem = newMemcache;

$mem->connect("172.16.10.4", 11211)  or die("Could not connect");

$version = $mem->getVersion();

echo "Server's version: ".$version."<br/>\n";

$mem->set('hellokey', 'Hello World', 0, 600) or die("Failed to save data at the memcached server");

echo "Store data in the cache (data will expire in 600 seconds)<br/>\n";

$get_result = $mem->get('hellokey');

echo "$get_result is from memcached server.";

?>

再次访问

wKiom1L4g9eB3jodAABZROPEzRQ172.png