LAMMP架構的企業級應用

餘二五發表於2017-11-09

       LAMMP架構的企業級應用

=========================================

LAMMP是什麼

LAMMP的實現

LAMMP適用的生產環境

==========================================

一、LAMMP是什麼

     LAMMP,是幾個英文單詞首字母的縮寫。

     L是Linux的縮寫,Linux作業系統,Linux以穩定、安全、且開源著稱的作業系統,適用於做  伺服器。

     A是Apache的縮寫,Apache是一款提供Web伺服器的開源軟體,Apache是一個極具穩定安全、高度模組化、支援模組動態擴充套件的Web伺服器,是搭建Web伺服器的首選之一,據統計全球有50%左右的Web伺服器是用Apache搭建的。http://www.netcraft.com/ 這個網站,是對全球web伺服器的排名。

      M是Mysql的縮寫,Mysql是資料庫管理系統,資料庫管理軟體,也是開源軟體。

      M是Memcached的縮寫,Memcached是一款開源、高效能、分散式記憶體物件快取系統,可應用各種需要快取的場景,其主要目的是通過降低對Database的訪問來加速web應用程式。它是一個基於記憶體的“鍵值對”儲存,用於儲存資料庫呼叫、API呼叫或頁面引用結果的直接資料,如字串、物件等。

     Memcached是一款開發工具,它既不是一個程式碼加速器,也不是資料庫中介軟體。其設計哲學思想主要反映在如下方面:

    1. 簡單key/value儲存:伺服器不關心資料本身的意義及結構,只要是可序列化資料即可。儲存項由“鍵、過期時間、可選的標誌及資料”四個部分組成;

    2. 功能的實現一半依賴於客戶端,一半基於伺服器端:客戶負責傳送儲存項至伺服器端、從服務端獲取資料以及無法連線至伺服器時採用相應的動作;服務端負責接收、儲存資料,並負責資料項的超時過期;

    3. 各伺服器間彼此之間不互相通訊:不在伺服器間進行資料同步;伺服器當機,儲存的資料立即丟失

    4. O(1)的執行效率

    5. 清理超期資料:預設情況下,Memcached是一個LRU快取,同時,它按事先預訂的時長清理超期資料;但事實上,memcached不會刪除任何已快取資料,只是在其過期之後不再為客戶所見;而且,memcached也不會真正按期限清理快取,而僅是當get命令到達時檢查其時長;

    P是PHP的縮寫,是一種物件導向的程式語言。


LAMMP的架構拓撲圖:

211841557.png

此LAMMP架構是分別搭建在不同的伺服器上面,在生產環境中,更是應該如此,一臺伺服器提供多種應用,伺服器會很消耗資源,提供服務的效能也會降低。

此架構中各伺服器的工作

      Apache在此架構中,響應回覆使用者html的請求

      FastCGI是把php程式執行的結果響應給Apache

      Memcached是根據使用者請求的動態網頁檔案中是否需要Memcached伺服器快取資料,Memcached是把資料儲存在記憶體中的,速度可想而知了。

      Mysql是響應使用者是否需寫入查詢資料

使用者的請求資源到獲取資源的過程

     1、當使用者只需要請求web伺服器的html頁面時,Apache直接響應請求,所經過的過程為1—>8

     2、當使用者需請求一個web伺服器的動態的頁面時,Apache把使用者請求的php執行程式傳送給FastCGI伺服器執行,FastCGI把執行的結果返回給Apache伺服器,伺服器把程式生成的的靜態頁面響應給客戶端。所經過的過程1—>2—>7—>8

     3、當使用者需要請求的web伺服器資源中需要資料時,Apache把使用者請求的php執行  程式給FastCGI執行,執行過程中需要對資料進行操作時且Memcached中沒有快取時,FastCGI去請求Mysql服務器的資源,mysql伺服器把資料響應給FastCGI,如果此資料需要快取則FastCGI把資料快取到Memcached伺服器上,然後把資料響應給Apache,Apache生成靜態的頁面響應給客戶端。所經過的過程1—>2—>5—>6[—>3]—>7—>8(如果需要快取則會經過3過程)

     4、當使用者需要請求的web伺服器資源中需要資料時,Apache把使用者請求的php執行程式給 FastCGI執行,執行過程中需要對資料進行操作時Memcached中有快取時,Memcached直接把 資料響應給FastCGI,然後把資料響應給Apache,Apache生成靜態的頁面響應給客戶端。所經過的過程1—>2—>3—>4—>7—>8


