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架构。
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 �Ck 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 �Ck 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
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
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
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
测试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.";
?>
再次访问