LAMMP架構詳解(源碼實現)

本篇博文筆者試圖通過自己的親身實踐來向大家講解中小企業網基於LAMMP架構的實現。本片博文主要設計的知識體系如下,由筆者全部在RHEL6.4環境下進行搭建和實現。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

一、試驗環境和軟件版本

二、httpd-2.4.6的源碼安裝

三、如何使用通用二機制包安裝mysql

四、編譯安裝php,實現與apache服務器的分離

五、源碼編譯memcached

六、源碼安裝PHP擴展程序memcache

七、安裝PHP加速器xcache

八、簡單測試網頁的編寫

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


一、實驗環境和軟件版本

1.系統環境:4檯安裝RHEL6.4的服務器,地址和軟件安裝規劃如下

2.軟件環境:

  軟件            版本             地址規劃        
http:       httpd-2.4.6             172.16.21.1
mysql:      mysql-5.5.33            172.16.21.2
memcached:  memcached-1.4.15        172.16.21.3
php:        php-5.4.19              172.16.21.4
memcache:   memcache-2.2.5          172.16.21.4
xcache;    xcache-3.0.3            172.16.21.4

3.拓撲規劃:

122010885.png4.數據訪問流程:(根據上述標號進行講解)

(1)表示客戶端請求的頁面發送到web server (工作流程參考我上篇博客)

(2)web server查看client請求的頁面,如果是靜態頁面就在本地處理;如果爲動態頁面交給PHP程序處理,這裏我們將web和php應用程序服務分開處理。

(3)當PHP應用程序服務器收到web server發來的動態頁面請求消息時,會對其進行處理。如果有數據查詢請求時,會根據設置首先查看memcached緩存服務器上的內容。

(4)如果緩存服務器中有相關的數據緩存會直接發給PHP應用程序服務器

(5)如果在memcached緩存服務器中查詢不到數據,就會去mysql服務器中查找。

(6)mysql服務器把查找的結果返回服務器。同時在memcached服務器中緩存一份方便下次查詢。

(7)再有相關的web server將數據發給客戶端請求者。


二、httpd-2.4.6的源碼安裝

1.依賴以下安裝包(版本1.4以上)

apr-1.4.6.tar.bz2
    # tar xf apr-1.4.6.tar.bz2
    # cd apr-1.4.6
    # ./configure --prefix=/usr/local/apr
    # make && make install
apr-util-1.5.2.tar.bz2
    # tar xf apr-util-1.5.2.tar.bz2
    # cd apr-util-1.5.2
    # ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
    # make && make install

2.yum install pcre-devel (開發包)

3.編譯安裝httpd-2.4.6

# tar xf httpd-2.4.6.tar.bz2
# cd httpd-2.4.6
# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 \
--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

4.SysV腳本提供

# cp /etc/rc.d/init.d/httpd /etc/rc.d/init.d/httpd24
# vim /etc/rc.d/init.d/httpd24    #修改如下行
  apachectl=/usr/local/apache/bin/apachectl
  httpd=${HTTPD-/usr/local/apache/bin/httpd}
  pidfile=${PIDFILE-/usr/local/apache/logs/httpd.pid} #指定pid文件地址
# chkconfig --add httpd24
# chkconfig httpd24 on

5.環境變量設置

# ln -sv /usr/local/apache/include /usr/include/httpd
# vim /etc/man.config
  MANPATH /etc/local/apache/man
# vim /etc/profile.h/apache.sh
  export PATH=/usr/local/apache/bin:$PATH

6.服務器重啓service httpd24 restart


三、如何使用通用二機制包安裝mysql

1.準備數據存放的文件系統

# fdisk /dev/sda
# pvcreate /dev/sda{5,6}
# vgcreate myvg /dev/sda{5,6}
# lvcreate -L 20G -n mydata myvg
# make2fs -t ext4 -L MYDATA -b 4096 /dev/myvg/mydata
# vim /etc/fstab
  LABEL=MYDATA  ext4  /mydata/data  defaults,noatime 0 0

2.新建用戶以安全方式運行進程:

# useradd -r -s /sbin/nologin mysql
# chown -R mysql:mysql /mydata/data

3.安裝並初始化mysql-5.5.33