二、LAMMP的實現

Apache伺服器所需的軟體包

     apr-1.4.6.tar.bz2

http://mirror.esocc.com/apache/apr/apr-1.4.6.tar.bz2

    apr-util-1.5.2.tar.bz2  

http://mirror.esocc.com/apache/apr/apr-util-1.5.2.tar.bz2

    httpd-2.4.6.tar.bz2(提供Web伺服器的軟體包)

http://mirror.esocc.com/apache/httpd/httpd-2.4.6.tar.bz2

    由於httpd-2.4的包linux系統中的apr版本不夠新,所以需要下載更新的apr相關的包,直接下載原始碼包進行安裝。

FastCGI伺服器所需的軟體包

          libmcrypt  

http://mirrors.sohu.com/fedora-epel/6Server/x86_64/libmcrypt-2.5.8-9.el6.x86_64.rpm

        libmcypt-devel

http://mirrors.sohu.com/fedora-epel/6Server/x86_64/libmcrypt-devel-2.5.8-9.el6.x86_64.rpm

          xcache-3.0.3.tar.bz2 (快取php執行好的程式碼,加速opcode)

http://xcache.lighttpd.net/pub/Releases/3.0.3/xcache-3.0.3.tar.bz2

          php-5.4.19.tar.bz2  (提供php-fpm(FastCGI)服務的軟體包)

http://downloads.php.net/stas/php-5.4.19.tar.bz2

          memcache-2.2.7.tgz  (FastCGI連線Memcache伺服器的軟體包)

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

Memcached伺服器所需的軟體包

         libevent-2.0.21-stable.tar.gz

http://nchc.dl.sourceforge.net/project/levent/libevent/libevent-2.0/libevent-2.0.21-stable.tar.gz

         memcached-1.4.15.tar.gz (安裝Memcached伺服器的軟體包)

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

Mysql伺服器所需的軟體包

       mysql-5.5.33-linux2.6-x86_64.tar.gz

http://downloads.skysql.com/archives/mysql-5.5/mysql-5.5.33-linux2.6-x86_64.tar.gz

    安裝的是mysql的通用二進位制程式包,此軟體包解壓之後就可以使用


思路:

1、每個伺服器的安裝操作都是獨立,但是最後需要建立關係

2、解決WEB怎麼連線PHP-FPM(FastCGI)

3、解決PHP-FPM(FastCGI)怎麼連線Memcached

4、解決PHP-FPM(FastCGI)怎麼連線Mysql


