兄弟組團搞事情LAMP(一)

博文參考

http://www.178linux.com/51895
http://www.178linux.com/63734
http://www.178linux.com/5187

人物背景

LAMP

Linux Apache Mysql,MariaDB Perl,PHP,Python: 
一組經常使用來搭建動態網站或者服務器的開源軟件,自己都是各自獨立的程序,因爲常被放在一塊兒使用,所以稱之爲LAMP,LAMP是最強大的網站解決方案

特色

LAMP具備Web資源豐富、輕量、快速開發的特色,其優點在於通用、跨平臺、高性能、低價格,所以LAMP不管是性能、質量仍是價格都是企業搭建網站的首選方案。

理解Web資源的概念

靜態資源:原始形式與響應給客戶端的結果一致,如jpeg,html,plaintext,佔80%php

動態資源:原始形式一般爲程序文件,需運行對應環境的子進程返回執行結果,佔20%.但須要IO請求的資源大約爲20%.html

CGI:Common Gateway Interface

CGI協議定義了Web服務器程序與後端服務進程進行數據交換的規範,以prefork爲例,Browser並行請求多個資源時,httpd爲每一個請求創建一個子進程,若是請求動態資源時,httpd調用php模塊對動態資源進行處理,再返回給Web服務器響應客戶端。過程當中httpd與php及mysqld之間的通訊就使用了CGI接口。

httpd

完整的http請求處理過程

(1) 創建或處理鏈接:接收請求或拒絕請求;

(2) 接收請求:接收來自於網絡上的主機請求報文中對某特定資源的一次請求的過程;

(3) 處理請求:對請求報文進行解析,獲取客戶端請求的資源及請求方法等相關信息;

(4) 訪問資源:獲取請求報文中請求的資源;

(5) 構建響應報文:

(6) 發送響應報文:

(7) 記錄日誌:

httpd所支持的處理模型有哪些,他們的分別使用於哪些環境

MPM:Multipath processing Modules (多路處理模塊)

    prefork:多進程模型,每一個進程響應一個請求;

         一個主進程:負責生成子進程及回收子進程;負責建立套接字;負責接收請求,並將其派發給某子進程進行處理;

         n個子進程:每一個子進程處理一個請求;

         工做模型:會預先生成幾個空閒進程,隨時等待用於響應用戶請求;最大空閒和最小空閒;

    worker:多進程多線程模型,每線程處理一個用戶請求;

         一個主進程:負責生成子進程;負責建立套接字;負責接收請求,並將其派發給某子進程進行處理;

         多個子進程:每一個子進程負責生成多個線程;

    併發響應數量:m*n每一個線程:負責響應用戶請求;

         m:子進程數量

         n:每一個子進程所能建立的最大線程數量;

    event:事件驅動模型,多進程模型,每一個進程響應多個請求;

         一個主進程 :負責生成子進程;負責建立套接字;負責接收請求,並將其派發給某子進程進行處理;

         子進程:基於事件驅動機制直接響應多個請求;

    httpd-2.2: 仍爲測試使用模型;

    httpd-2.4:event可生產環境中使用;

請求流程

一次http事物前端

客戶端經過瀏覽器發出http請求,請求當中包含一部份內容,內容不是最關鍵的,關鍵的是在內容前面附加一個http請求首部,用來告訴服務器端,客戶端是如何請求的,用哪一種方法進行請求的,請求哪個虛擬機等等。

請求發送到服務器端後,服務器端要分析請求,分析這個請求首部用什麼url,用什麼方法請求,請求哪一個主機,用哪一個協議等等。而後構建響應報文,響應時還要告訴客戶端我是怎麼響應你的,給出響應狀態碼(100-500)。客戶端利用這些首部信息完成內容以外的交換信息。則這一次http事務完成。

    報文語法格式:
        request 報文
            <method> <request-URL> <version>
            <headers>

            <entity-body>
        response 報文
            <version> <status> <reason-phrase>
            <headers>

            <entity-body>