# tar xf mysql-5.5.33-linux2.6-x86_64.tar.gz -C /usr/local
# cd /usr/local/
# ln -sv mysql-5.5.33-linux2.6-x86_64  mysql
# cd mysql
# chown -R mysql:mysql  *
# scripts/mysql_install_db --user=mysql --datadir=/mydata/data
# chown -R root  *

4.爲mysql提供主配置文件:

# cd /usr/local/mysql
# cp support-files/my-large.cnf  /etc/my.cnf
# vim /etc/my.cnf
 thread_concurrency = 2#修改此文件中thread_concurrency的值爲CPU個數乘以2
 datadir = /mydata/data#添加該行指定mysql數據文件的存放位置

5.爲mysql提供sysv服務腳本:

# cd /usr/local/mysql
# cp support-files/mysql.server  /etc/rc.d/init.d/mysqld
# chmod +x /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld
# chkconfig mysqld on

6.環境變量設置

# ln -sv /usr/local/mysql/include  /usr/include/mysql
# vim /etc/man.config
  MANPATH  /usr/local/mysql/man
# vim /etc/profile.d/mysql.sh
  export PATH=/usr/local/mysql/bin:$PATH
# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
# ldconfig

7.啓動服務器 service mysqld start

8.MYSQL 授權相關操作參照MYSQL相關用法


四、編譯安裝php,實現與apache服務器的分離

PHP安裝分爲兩種方式:

1.做爲apache服務器的模塊;

2.做爲單獨存在的Fast-cgi應用程序服務器。這裏我們先介紹第二種:

1.依賴關係的解決

libxml2-devel
libmcrypt-devel
mhash-devel
bzip2-devel
#使用yum安裝:有些包在fedora-epel,可以使用搜狐鏡像http://mirrors.sohu.com

2.編譯安裝php-5.4.13

# tar xf php-5.4.13.tar.bz2
# cd php-5.4.13
# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql \
--with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config \
--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
# make
# make intall

簡單說明:(PHP5.3版本以前還需要使用如下選項關聯mysql,PHP5.4以後已經默認安裝了)

# ./configure --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd

3.提供配置文件和腳本(源碼包中)

# cp php.ini-production /etc/php.ini     #配置文件
# cp sapi/fpm/init.d.php-fpm  /etc/rc.d/init.d/php-fpm
#提供php-fpm的Sysv服務腳本
# chmod +x /etc/rc.d/init.d/php-fpm
# chkconfig --add php-fpm
# chkconfig php-fpm on
# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf      #爲php-fpm提供配置文件

4.編輯php-fpm的配置文件:

# vim /usr/local/php/etc/php-fpm.conf
  pm.max_children = 50       #最大啓動的進程數,根據服務器的性能進行設置
  pm.start_servers = 5
  pm.min_spare_servers = 2
  pm.max_spare_servers = 8
  pid = /usr/local/php/var/run/php-fpm.pid    #設置pid文件

5.啓動php-fpm:

#service php-fpm start
# ps aux | grep php-fpm    #簡單驗證

注意:默認情況下,fpm監聽在127.0.0.1的9000端口,也可以使用如下命令驗正其是否已經監聽在相應的套接字。

# netstat -tnlp | grep php-fpm
tcp  0   0   127.0.0.1:9000    0.0.0.0:*      LISTEN      689/php-fpm

需修改php-fpm的配置文件使其監聽在172.16.21.4的9000端口。 (listen選項)

6.修改apache使其支持該模式。

1.編輯apache配置文件啓用httpd代理與cgi的相關模塊

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
#作爲mod_proxy模塊的補充

2.配置虛擬主機支持使用fcgi

ProxyRequests Off         #關閉正向代理
ProxyPassMatch ^/(.*\.php)$ fcgi://172.16.21.4:9000/PATH/$1         #PATH指明PHP文件在PHP服務器中存放的地址

簡單示例如下:

<VirtualHost *:80>
DocumentRoot "/www/host1"
ServerName www1.xkun.com
ProxyRequests Off#關閉正向代理
ProxyPassMatch ^/(.*\.php)$ fcgi://172.16.21.4:9000/www/host1/$1
#這裏設置存放目錄同名
#把以.php結尾的文件請求發送到php-fpm進程,php-fpm至少需要知道運行的目錄和URI,所以這裏直接在fcgi://127.0.0.1:9000後指明瞭這兩個參數,其它的參數的傳遞已經被mod_proxy_fcgi.so進行了封裝,不需要手動指定。
<Directory "/www/magedu.com">
Options none
AllowOverride none
Require all granted
</Directory>
</VirtualHost>

3.編輯apache配置文件httpd.conf,讓apache能識別php格式的頁面,並支持php格式的主頁

# vim /etc/httpd/httpd.conf
  AddType application/x-httpd-php  .php
  AddType application/x-httpd-php-source  .phps
  DirectoryIndex  index.php  index.html

補充說明:Apache httpd 2.4以前的版本中,要麼把PHP作爲Apache的模塊運行,要麼添加一個第三方模塊支持PHP-FPM實現。


五、源碼編譯memcached

1.libevent的安裝

# tar xf libevent-2.0.21-stable.tar.gz
# cd libevent-2.0.21
# ./configure --prefix=/usr/local/libevent
# make && make install
# echo "/usr/local/libevent/lib" > /etc/ld.so.conf.d/libevent.conf
# ldconfig  -v | grep libevent

2.memcached的安裝

# tar xf memcached-1.4.15.tar.gz
# cd memcached-1.4.15
# ./configure --prefix=/usr/local/memcached \
--with-libevent=/usr/local/libevent
# make && make install
  Sysv啓動腳本見附錄一
# chmod +x /etc/rc.d/init.d/memcached
# chkconfig --add memcached
# service memcached start

3.使用telnet進行簡單的測試

telnet 172.16.21.3 11211
add mykey 0 100 12
Hello World!
STORED
get mykey
Hello World!
END
quit
#默認監聽在本機所有的地址,如果不是可以用 -l 進行監聽地址指定

到此,完成memcached的簡單配置。詳細原理可以參考高俊峯老師的《高性能Linux服務器構建實戰:運維監控、性能調優與集羣應用》第三章


六、源碼安裝PHP擴展程序memcache

1.memcache簡單安裝

# tar xf memcache-2.2.5.tgz
# cd memcache-2.2.5
# /usr/local/php/bin/phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config --enable-memcache
# make && make install

2.安裝完成之後顯示如下:

Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/

3.編輯進配置文件

# mkdir /etc/php.d/
# vim /etc/php.d/memcached.ini
  extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/memcache.so
# service php-fpm restart


七、安裝PHP加速器xcache

1.安裝xcache

# tar xf xcache-3.0.3.tar.gz
# cd xcache-3.0.3
# /usr/local/php/bin/phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config  --enable-xcache
# make && make install

2.安裝結束時,會出現類似如下行:

Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20100525/

3.編輯php.ini,整合php和xcache:

# cp xcache.ini /etc/php.d#說明:xcache.ini文件在xcache的源碼目錄中。
# vim /etc/php.d/memcached.ini     # 默認上述文件中已經加載了該模塊,可以進行適當的修改
extension = /usr/local/php/lib/php/extensions/no-debug-zts-20100525/xcache.so


八、簡單測試網頁的編

以下測試網頁是通過php程序實現的,能夠簡單的完成各個模塊的連通性測試:

//測試與memcached緩存服務器的連通性
<?php
echo "Test memcached ..."
$mem = new Memcache;
$mem->connect("172.16.21.3", 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.";
?>
//測試PHP與mysql的連通性
<?php
echo "Test mysql ..."
$link=mysql_connect('172.16.21.2','root','root');
if($link)
        echo "mysql test success!!!";
else
        echo "mysql test fail!!";
mysql_close();
?>
//測試PHP頁面信息
<?php
echo "Test phpinfo ..."
    phpinfo ();
?>


以上就是筆者最近基於LAMMP企業網的架構的實現。其中apache的配置和解釋不夠詳細,大家可以參考我的上一篇博客。其餘的配置由筆者完全實現。博文中對相關程序的原理解釋不夠詳細,如有疑問歡迎探討,錯的的地方也歡迎大家指出。筆者將不遺餘力的更新相關linux的技術博客,歡迎大家關注。

QQ:572807025 郵箱:[email protected]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章