Apache伺服器的配置安裝:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
[root@jie1 ~]# ls
anaconda-ks.cfg    apr-util-1.5.2.tar.bz2  install.log
apr-1.4.6.tar.bz2  httpd-2.4.6.tar.bz2     install.log.syslog
##1、解壓下載的軟體包######
[root@jie1 ~]# tar xf apr-1.4.6.tar.bz2
[root@jie1 ~]# tar xf apr-util-1.5.2.tar.bz2
[root@jie1 ~]# tar xf httpd-2.4.6.tar.bz2
###2、安裝開發庫,和依賴性包######
[root@jie1 ~]# yum -y groupinstall "Development tools" "Server Platform Development"
[root@jie1 ~]# yum -y install pcre-devel  #安裝依賴性包
[root@jie1 ~]# rpm -qa | grep httpd    #檢查系統是否安裝httpd的rpm包
httpd-tools-2.2.15-26.el6.centos.x86_64
####3、編譯安裝apr軟體#######
[root@jie1 ~]# cd apr-1.4.6
[root@jie1 apr-1.4.6]# ./configure --prefix=/usr/local/apr && make && make install
###4、編譯安裝apr-util軟體包######
[root@jie1 ~]# cd apr-util-1.5.2
[root@jie1 apr-util-1.5.2]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install
####5、編譯安裝httpd的軟體包#####
[root@jie1 ~]# cd httpd-2.4.6
[root@jie1 httpd-2.4.6]# ./configure --prefix=/usr/local/apache  --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mpms-shared=all --with-mpm=event  && make && make install
[root@jie1 ~]# cp httpd-2.4.6/build/rpm/httpd.init  /etc/rc.d/init.d/httpd    #複製原始碼包裡面提供的httpd的SystemV指令碼
[root@jie1 ~]# vim /etc/rc.d/init.d/httpd
###6、需要改動httpd的SystemV指令碼的一些內容#####
##############vim /etc/rc.d/init.d/httpd ########################
prog=httpd
httpd=${HTTPD-/usr/local/apache/bin/httpd}
pidfile=${PIDFILE-/usr/local/apache/logs/${prog}.pid}
lockfile=${LOCKFILE-/var/lock/subsys/${prog}}
RETVAL=0
# check for 1.3 configuration
check13 () {
        CONFFILE=/usr/local/apache/conf/httpd.conf
###################################################################
[root@jie1 ~]# vim /usr/local/apache/conf/httpd.conf
ServerName 172.16.22.1:80 #在配置檔案中找到ServerName改成伺服器的IP:埠
#這樣啟動的時候就不會報錯
[root@jie1 ~]# service httpd start  #啟動服務
Starting httpd:                                            [  OK  ]
###7、使系統能識別原始碼包安裝的軟體############
[root@jie1 apache]# echo "PATH=/usr/local/apache/bin/:$PATH" >/etc/profile.d/httpd.sh
[root@jie1 apache]# source /etc/profile.d/httpd.sh
[root@jie1 apache]# ln -sv /usr/local/apache/include/  /usr/include/httpd
[root@jie1 apache]# chkconfig --add httpd #把服務加到開機自動啟動的列表
[root@jie1 apache]# chkconfig --level 35 httpd  on

FastCGI(php-fpm)伺服器的配置安裝:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
[root@jie2 ~]# ls
anaconda-ks.cfg     xcache-3.0.3.tar.bz2  install.log
memcache-2.2.7.tgz  php-5.4.19.tar.bz2   install.log.syslog
###1、解壓下載的原始碼包
[root@jie2 ~]#tar xf php-5.4.19.tar.bz2
[root@jie2 ~]#tar xf memcache-2.2.7.tgz
[root@jie2 ~]#tar xf xcache-3.0.3.tar.bz2
###2、安裝開發包和安裝依賴性包,由於我的編譯引數只指定了這些,所以只需這些依賴性包,如果指定的引數不一樣,則需要的依賴性包也不盡相同
[root@jie2 ~]#yum -y groupinstall "Server Platform Development" "Development tools"
[root@jie2 ~]#yum -y install libxml2-devel bzip2-devel  libmcrypt-devel
#libmcrypt-devel在光碟裡面是沒有提供相應的包,mirrors.sohu.com映象站點的#epel源裡面有此包,各位可以搭建一個epel的yum源,直接安裝此包,我就是直接
#搭建的sohu的光碟yum源和epel  yum源
[root@jie2 ~]# cd php-5.4.19
###編譯引數--enable-fpm,支援FastCGI PHP模組,此引數決定是否能把PHP安裝成#FastCGI伺服器
[root@jie2 php-5.4.19]#./configure --prefix=/usr/local/php  --enable-fpm --with-openssl --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml  --enable-sockets  --with-mcrypt  --with-bz2 --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd && make && make install
###3、建立php的配置檔案,此配置檔案在php的解壓包中
[root@jie2 php-5.4.19]# cp php.ini-production   /etc/php.ini
[root@jie2 php]#cd /usr/local/php/
###4、使系統能夠識別原始碼包安裝的軟體
[root@jie2 php]# echo "PATH=/usr/local/php/bin:/usr/local/php/sbin:$PATH" >/etc/profile.d/php-fpm.sh
[root@jie2 php]# source /etc/profile.d/php-fpm.sh
[root@jie2 php]#cd /usr/local/php/etc
###5、建立php-fpm服務的配置檔案,此配置檔案的路徑 /usr/local/php/etc
[root@jie2 etc]# mv php-fpm.conf.default php-fpm.conf
##修改php-fpm服務配置檔案的監聽的IP地址改為本地IP地址
 ### vim /usr/local/php/etc/php-fpm.conf####
              Listen 172.16.22.2:9000
 ############################################
[root@jie2 fpm]# pwd
/root/php-5.4.19/sapi/fpm
###6、建立php-fpm的systemV指令碼,此指令碼的路徑是在php解壓包的php-5.4.19/sapi/fpm路徑下
[root@jie2 fpm]# cp init.d.php-fpm /etc/rc.d/init.d/php-fpm
###7、把服務指令碼加執行許可權,開啟服務,把服務加到開機自啟動列表中
[root@jie2 fpm]# chmod +x /etc/rc.d/init.d/php-fpm
[root@jie2 fpm]# service php-fpm start
[root@jie2 fpm]# chkconfig --add php-fpm
[root@jie2 fpm]# chkconfig --level 35 php-fpm on
###8、安裝FastCGI與memcached服務連線的介面的一個軟體
[root@jie2 ~]# cd /root/memcache-2.2.7
[root@jie2 memcache-2.2.7]# /usr/local/php/bin/phpize
[root@jie2 memcache-2.2.7]# ./configure --with-php-config=/usr/local/php/bin/php-config --enable-memcache   && make && make install
####==============================================================######
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/
#編譯安裝完成後最後為提示這樣一句
###=================================================================####
###9、在php的配置檔案裡面裝載memcache.so的模組路徑
###vim /etc/php.ini##########
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/memcache.so
##########################################
[root@jie2 ~]# cd xcache-3.0.3
###10、安裝FastCGI加速opcode程式碼的軟體
[root@jie2 xcache-3.0.3]# /usr/local/php/bin/phpize
[root@jie2 xcache-3.0.3]# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config && make && make install
####==============================================================######
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/
#編譯安裝完成後最後為會提示這樣一句
###=================================================================####
###11、建立xcache的配置檔案,在xcache的解壓的原始碼包裡面
[root@jie2 xcache-3.0.3]# mkdir /etc/php.d
[root@jie2 xcache-3.0.3]# cp xcache.ini /etc/php.d/
##建立這個xcache的配置檔案,則可以把xcache.so的模組裝載進去,不建立xcache的配置檔案,則也可以把xcache.so的模組裝載到php.ini的配置檔案中,裝載方法和裝載memcache.so模組的方法一樣
[root@jie2 xcache-3.0.3]# service php-fpm restart  #重啟php-fpm服務
Gracefully shutting down php-fpm . done
Starting php-fpm  done

Memcached伺服器的配置安裝

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
[root@jie3 ~]#yum -y groupinstall "Server Platform Development" "Development tools" #安裝開發包
[root@jie3 ~]# ls
anaconda-ks.cfg  install.log.syslog             memcached-1.4.15.tar.gz
install.log      libevent-2.0.21-stable.tar.gz
###1、解壓下載的軟體
[root@jie3 ~]# tar xf libevent-2.0.21-stable.tar.gz
[root@jie3 ~]# tar xf memcached-1.4.15.tar.gz
###2、編譯安裝libevent軟體
[root@jie3 ~]# cd libevent-2.0.21-stable
[root@jie3 libevent-2.0.21-stable]# ./configure --prefix=/usr/local/libevent && make && make install
[root@jie3 ~]# cd /usr/local/libevent/
###3、使系統識別libevent的庫檔案和標頭檔案
[root@jie3 libevent]# echo "/usr/local/libevent/lib" >/etc/ld.so.conf.d/libevent.conf
[root@jie3 libevent]# ldconfig -v | grep libevent
/usr/local/libevent/lib:
    libevent_core-2.0.so.5 -> libevent_core.so
    libevent_openssl-2.0.so.5 -> libevent_openssl.so
    libevent_pthreads-2.0.so.5 -> libevent_pthreads.so
    libevent-2.0.so.5 -> libevent.so
    libevent_extra-2.0.so.5 -> libevent_extra.so
    libevent-1.4.so.2 -> libevent-1.4.so.2.1.3
    libevent_extra-1.4.so.2 -> libevent_extra-1.4.so.2.1.3
    libevent_core-1.4.so.2 -> libevent_core-1.4.so.2.1.3
[root@jie3 libevent]# ln -sv /usr/local/libevent/ /usr/include/libevent
`/usr/include/libevent` -> `/usr/local/libevent/`
###4、編譯安裝memcached軟體包
[root@jie3 ~]#cd memcached-1.4.15
[root@jie3 ~]#./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent/ && make && make install
###5、建立memcached的systemV指令碼,copy下面的指令碼為服務指令碼
#############vim  /etc/init.d/memcached#######################
#!/bin/bash
#
# Init file for memcached
#
# chkconfig: - 86 14
# 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"
IP="172.16.22.3"
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 -l $IP
        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
exit $RETVAL
####################################################################
###6、把服務指令碼給予執行許可權,然後把服務加到開機啟動列表中
[root@jie3 memcached]# chmod +x /etc/init.d/memcached
[root@jie3 memcached]# chkconfig --add memcached
[root@jie3 memcached]# chkconfig --level 35 memcached on
[root@jie3 /]# service memcached start
Starting Distributed memory caching (memcached):           [  OK  ]
[root@jie3 /]# netstat -pant | grep memcached
tcp        0      0 172.16.22.3:11211           0.0.0.0:*                   LISTEN      9802/memcached

Mysql伺服器的配置安裝:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
[root@jie4 ~]# ls
anaconda-ks.cfg  install.log.syslog
install.log      mysql-5.5.33-linux2.6-x86_64.tar.gz
###1、解壓下載的mysql的通用二進位制軟體包
[root@jie4 ~]#tar xf mysql-5.5.33-linux2.6-x86_64.tar.gz -C /usr/local/
[root@jie4 ~]# cd /usr/local/
[root@jie4 local]# mv mysql-5.5.33-linux2.6-x86_64/ mysql
###2、建立存放資料庫的檔案,生產環境資料庫存放在獨立的建LVM的硬碟上面
[root@jie4 local]# mkdir -pv /mysql/data
mkdir: created directory `/mysql`
mkdir: created directory `/mysql/data`
###3、建立使用者,和設定檔案的屬主和許可權
[root@jie4 local]# useradd -r mysql
[root@jie4 local]# chown -R mysql:mysql /mysql/data
[root@jie4 local]# chmod -R 755 /mysql/data/
[root@jie4 local]# cd /usr/local/mysql/
[root@jie4 mysql]# cd support-files/
###4、建立mysql的配置檔案
[root@jie4 support-files]# cp my-large.cnf /etc/my.cnf
cp: overwrite `/etc/my.cnf`? y
###5、建立mysql的systemV服務指令碼
[root@jie4 support-files]# cp mysql.server  /etc/rc.d/init.d/mysqld
[root@jie4 ~]# vim /etc/my.cnf
###6、修改mysql的配置檔案,修改或新增這兩行
#############vim /etc/my.cnf###############
thread_concurrency = 4
datadir = /mysql/data
###########################################
###7、初始化mysql的指令碼
[root@jie4 support-files]# cd /usr/local/mysql/scripts/
[root@jie4 scripts]# ./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/mysql/data
###8、開啟mysql服務和把mysql的服務加入到開機自啟的列表中
[root@jie4 scripts]# service mysqld start
Starting MySQL...........                                  [  OK  ]
[root@jie4 local]# chkconfig  --add mysqld
[root@jie4 local]# chkconfig --level 35 mysqld on
[root@jie4 scripts]# cd /usr/local/mysql/
###9、使系統能識別原始碼包安裝的軟體############
####1)修改環境變數PATH的路徑
####2)連結標頭檔案的路徑
####3)連線庫檔案
####4)提供man幫助文件
[root@jie4 mysql]# echo "PATH=/usr/local/mysql/bin:$PATH" >/etc/profile.d/mysqld.sh
[root@jie4 mysql]# source /etc/profile.d/mysqld.sh
[root@jie4 mysql]# ln -sv /usr/local/mysql/include/ /usr/include/mysqld
`/usr/include/mysqld` -> `/usr/local/mysql/include/`
[root@jie4 mysql]# echo "/usr/local/mysql/lib/" >/etc/ld.so.conf.d/mysqld.conf
[root@jie4 mysql]# ldconfig -v | grep mysql
####10、建立登入資料庫的使用者的密碼
[root@jie4 local]# mysqladmin -u root password redhat
[root@jie4 local]# mysql -u root -p
mysql> select user,password,host from mysql.user;
#查詢mysql資料庫中user表的使用者,密碼和host
+------+-------------------------------------------+-----------+
| user | password                                  | host      |
+------+-------------------------------------------+-----------+
| root | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 | localhost |
| root |                                           | jie4.com  |
| root |                                           | 127.0.0.1 |
| root |                                           | ::1       |
|      |                                           | localhost |
|      |                                           | jie4.com  |
+------+-------------------------------------------+-----------+
6 rows in set (0.00 sec)
#刪除資料庫的安全隱患的使用者
mysql> drop user root@`::1`;
Query OK, 0 rows affected (0.00 sec)
mysql> drop user root@`jie4.com`;
Query OK, 0 rows affected (0.00 sec)
mysql> drop user ``@`jie4.com`;
Query OK, 0 rows affected (0.00 sec)
mysql> drop user ``@`localhost`;
Query OK, 0 rows affected (0.00 sec)
#建立指定網段能訪問資料庫的使用者名稱和密碼
mysql> create user root@`172.16.%.%` identified by `mypass`;
Query OK, 0 rows affected (0.00 sec)
mysql> select user,password,host from mysql.user;
+------+-------------------------------------------+------------+
| user | password                                  | host       |
+------+-------------------------------------------+------------+
| root | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 | localhost  |
| root |                                           | 127.0.0.1  |
| root | *6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4 | 172.16.%.% |
+------+-------------------------------------------+------------+
3 rows in set (0.01 sec)
mysql> flush privileges;  #重讀授權表,及時生效
Query OK, 0 rows affected (0.00 sec)
mysql> q

   到此為止每個伺服器獨立提供的服務已經安裝搭建完成,現在需要讓他們協同一起工作,使用者的體驗就好像是工作在一臺機器上面

1)解決Apache與FastCGI的協同工作

   a)Apache伺服器的操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