請求流程mysql

用戶請求先到達內核空間的網絡協議棧,內核空間經過web服務所監聽的套接字socket,能夠將用戶請求轉發給用戶空間的http服務進程。靜態資源是http服務進程向內核發請求,去磁盤找到這個資源,沒有就顯示Not Found,有就把加載的資源返回給進程,先到內核本身的內存中。其中進程把任務交給內核後到內核把資源返回進程之間,進程處於空閒狀態,咱們把這個狀態稱爲阻塞狀態。拿到資源後,進程構建響應報文,把資源的前面加上響應首部,發到內核空間,經過通訊子網進行向外發送。即達成了一次http事務吧。

靜態資源:Client -- http 協議--> httpdlinux

補充:
若是不阻塞,則註冊一個事務,就去作別的事情,等這邊的事情好了,提醒一下就行了,這種機制叫作AIO機制。


上面的,內核加載完了資源放到了內存中,而後又返給進程,這個時候又浪費了一次用戶空間,因此有一種Sendfile機制,能夠直接在內核裏面添加響應首部,而後傳給用戶。這樣就省去了一回用戶空間,提升了效率。

動態資源請求nginx

從磁盤加載後,進程將資源傳給PHP,PHP根據是否用到數據庫去調用數據庫,都處理好了,傳遞給進程。

客戶端經過http協議將請求傳給內核,那麼httpd進程經過三種方法與php結合:
    modules: 把 php 編譯成爲 httpd 的模塊
    cgi:
    fastcgi:
php要聯繫mysql。要用PHP代碼扮演客戶端,通過mysql協議聯繫。


Client -- http --> httpd --> libphp5.so () -- mysql --> MySQL server

clipboard.png

PHP

簡介

php是可嵌入html中的程序,支持不一樣的存儲、字符、加密解密的功能,這些機制都是模塊化(extensions)實現的,如php與MySQL的鏈接需安裝php-mysql模塊。php的模塊是爲了豐富 php 功能的擴展,而php做爲httpd的模塊是爲了讓Web服務器支持動態Web資源解析的功能。

httpd與php的結合方式主要有三種

CGI:由php解釋器與httpd經過CGI通訊web

Module:不一樣的mpm須要不一樣的php程序包,沒法混用
prefork:libphp程序包
worker, event:libphp-zts程序包正則表達式

FastCGIredis

fcgi是簡裝版的CGI協議,httpd只把URL從新封裝後經過 FCGI 傳遞給 fcgi 服務端,動態資源由 fcgi 服務器端從 mysql 加載,處理完成再返回給httpd,此時httpd至關因而一個反向的代理服務器,接收任意客戶端的請求,爲fcgi Server提供服務。 
此時php以fpm機制監聽在一個套接字上,可運行在另外一臺主機上,如httpd做爲一個反向代理服務器且分發動態資源請求給多個fcgi服務器,以完成更好的動態資源處理,固然須要處理好用戶section丟失的問題,一種方式經過ip地址識別用戶;另外一種方式經過綁定cookie,且同步section給多態服務器;另外一種方式是把section放在單獨的具備冗餘功能的服務器中保存在redis(nosql)數據庫中; 
php-fpm工做模式相似於httpd的prefork,主控進程接收請求,經過建立子進程處理httpd客戶端的併發請求。子進程可按需生成,也可動態生成,經過鏈接池機制管理子進程的數量和狀態,有活動、空閒、未激活等幾種狀態。

Module形式安裝php

yum -y install php          #做爲httpd的modules
rpm -ql | grep php
rpm -ql php-common          #公共組件,可以被httpd與php解釋器調用

#做爲httpd模塊的php配置文件:/etc/httpd/conf.d/php.conf
#php核心的配置文件:/etc/php.ini, /etc/php.d/*.ini

