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 –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
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.";
?>
再次訪問