[root@jie1 ~]# vim /usr/local/apache/conf/httpd.conf
###########vim /usr/local/apache/conf/httpd.conf ###########
#DocumentRoot "/usr/local/apache/htdocs"  #註釋這行
LoadModule proxy_module modules/mod_proxy.so  #開啟代理的模組
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so#開啟連線fastcgi的模組
Include conf/extra/httpd-vhosts.conf #開啟讓主配置檔案載入虛擬主機的配置檔案
############################################################
[root@jie1 ~]# vim /usr/local/apache/conf/extra/httpd-vhosts.conf
#####vim  /usr/local/apache/conf/extra/httpd-vhosts.conf############
#開啟一個虛擬主機即可
<VirtualHost *:80>
    DocumentRoot "/web/htdocs/"  #Apache伺服器存放網頁的目錄
    ServerName www.jie.com
   <Directory "/web/htdocs">
       AllowOverride None
       Options None
     Require all granted
   </Directory>
    ProxyRequests Off  #關閉代理請求
    ProxyPassMatch ^/(.*.php)$ fcgi://172.16.22.2:9000/website/$1
   #把接收客戶端來著php的請求,轉到FastCGI伺服器上面去執行,website是指
#FastCGI服務存放php網頁的目錄
</VirtualHost>
#####################################################################
[root@jie1 ~]# mkdir -pv /web/htdocs
mkdir: created directory `/web`
mkdir: created directory `/web/htdocs`
[root@jie1 ~]# vim /web/htdocs/test.php
####vim /web/htdocs/test.php####
#測試php網頁的頁面
<?php
    phpinfo();