vi /etc/php.ini
    格式:[section_id]
    ;;;;;;;;;;;;;;;;;;;
    ; Quick Reference ;
    ;;;;;;;;;;;;;;;;;;;
    ; display_errors
    ;   Default Value: On           #默認爲開發環境
    ;   Development Value: On       #開發環境
    ;   Production Value: Off       #生產環境

    date.timezone = Asia/Shanghai   #默認讀取系統時區,會有waring

FastCGI方式安裝php

PHP-FPM 是一個簡單可靠的 FastCGI 進程管理器(FastCGI Process Manager),從 PHP 5.3.3 開始就成爲了 PHP 的內置管理器。Apache 官方網站也提供了配置 Apache httpd 2.4.x 使用 mod_proxy_fcgi 和 PHP-FPM 運行 php 程序的基本方法和設置運行方式的簡單介紹。

php-fpm(FastCGI Process Manager)做爲獨立的守護進程,偵聽一個套接字,接收並響應來自前端程序的請求,即httpd爲FastCGI客戶端。對於繁忙的站點能提高併發性能。由於 Apache 能夠專心處理除 php 以外的靜態網頁及元素,反而 httpd 進程自己佔用的 CPU 和內存能夠顯著下降,從而從總體上下降資源消耗。另一點是方便後期升級爲分佈式的Web服務器。

代理服務器

正向:爲有限客戶端發送給任意服務器,服務於客戶端sql

反向:接收來自任意客戶端請求,發送給有限服務器,服務於服務端

php的配置文件

官方說明:http://php.net/manual/zh/ini....

LAMP實驗搭建

圖片.png

1. 實驗主框架LAMP採用編譯安裝。
2. 分離HTTPD,PHP,MARIADB。
3. 兩臺服務器可以各自被訪問且內容相同。

程序包準備

apr-1.5.2.tar.gz                apr是apache的運行庫,提供了軟件容許所須要的庫文件。
apr-util-1.5.4.tar.gz            能夠理解爲apr的擴展,支持更加多的數據接口與封裝接口。
httpd-2.4.20.tar.bz2              http程序,2.4支持了衆多新特性,最爲主要的是event模型。
mariadb-5.6.20.tar.gz              徹底開源的關係型數據庫,是mysql的一個分支。
php-5.6.20.tar.gz                  php程序,負責解析動態請求。
xcache-3.2.0.tar.gz                PHP的加速器程序,可以經過緩存來加速PHP。

phpMyAdmin-4.6.0-all-languages.zip   圖形化數據庫管理工具,基於PHP開發,可選。
wordpress-4.5.zip                  基於PHP開發的開源的blog平臺,可選。
Discuz_X3.1_SC_GBK.zip          基於PHP開發的論壇,可選。

軟件準備

[開發包組]
Development Tools    開發工具包

[apache]
pcre-devel            pcre正則表達式支持庫
openssl-devel        openssl開發包

[PHP]
libxml2-devel        xml的開發包
bzip2-devel            bzip2的開發包
libmcrypt-devel        加密擴展開發包
mhash-devel            mhash加密開發包

配置文件預覽表

clipboard.png

Web Server 1 (192.168.1.1)

httpd編譯安裝

編譯安裝

[root@host1 ~]# yum groupinstall "Development Tools" -y                安裝依賴的包組「Development Tools」
[root@host1 ~]# yum install pcre-devel openssl-devel -y                安裝正則表達式的開發包pcre-devel 與 openssl的開發包openssl-devel
[root@host1 ~]# rpm -q apr-util && yum remove apr-util -y            查詢apr-util是否安裝,安裝了就卸載,是爲了防止默認安裝了低版本的apr而使得很是混亂。
[root@host1 ~]# rpm -q apr && yum remove apr -y                        查詢apr是否安裝,安裝了就卸載,是爲了防止默認安裝了低版本的apr而使得很是混亂。
[root@host1 ~]# rpm -q httpd && yum remove httpd -y                    查看httpd是否安裝,安裝了就卸載,是爲了防止默認安裝了低版本的httpd。

[root@host1 ~]# useradd -s /sbin/nologin -r apache                     建立系統用戶並不能登錄,建立用戶時會自動建立相同名稱的組。    

[root@host1 source]# cd source/                                        cd到存放源碼的目錄。
[root@host1 source]# tar xf source/apr-1.5.2.tar.gz                      解壓apr
[root@host1 source]# tar xf source/apr-util-1.5.4.tar.gz            解壓apr-util
[root@host1 source]# tar xf source/httpd-2.4.20.tar.bz2                解壓httpd

[root@host1 source]# cd apr-1.5.2                                    cd到apr-1.5.2的目錄。
[root@host1 apr-1.5.2]# ./configure --prefix=/usr/local/apr            編譯安裝的環境檢查,生成編譯安裝配置清單文件,並制定程序存放位置。
[root@host1 apr-1.5.2]# make && make install                        編譯以及複製文件。

[root@host1 apr-1.5.2]# cd ../apr-util-1.5.4                        cd到apr-util目錄
[root@host1 apr-util-1.5.4]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr        檢查環境,生成編譯安裝配置清單文件,指定程序存放位置以及apr的安裝位置。
[root@host1 apr-util-1.5.4]# make && make install                    編譯以及複製文件。

[root@host1 apr-util-1.5.4]# cd ../httpd-2.4.20                    cd到httpd-2.4.20的目錄。
[root@host1 httpd-2.4.20]# ./configure \                        檢查環境,生成編譯安裝配置清單文件。
> --prefix=/web/apache \                                        指定程序存放位置。
> --sysconfdir=/etc/httpd \                                     指定配置文件存放位置。
> --enable-so \                                                 啓用共享對象
> --enable-ssl \                                                啓用ssl
> --enable-cgi \                                                啓用cgi
> --enable-rewrite \                                            啓用rewrite重寫
> --with-zlib \                                                 啓用zlib庫
> --with-pcre \                                                 啓用pcre正則
> --with-apr=/usr/local/apr \                                   指定apr位置
> --with-apr-util=/usr/local/apr-util \                         指定apr-util位置
> --enable-modules=most \                                       啓用大部分模塊
> --enable-mpms-shared=all \                                    啓用全部的MPM模型,prefork worker event
> --with-mpm=event                                              默認啓用event模型
[root@host1 source]# make && make install                       編譯以及複製文件。

[root@host1 source]# cd ~
[root@host1 ~]# echo "export PATH=/web/apache/bin:$PATH" > /etc/profile.d/httpd.sh   寫入二進制可執行文件路徑至$PATH變量。
[root@host1 ~]# ln -s /web/apache/include /usr/include/httpd                             在/usr/include中建立連接指向httpd的頭文件
[root@host1 ~]# echo "PidFile  \"/var/run/httpd.pid\"" >> /etc/httpd/httpd.conf\     將PID的路徑寫入httpd的配置文件
[root@host1 ~]# echo "MANPATH /web/apache/man" >> /etc/man.config                     將httpd的man文件路徑寫入man的配置文件。
[root@host1 ~]# vim /etc/rc.d/init.d/httpd                建立啓動腳本,並修改一下主要變量的參數的值,腳本在本文最後提供。
....
apachectl=/web/apache/bin/apachectl                        
httpd=${HTTPD-/web/apache/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/var/run/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}
....
[root@host1 ~]# chmod +x /etc/rc.d/init.d/httpd                    給予啓動腳本執行權限。
[root@host1 ~]# chkconfig --add httpd                            將httpd添加進開機啓動。
[root@host1 ~]# chkconfig --level 3 httpd on                        將httpd設置爲在level 3都啓動。
[root@host1 ~]# service httpd start                                腳本啓動httpd。

配置文件