?>
#####################################
[root@jie1 htdocs]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
[root@jie1 htdocs]#

 b)FastCGI伺服器的操作

1
2
3
4
5
[root@jie2 ~]# mkdir /website  #建立存放網頁的目錄
[root@jie2 website]# scp 172.16.22.1:/web/htdocs/test.php  ./  #把Apache伺服器上面的網頁檔案copy到FastCGI伺服器上面,且存放在website目錄下
[root@jie2 website]# service php-fpm restart  #重啟FastCGI伺服器
Gracefully shutting down php-fpm . done
Starting php-fpm  done


   c)測試結果

133839137.png


2、解決PHP-FPM(FastCGI)怎麼連線Memcached

因為我們之前已經在FastCGI安裝了連線memcached的軟體包memcache且把memcache.so模組裝載到php的配置檔案中了,這樣就實現了PH-FPM(FastCGI)連線Memcached。

a)在Apache伺服器上網頁存放路徑下新建mem.php的測試頁面

   [root@jie1 htdocs]# cat /web/htdocs/mem.php

   <?php

   $mem = new Memcache;

   $mem->connect(“172.16.22.3”, 11211);

   $mem->set(`key`,`test info`);

   print_r($mem->get(`key`));

   print_r($mem->getstats());

   ?>

b)在FastCGI伺服器上面copy mem.php的測試頁面