[root@host1 ~]# vim /etc/httpd/httpd.conf                        配置httpd.conf
LoadModule proxy_module modules/mod_proxy.so                    啓用代理模塊。
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so            啓用基於fcgi的傳輸模塊。
User apache                                                        指定子進程的屬主。
Group apache                                                    指定子進程的屬組。
Include /etc/httpd/extra/httpd-vhosts.conf                        開啓此項會自動去讀hyyp-vhosts.conf這個配置文件。
AddType application/x-httpd-php  .php                            增長類型識別PHP。
AddType application/x-httpd-php-source  .phps                    增長類型識別PHPS。

[root@host1 ~]# vim /etc/httpd/extra/httpd-vhosts.conf            編輯httpd-vhost.conf
<Virtualhost *:80>                                                增長一個虛擬主機。
        documentroot "/web/data"                                此主機的根目錄。
        servername www.xiao.com                                    此主機的服務器名稱即域名。
        errorlog "/web/log/error.log"                            錯誤日誌存放位置。
        customlog "/web/log/access.log" common                    訪問日誌存放位置已經格式指定爲common這個內置配置。

        proxyrequests off                                                        關閉正想代理。
        ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.1.3:9000/web/data/$1            將.PHP結尾的文件的請求都經過fcgi轉向192.168.1.3:9000/web/data去。

        <directory "/web/data">                                    此虛擬主機目錄/web/data的屬性。
                options none                                    目錄選項爲none。
                DirectoryIndex index.php index.html                默認的主頁文件爲index.php 次之爲index.html
                allowoverride none                                目錄配置檢查爲none。
                require all granted                                容許多有主機訪問,沒有作訪問控制。
        </directory>
</Virtualhost>
[root@host1 ~]# mkdir -pv /web/{data,log}                        建立日誌文件存放目錄。
[root@host1 ~]# service httpd reload                            重載配置文件。

網頁部署

[root@host1 ~]# cd source/
[root@host1 source]# cp Discuz_X3.2_SC_UTF8.zip /web/data        
[root@host1 data]# unzip Discuz_X3.2_SC_UTF8.zip
[root@host1 data]# chown -R apache:apache .
注:須要在fastcgi指定的PHP服務器中的路徑下擁有相同的文件纔可經過http訪問192.168.1.1來調用PHP服務器,也就是說此處服務器只是存放一個對應的文件用來映射訪問,真正的操做在PHP服務器上執行。

Web Server 2 (192.168.1.2)

編譯安裝

編譯安裝過程與web sever1相同

文件配置

[root@host2 ~]# vim /etc/httpd/httpd.conf                        與web1基本一致,就不作解釋了。
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
User apache
Group apache
Include /etc/httpd/extra/httpd-vhosts.conf
AddType application/x-httpd-php  .php
AddType application/x-httpd-php-source  .phps

[root@host2 ~]# vim /etc/httpd/extra/httpd-vhosts.conf
<Virtualhost *:80>
        documentroot "/web/data"
        servername www.xiao.com
        errorlog "/web/log/error.log"
        customlog "/web/log/access.log" common

        proxyrequests off
        ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.1.3:9000/web/data/$1

        <directory "/web/data">
                options none
                DirectoryIndex index.php index.html
                allowoverride none
                require all granted
        </directory>
</Virtualhost>
[root@host2 ~]# mkdir -pv /web/{data,log}
[root@host2 ~]# service httpd restart

網頁部署

[root@host2 ~]# cd source/
[root@host2 source]# cp Discuz_X3.2_SC_UTF8.zip /web/data
[root@host2 data]# unzip Discuz_X3.2_SC_UTF8.zip
[root@host2 data]# chown -R apache:apache .
注:須要在fastcgi指定的PHP服務器中的路徑下擁有相同的文件纔可經過http訪問192.168.1.2來調用PHP服務器,也就是說此處服務器只是存放一個對應的文件用來映射訪問,真正的操做在PHP服務器上執行。

php server

php server (192.168.1.3)

編譯安裝

[root@host3 ~]# yum groupinstall "Development Tools" -y            安裝依賴包組。
[root@host3 ~]# yum install "libxml2-devel" "bzip2-devel" "libmcrypt-devel" "mhash-devel" -y         安裝依賴的包。

[root@host3 ~]# useradd -s /sbin/nologin -r php                    建立php程序的屬主。

[root@host3 ~]# cd source/                                            
[root@host3 source]# tar xf php-5.6.20.tar.gz                    解壓php源碼包
[root@host3 source]# cd php-5.6.20                                CD進php-5.6.20目錄
[root@host3 php-5.6.20]# ./configure \                            檢查環境,生成編譯安裝配置清單文件。
--prefix=/usr/local/php \                                        指定php程序安裝位置。
--with-mysql=mysqlnd \                                            指定mysql爲mysqlnd驅動,mysqlnd是新版的mysql的驅動。
--with-openssl \                                                啓用openssl
--with-mysqli=mysqlnd \                                            指定mysqli爲mysqlnd驅動,mysqli爲php-mysql的進階擴展。
--enable-mbstring \                                                支持Multi-Byte String ,編碼庫。
--with-freetype-dir \                                            啓用freetype字體引擎。    
--with-jpeg-dir \                                                啓用支持jpeg格式的圖片。
--with-png-dir \                                                啓用支持png格式的圖片。
--with-zlib \                                                    啓用支持zlib數據壓縮。
--with-libxml-dir=/usr \                                        啓用xml的支持庫,支持xml格式的文件
--enable-xml  \                                                    啓用xml功能。
--enable-sockets \                                                啓用套接字。
--enable-fpm \                                                    啓用fpm,fastcgi管理器。
--with-mcrypt  \                                                啓用加密擴展庫mcrypt。
--with-config-file-path=/etc \                                    指定配置文件php.ini路徑。
--with-config-file-scan-dir=/etc/php.d \                        指定配置文件目錄,php.d
--with-bz2
[root@host3 php-5.6.20]# make && make install                編譯安裝,複製文件

[root@host3 php-5.6.20]# cp php.ini-production /etc/php.ini            複製的配置文件php.ini。
[root@host3 php-5.6.20]# cp lamp/php-5.6.20/sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm        複製php-fpm的啓動腳本。
[root@host3 php-5.6.20]# chmod +x /etc/rc.d/init.d/php-fpm            給予啓動腳本執行權限。
[root@host3 php-5.6.20]# echo "export PATH=/usr/local/php/bin:/usr/local/php/sbin:$PATH" > /etc/profile.d/php.sh    指定二進制可執行文件。
[root@host3 php-5.6.20]# echo "/usr/local/php/lib" > /etc/ld.so.conf.d/php.conf     寫入庫文件。
[root@host3 php-5.6.20]# ln -sv /usr/local/php/include /usr/include/php        寫入頭文件。
[root@host3 php-5.6.20]# echo "MANPATH /usr/local/php/man" >> /etc/man.config    寫入man文件。
[root@host3 php-5.6.20]# cp etc/php-fpm.conf.default etc/php-fpm.conf    複製php-fpm的配置文件。
[root@host3 php-5.6.20]# vim etc/php-fpm.conf        編輯php-fpm.conf
pid = /usr/local/php/var/run/php-fpm.pid            PID路徑
user = php                進程屬主
group = php                進程屬組
listen = 192.168.1.3:9000                監聽的IP,端口。
pm = dynamic                            指定進程管理方式爲dynamic,動態調整。也可設置爲靜態static。
pm.max_children = 50                    容許的最大的php-fpm子進程數。
pm.start_servers = 5                    動態模式下,PHP啓動時的php-fpm進程數。
pm.min_spare_servers = 2                動態模式下服務器空閒時最小的php-fpm進程數。
pm.max_spare_servers = 8                動態模式下服務器空閒時最大的php-fpm進程數。
[root@host3 php-5.6.20]# chkconfig --add php-fpm        加入開機自啓。
[root@host3 php-5.6.20]# chkconfig --level 3 php-fpm on        在level 3下開機自啓動。