[root@jie2 website]# scp 172.16.22.1:/web/htdocs/mem.php  ./

c)測試結果134745994.png


在生產環境中是否要用memcached伺服器快取資料,取決於客戶請求的php程式,當使用者請求的php程式中,開發人員將此程式開發需要請求memcached伺服器則會用到memcached伺服器來快取客戶的資料。在此僅供測試FastCGI伺服器是否能連線memcached伺服器。


3、解決PHP-FPM(FastCGI)怎麼連線Mysql

PHP-FPM連線mysql,在編譯的時候可以加這三個引數,然後PHP-FPM伺服器上也可以不用安裝mysql也可以連線mysqld伺服器。

–with-mysql=mysqlnd –with-pdo-mysql=mysqlnd –with-mysqli=mysqlnd

a)在Apache伺服器上網頁存放路徑下新建testdb.php的測試頁面

       [root@jie1 htdocs]# cat testdb.php

       <?php

       $link=mysql_connect(`172.16.22.4`,`root`,`mypass`);

       if($link) echo “mysql test success!!”;

       else echo “mysql test failed!!!”;

       mysql_close();

       ?>

b)在FastCGI伺服器上面copy testdb.php的測試頁面

    [root@jie2 website]# scp 172.16.22.1:/web/htdocs/testdb.php  ./

c)測試結果

155516216.png

    自此,已經解決WEB怎麼連線PHP-FPM(FastCGI),解決PHP-FPM(FastCGI)怎麼連線Memcached,解決PHP-FPM(FastCGI)怎麼連線Mysql,LAMMP分別搭建在不同的伺服器上且可以協同工作已經完成。

三、LAMMP適用的生產環境

    由於memcached只是把資料快取到記憶體中,當memcached伺服器當機之後,memcached儲存的資料就丟失了,所以在電商站點對session的資料要求嚴格是memcached伺服器不能適用於此生成環境,如果不是電商站點,只是想加快客戶訪問自己的網站的速度,那memcached所能提供的速度還是很大的,因為資料時直接快取在記憶體中了,那速度就可以而知,“盡情期待能儲存電商站點的session回話中的資料之Redis架構的搭建”。

本文轉自 jie783213507 51CTO部落格,原文連結:http://blog.51cto.com/litaotao/1282360,如需轉載請自行聯絡原作者


相關文章