[root@host3 php-5.6.20]# service php-fpm start    腳本啓動。

xcache加速PHP

[root@host3 source]# tar xf xcache-3.2.0.tar.gz
[root@host3 source]# cd xcache-3.2.0
[root@host3 xcache-3.2.0]# /usr/local/php/bin/phpize        啓用php的環境檢查,經過後生成xcache的configure文件
[root@host3 xcache-3.2.0]# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config        檢查環境,生成編譯安裝配置清單文件,開啓xcache,指定php-config的位置,php-config存放了php的配置信息。
[root@host3 xcache-3.2.0]# make && make install

[root@host3 xcache-3.2.0]# mkdir /etc/php.d
[root@host3 xcache-3.2.0]# cp xcache.ini /etc/php.d        複製xcache.ini到php.d目錄下。
[root@host3 xcache-3.2.0]# vim /etc/php.d/xcache.ini        配置xcache.ini
extension = /usr/local/php5/lib/php/extensions/no-debug-non-zts-20131226/xcache.so        指定共享對象位置。

網頁部署

[root@host3 ~]# mkdir -pv /web/data
[root@host3 ~]# cd source/
[root@host3 source]# cp Discuz_X3.2_SC_UTF8.zip /web/data
[root@host3 data]# unzip Discuz_X3.2_SC_UTF8.zip
[root@host3 data]# chown -R php:php .
注:此處的網頁文件纔是用戶經過httpd訪問到的網頁文件,也就是說用戶在訪問192.168.1.1時訪問的網頁是位於192.168.1.3上的。

DBserver

DBserver (192.168.1.4)

二進制文件安裝

[root@host4 ~]# useradd -s /sbin/nologin -r mysql            建立系統用戶musql,不容許登錄。

[root@host4 ~]# cd source/        
[root@host4 source]# tar xf mariadb-5.5.48-linux-x86_64.tar.gz -C /usr/local/        解壓源碼文件而且解壓至指定目錄。
[root@host4 source]# cd /usr/local                
[root@host4 local]# ln -sv mariadb-5.5.48-linux-x86_64 mysql        鏈接目錄爲mysql目錄
[root@host4 local]# cd mysql            
[root@host4 mysql]# chown -R mysql:mysql .        將mysql目錄下的文件遞歸的屬主屬組都改成mysql
[root@host4 mysql]# bash scripts/mysql_install_db --user=mysql --datadir=/mysql/data      執行安裝腳本而且指定進程用戶與數據存放路徑。
[root@host4 mysql]# chown -R root .        更改屬主爲root
[root@host4 mysql]# cp support-files/my-large.cnf /etc/my.cnf        複製mysql的配置文件
[root@host4 mysql]# vim /etc/my.cnf        配置my.cnf
thread_concurrency = 4                    內核數量*2,指定內部併發數量,決定性能。
datadir= /mysql/data                    指定數據存放位置。
[root@host4 mysql]# echo "export PATH=/usr/local/mysql/bin:$PATH" > /etc/profile.d/mysql.sh        寫入二進制文件路徑。
[root@host4 mysql]# echo "/usr/local/mysql/lib" > /etc/ld.so.conf.d/mysql.conf                    寫入庫文件。
[root@host4 mysql]# ln -sv /usr/local/mysql/include /usr/include/mysql                            寫入頭文件。
[root@host4 mysql]# echo "MANPATH /usr/local/mysql/man" >> /etc/man.config                        寫入man文件。
[root@host4 mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld                        複製腳本啓動文件至指定目錄。
[root@host4 mysql]#    chmod +x /etc/rc.d/init.d/mysqld                        執行權限給腳本啓動文件。

[root@host4 mysql]# chkconfig --add mysqld        添加進開機自啓。
[root@host4 mysql]# chkconfig --level mysqld on   啓用開機自啓。

[root@host4 mysql]# service mysqld start   啓動mysql

網頁部署

[root@host4 ~]# mysql
MariaDB [(none)]> create database dz ;
MariaDB [(none)]> use dz ;
MariaDB [dz]> create table ;
MariaDB [dz]> grant all on dz.* to dzadmin@'192.168.1.3' identified by 'redhat' ;
MariaDB [dz]> flush privileges ; 
MariaDB [dz]> exit

總結

1>    LAMP架構的實驗拖了好多天才動手,結果如今進度到nginx了纔開始動手實驗,實驗過程當中,編譯安裝就是不斷出錯與解決的問題,遇到出錯通常都是軟件沒有安裝。

2>    在編譯安裝前,必定要檢查是否是已經默認安裝過了程序,否則會很是亂,好比在此次試驗中,由於本機已經默認安裝了httpd-2.2與apr-1.3.9,apr-util-1.3.X ,因此致使在start httpd的時候啓動了2.2的版本,經過rpm -qi才知道。

3>    在編譯安裝完成後,要完成收尾工做,好比配置文件,連接庫,連接二進制文件,連接include文件,加啓動腳本等。

4>    最後的網頁部署沒有仔細列出步驟,但大體以寫出,能夠經過google等方式自行查詢,這裏選擇使用的php網頁爲discuz! 根據喜愛也可選擇其餘如word press等。

5>    這次架構實驗爲第一步的初步搭建LAMP的基本架構,後續會在學習的基礎上進一步迭代添加如日誌服務器,DNS服務器,負載均衡服務器,代理服務器等。

6>    因爲本次實驗PHP是基於FASTCGI來將PHP服務器獨立出來的,因此全部網頁文件都須要在每個服務器上存放一份,會很是麻煩,解決方案就是NFS,留在下一次實驗來補充完善。

httpd啓動腳本(centos6)

#!/bin/bash
#
# httpd        Startup script for the Apache HTTP Server
#
# chkconfig: - 85 15
# description: Apache is a World Wide Web server.  It is used to serve \
#        HTML files and CGI.
# processname: httpd
# config: /etc/httpd/conf/httpd.conf
# config: /etc/sysconfig/httpd
# pidfile: /var/run/httpd.pid

# Source function library.
. /etc/rc.d/init.d/functions

if [ -f /etc/sysconfig/httpd ]; then
        . /etc/sysconfig/httpd
fi

# Start httpd in the C locale by default.
HTTPD_LANG=${HTTPD_LANG-"C"}

# This will prevent initlog from swallowing up a pass-phrase prompt if
# mod_ssl needs a pass-phrase from the user.
INITLOG_ARGS=""

# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server
# with the thread-based "worker" MPM; BE WARNED that some modules may not
# work correctly with a thread-based MPM; notably PHP will refuse to start.

# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/web/apache/bin/apachectl
httpd=${HTTPD-/web/apache/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/var/run/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}
RETVAL=0

start() {
        echo -n $"Starting $prog: "
        LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch ${lockfile}
        return $RETVAL
}

stop() {
  echo -n $"Stopping $prog: "
  killproc -p ${pidfile} -d 10 $httpd
  RETVAL=$?
  echo
  [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
reload() {
    echo -n $"Reloading $prog: "
    if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then
        RETVAL=$?
        echo $"not reloading due to configuration syntax error"
        failure $"not reloading $httpd due to configuration syntax error"
    else
        killproc -p ${pidfile} $httpd -HUP
        RETVAL=$?
    fi
    echo
}

# See how we were called.
case "$1" in
  start)
  start
  ;;
  stop)
  stop
  ;;
  status)
        status -p ${pidfile} $httpd
  RETVAL=$?
  ;;
  restart)
  stop
  start
  ;;
  condrestart)
  if [ -f ${pidfile} ] ; then
    stop
    start
  fi
  ;;
  reload)
        reload
  ;;
  graceful|help|configtest|fullstatus)
  $apachectl $@
  RETVAL=$?
  ;;
  *)
  echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"
  exit 1
esac

exit $RETVAL
相關文章
相關標籤/搜索