Windows XP Windows 7 Windows 2003 Windows Vista Windows教程綜合 Linux 系統教程
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟件教程
 Windows教程網 >> 電腦軟件教程 >> 服務器技術 >> 服務器綜合 >> Web服務之LNMMP架構及動靜分離實現

Web服務之LNMMP架構及動靜分離實現

日期:2017/1/23 16:28:26      編輯:服務器綜合

一、LNMMP 

LNMMP環境是Linux + Nginx + Memcached + MySQL + PhP,即LNMP + memcached。

Memcached 是一個高性能的分布式內存對象緩存系統,用於動態Web應用以減輕數據庫負載。它通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而提供動態、數據庫驅動網站的速度。Memcached基於一個存儲鍵/值對的hashmap。其守護進程(daemon )是用C寫的,但是客戶端可以用任何語言來編寫,並通過memcached協議與守護進程通信。

二、工程拓撲

wKiom1N4iVbBfTQjAAC0cRxVX3w956.jpg


 

三、安裝nginx服務器


  1. 1)部署開發環境   
  2. # yum -y install "Development tools" "Server Platform Development"   
  3. 2)解決依賴 pcre-devel  openssl-devel   
  4. # yum -y install pcre-devel openssl-devel   
  5. 3) 設置用戶   
  6. # groupadd -r nginx   
  7. # useradd -r -g nginx nginx   
  8. 4)編譯安裝nginx-1.4.7   
  9. # tar xf nginx-1.4.7.tar.gz   
  10. # cd nginx-1.4.7   
  11. # ./configure --prefix=/usr --sbin-path=/usr/sbin/nginx \   
  12. --conf-path=/etc/nginx/nginx.conf --error-log-path=\ /var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log \   
  13. --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock \--user=nginx --group=nginx --with-http_ssl_module \   
  14. --with-http_flv_module --with-http_stub_status_module \   
  15. --with-http_gzip_static_module --http-client-body-temp-path=\ /var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ \ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \   
  16. --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=\   
  17. /var/tmp/nginx/scgi --with-pcre   
  18. # make && make install   
  19. 5)檢測配置文件語法   
  20. # /usr/sbin/nginx -t   
  21. 6) 提供啟動腳本   
  22. # vim  /etc/rc.d/init.d/nginx   
  23.    內容如下   
  24. # nginx - this script starts and stops the nginx daemon   
  25. #   
  26. # chkconfig:   - 85 15   
  27. # description:  Nginx is an HTTP(S) server, HTTP(S) reverse \   
  28. #               proxy and IMAP/POP3 proxy server   
  29. # processname: nginx   
  30. # config:      /etc/nginx/nginx.conf   
  31. # config:      /etc/sysconfig/nginx   
  32. # pidfile:     /var/run/nginx.pid 
  33. # Source function library.   
  34. . /etc/rc.d/init.d/functions
  35. # Source networking configuration.   
  36. . /etc/sysconfig/network
  37. # Check that networking is up.   
  38. [ "$NETWORKING" = "no" ] && exit 0 
  39. nginx="/usr/sbin/nginx" 
  40. prog=$(basename $nginx)
  41. NGINX_CONF_FILE="/etc/nginx/nginx.conf" 
  42. [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
  43. lockfile=/var/lock/subsys/nginx
  44. make_dirs() {   
  45.    # make required directories   
  46.    user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`   
  47.    options=`$nginx -V 2>&1 | grep 'configure arguments:'`   
  48.    for opt in $options; do 
  49.        if [ `echo $opt | grep '.*-temp-path'` ]; then  
  50.            value=`echo $opt | cut -d "=" -f 2`   
  51.            if [ ! -d "$value" ]; then  
  52.                # echo "creating" $value   
  53.                mkdir -p $value && chown -R $user $value   
  54.            fi  
  55.        fi  
  56.    done  
  57. }
  58.  
  59. start() {   

  60.     [ -x $nginx ] || exit 5   
  61.     [ -f $NGINX_CONF_FILE ] || exit 6   
  62.     make_dirs   
  63.     echo -n $"Starting $prog: " 
  64.     daemon $nginx -c $NGINX_CONF_FILE   
  65.     retval=$?   
  66.     echo 
  67.     [ $retval -eq 0 ] && touch $lockfile   
  68.     return $retval   
  69.  
  70. stop() {   
  71.     echo -n $"Stopping $prog: " 
  72.     killproc $prog -QUIT   
  73.     retval=$?   
  74.     echo 
  75.     [ $retval -eq 0 ] && rm -f $lockfile   
  76.     return $retval   
  77. }
  78.  
  79. restart() {   
  80.     configtest || return $?   
  81.     stop   
  82.     sleep 1   
  83.     start   
  84. }
  85.  
  86. reload() {   
  87.     configtest || return $?   
  88.     echo -n $"Reloading $prog: " 
  89.     killproc $nginx -HUP   
  90.     RETVAL=$?   
  91.     echo 
  92. }
  93.  
  94. force_reload() {   
  95.     restart   
  96. }
  97.  
  98. configtest() {   
  99.   $nginx -t -c $NGINX_CONF_FILE   
  100. }
  101.  
  102. rh_status() {   
  103.     status $prog   
  104. }
  105.  
  106. rh_status_q() {   
  107.     rh_status >/dev/null 2>&1   
  108. }
  109. case "$1" in  
  110.     start)   
  111.         rh_status_q && exit 0   
  112.         $1   
  113.         ;;   
  114.     stop)   
  115.         rh_status_q || exit 0   
  116.         $1   
  117.         ;;   
  118.     restart|configtest)   
  119.         $1   
  120.         ;;   
  121.     reload)   
  122.         rh_status_q || exit 7   
  123.         $1   
  124.         ;;   
  125.     force-reload)   
  126.         force_reload   
  127.         ;;   
  128.     status)   
  129.         rh_status   
  130.         ;;   
  131.     condrestart|try-restart)   
  132.         rh_status_q || exit 0   
  133.             ;;   
  134.     *)   
  135.         echo $"Usage: ___FCKpd___0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" 
  136.         exit 2   
  137. esac  
  138. 7)為服務腳本賦予執行權限   
  139. # chmod +x /etc/rc.d/init.d/nginx   
  140. 8)添加到系統服務並開機啟動   
  141. # chkconfig --add nginx   
  142. # chkconfig nginx on   
  143. # chkconfig --list nigx   
  144. 9) 設置nginx配置文件的語法高亮   
  145. # mkdir ./vim/syntax -pv   
  146. # cd  .vim/syntax   
  147. # wget http://www.vim.org/scripts/download_script.php?src_id=19394   
  148. # cd .vim   
  149. # vim filetype.vim 內容如下   
  150.  au BufRead,BufNewFile /etc/nginx/*,/usr/local/nginx/conf/* if &ft == '' | setfiletype nginx | endif   

  151. 10)啟動服務   
  152. # service nginx start   
  153. # ss -tnalp | grep nginx 

四、安裝MySQL服務器

1.安裝  


  1. # tar xf mysql-5.5.33-linux2.6-x86_64.tar.gz -C /usr/local  
  2. # ln -sv /usr/local/mysql-5.5.33-linux2.6-x86_64 mysql 創建軟連接,易於操作 

2.為數據庫創建數據目錄

 

  1. #mkdri -pv /mydata/data 

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


  1. #groupadd -r mysql      //創建系統組mysql  
  2. #useradd -r -s /sbin/nologin -g mysql mysql -M -D /mydata/data mysql  
  3. //創建系統用戶mysql  
  4. #chown -R mysql:mysql /mydata/data  
  5. //設置目錄屬主屬組 

4.初始化mysql


  1. # cd /usr/local/mysql  
  2. # scripts/mysql_install_db --datadir=/mydata/data --user=mysql  
  3. //初始化數據庫  
  4. # chown -R root .  
  5. //設置當前目錄所有文件屬主為root 

5.提供腳本


  1. #cd /usr/local/mysql  
  2. #cp support-files/mysql.server  /etc/rc.d/init.d/mysqld  
  3. //設置腳本mysqld  
  4. #chmod +x /etc/rc.d/init.d/mysqld  
  5. //給腳本執行權限  
  6. # chkconfig --add mysqld  
  7. //添加開機啟動  
  8. # chkconfig  mysqld on 

6.提供配文件


  1. #cd /usr/local/mysql  
  2. #cp support-files/my-large.cnf  /etc/my.cnf  
  3. #vim /etc/my.cnf  
  4. thread_concurrency = 2  
  5. //修改,並發線程數,bithread_concurrency的值為CPU個數乘以2  
  6. datadir = /mydata/data  
  7. #添加,mysql數據文件的存放路徑: 

7.其他配置


  1. # vim /etc/profile.d/mysqld.sh  
  2. exportPATH=/usr/local/mysql/bin:$PATH  
  3. # source /etc/profile.d/mysqld.sh  
  4. #vim /etc/man.config  
  5. MANPATH  /usr/local/mysql/man//添加此行  
  6. # ln -sv /usr/local/mysql/include  /usr/include/mysql  
  7. //輸出mysql的頭文件至系統頭文件路徑/usr/include  
  8. # echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf  
  9. //輸出mysql的庫文件給系統庫  
  10. #ldconfig   //重載系統庫: 

8.啟動服務


  1. # service mysqld start   
  2. # ss  -tnl | grep 3306 

9.用戶初始化

  1. #mysql  
  2. mysql> use mysql  
  3. mysql> selecthost,user,password from user;  
  4. mysql> DELETE FROM user WHERE user = '';    //刪除空用戶  
  5. mysql> DELETE FROM user WHERE user = '::1'; //刪除ipv6用戶  
  6. mysql> UPDATE user SET password = PASSWORD('Hoolee') WHERE password = '';  
  7. //為root用戶設置密碼  
  8. mysql> FLUSH PRIVILEGES; 
  9. 五、安裝php服務器

    1.解決開發環境和依賴關系

    
    		
    1. # yum -y install bzip2-devel  
    2. # yum -y install libmcrypt-devel  
    3. # yum -y groupinstall "Desktop Platform Development" 

    2.安裝php

    
    		
    1. # tar xf php-5.4.26.tar.bz2   
    2. # cd /usr/src/php-5.4.26/   
    3. # ./configure--prefix=/usr/local/php --with-openssl   
    4. --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd   
    5. --enable-mbstring --with-freetype-dir --with-jpeg-dir  
    6. --with-png-dir --with-zlib--with-libxml-dir=/usr --enable-xml   
    7. --enable-sockets --with-apxs2=/usr/local/apache2/bin/apxs  
    8. --with-mcrypt  --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d   
    9. --with-bz2  --enable-maintainer-zts   
    10. # make  && make install 

    3.提供配置文件

    
    		
    1. # cp php.ini-production /etc/php.ini 

    4.為php-fpm提供腳本,並將其添加到服務列表

    
    		
    1. # cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm   
    2. # chmod +x /etc/rc.d/init.d/php-fpm   
    3. # chkconfig --add php-fpm   
    4. # chkconfig php-fpm on 

    5.為php-fpm提供配置文件

    
    		
    1. # cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf 

    6.編輯php-fpm配置文件

    
    		
    1. # vim /usr/local/php/etc/php-fpm.conf   
    2.     pm.max_children = 150   
    3.     pm.start_servers = 8   
    4.     pm.min_spare_servers = 5   
    5.     pm.max_spare_servers = 10   
    6.     pid = /usr/local/php/var/run/php-fpm.pid   
    7.     listen = 172.16.1.11:9000 

    7.啟動php-fpm

    
    		
    1. # service php-fpm start   
    2. # ps -aux | grep php-fpm 

     

    六、安裝php加速器xcache

    1.安裝xcache

     
    
    		
    1. # tar xf xcache-3.0.3.tar.gz  
    2. # cd xcache-3.0.3  
    3. # /usr/local/php/bin/phpize  
    4. //phpize是用來安裝php擴展模塊的,通過phpize可以建立php的  
    5. 外掛模塊,若你想在原來編譯好的php中加入memcached或者  
    6. ImageMagick等擴展模塊,就需要使用phpize  
    7. # # ./configure --enable=xcache --with-php-config=/usr/local/php/bin/  
    8. php-config  
    9. # make && make install  
    10. //顯示xcache模塊路徑:/usr/local/php/lib/php/extensions/no-debug-zts-20100525/ 

    2.編輯配置文件,整合php + xcache

    
    		
    1. # vim xcache.ini  
    2. //添加模塊路徑  
    3. extension = /usr/local/php/lib/php/extensions/no-debug-zts-20100525/xcache.so  
    4. # cp xcache.ini /etc/php.d/ 

    3.重啟php-fpm

    
    		
    1. # service php-fpm restart 

    七、配置nginx

    1.編輯/etc/nginx/nginx.conf,實現動靜分離

    
    		
    1. worker_processes  2; #worker進程的個數   
    2. error_log  /var/log/nginx/error.log  notice;    #錯誤日志路徑及級別   
    3. events {   
    4.     worker_connections  1024;    #每個worker能夠並發響應的最大請求數   
    5. }   
    6. http {   
    7.     include       mime.types;    #支持多媒體類型   
    8.     default_type  application/octet-stream;   
    9.     sendfile        on;    #由內核直接轉發   
    10.     #keepalive_timeout  0;   
    11.     keepalive_timeout  5;    #持久連接5s   
    12.     gzip  on;    #開啟壓縮功能   
    13.     server {   
    14.         listen       80;   
    15.         server_name  www.hoo.com;   
    16.         add_header X-via $server_addr;    #讓客戶端能夠看到代理服務器的IP   
    17.         location / {   
    18.             root   html;   
    19.             index  index.php index.html index.htm;   
    20.         }   
    21.         location ~* \.(jpg|jpeg|png|gif|js|css)___FCKpd___20nbsp;{  #匹配靜態內容   
    22.             root   html;    #默認目錄在/usr/local/nginx/html   
    23.         }   
    24.         location ~ \.php___FCKpd___20nbsp;{  #匹配動態php文件   
    25.             root                html;   
    26.             fastcgi_pass        172.16.7.11:9000;    #代理到的服務器   
    27.             fastcgi_index       index.php;   
    28.             fastcgi_param       SCRIPT_FILENAME scripts$fastcgi_script_name;   
    29.             include             fastcgi_params;   

    30.         }   
    31.    }   

    2.編輯/etc/nginx/fastcgi_params

    
    		
    1. fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;   
    2. fastcgi_param  SERVER_SOFTWARE    nginx;   
    3. fastcgi_param  QUERY_STRING       $query_string;   
    4. fastcgi_param  REQUEST_METHOD     $request_method;   
    5. fastcgi_param  CONTENT_TYPE       $content_type;   
    6. fastcgi_param  CONTENT_LENGTH     $content_length;   
    7. fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;   
    8. fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;   
    9. fastcgi_param  REQUEST_URI        $request_uri;   
    10. fastcgi_param  DOCUMENT_URI       $document_uri;   
    11. fastcgi_param  DOCUMENT_ROOT      $document_root;   
    12. fastcgi_param  SERVER_PROTOCOL    $server_protocol;   
    13. fastcgi_param  REMOTE_ADDR        $remote_addr;   
    14. fastcgi_param  REMOTE_PORT        $remote_port;   
    15. fastcgi_param  SERVER_ADDR        $server_addr;   
    16. fastcgi_param  SERVER_PORT        $server_port;   
    17. fastcgi_param  SERVER_NAME        $server_name; 

    3.重載nginx

    
    		
    1. # service nginx reload  

    八、安裝Memcached服務器

    1.memcached特性    

    Memcached是一款開發工具,它既不是一個代碼加速器,也不是數據庫中間件。其設計哲學思想主要反映在如下方面:

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

    (2)功能的實現一半依賴於客戶端,一半基於服務器端:客戶負責發送存儲項至服務器端、從服務端獲取數據以及無法連接至服務器時采用相應的動作;服務端負責接收、存儲數據,並負責數據項的超時過期;

    (3)各服務器間彼此無視:不在服務器間進行數據同步;

    (4)O(1)的執行效率

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

    2.安裝memcached

       a).部署開發環境,解決依賴關系

    
    			
    1. # yum groupinstall "Development Tools" "Server Platform Deveopment" -y   
    2. # yum install -y libevent-devel 
       b).編譯安裝memcached
    
    		
    1. # tar xf memcached-1.4.15.tar.gz   
    2. # cd memcached-1.4.15   
    3. # ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent   
    4. # make && make install 

       c).為memcached提供啟動腳本

    
    		
    1. #!/bin/bash   
    2. #   
    3. # Init file for memcached   
    4. #   
    5. # chkconfig: - 86 14   
    6. # description: Distributed memory caching daemon   
    7. #   
    8. # processname: memcached   
    9. # config: /etc/sysconfig/memcached   
    10. . /etc/rc.d/init.d/functions  
    11. ## Default variables   
    12. PORT="11211" 
    13. USER="nobody" 
    14. MAXCONN="1024" 
    15. CACHESIZE="64" 
    16. OPTIONS="" 
    17. RETVAL=0   
    18. prog="/usr/local/memcached/bin/memcached" 
    19. desc="Distributed memory caching" 
    20. lockfile="/var/lock/subsys/memcached" 
    21. start() {   
    22.         echo -n $"Starting $desc (memcached): " 
    23.         daemon $prog -d -p $PORT -u $USER -c $MAXCONN -m $CACHESIZE -o "$OPTIONS" 
    24.         RETVAL=$?   
    25.         [ $RETVAL -eq 0 ] && success && touch $lockfile || failure   

    26.         echo 
    27.         return $RETVAL   
    28. }   
    29. stop() {   
    30.         echo -n $"Shutting down $desc (memcached): " 
    31.         killproc $prog   
    32.         RETVAL=$?   
    33.         [ $RETVAL -eq 0 ] && success && rm -f $lockfile || failure   
    34.         echo 
    35.         return $RETVAL   
    36. }   
    37. restart() {   
    38.         stop   
    39.         start   
    40. }   
    41. reload() {   
    42.         echo -n $"Reloading $desc ($prog): " 
    43.         killproc $prog -HUP   
    44.         RETVAL=$?   
    45.         [ $RETVAL -eq 0 ] && success || failure   
    46.         echo 
    47.         return $RETVAL   
    48. }   
    49. case "$1" in  
    50.   start)   
    51.         start   
    52.         ;;   
    53.   stop)   
    54.         stop   
    55.         ;;   
    56.   restart)   
    57.         restart   
    58.         ;;   
    59.   condrestart)   
    60.         [ -e $lockfile ] && restart   
    61.         RETVAL=$?   
    62.         ;;   
    63.   reload)   
    64.         reload   
    65.         ;;   
    66.   status)   
    67.         status $prog   
    68.         RETVAL=$?   
    69.         ;;   
    70.    *)   
    71.         echo $"Usage: ___FCKpd___25 {start|stop|restart|condrestart|status}" 
    72.         RETVAL=1   
    73. esac  
    74. exit $RETVAL 

       d).添加memcached至服務列表

    
    		
    1. # chmod +x /etc/init.d/memcached   
    2. # chkconfig --add memcached   
    3. # service memcached start 
       e).檢查是否運行
    
    		
    1. # ss -tnlp | grep 11211 

    九、安裝php的memcached擴展

    1.安裝memcached擴展

    
    		
    1. # tar xf memcache-2.2.7.tgz   
    2. # cd memcache-2.2.7   
    3. # /usr/local/php/bin/phpize   
    4. # ./configure --with-php-config=/usr/local/php/bin/php-config --enable-memcache   
    5. # make && make install 

    2.編輯配置文件,整合php + memcached

    
    		
    1. # vim xcache.ini   
    2. //添加模塊路徑   
    3. extension = /usr/local/php/lib/php/extensions/no-debug-zts-20100525/memcache.so 

    3.重啟php-fpm

    
    		
    1. # service php-fpm restart   

    4.對memcached功能進行測試,在網站目錄中建立測試頁面test.php

    
    		
    1. //php服務器   
    2. # vim test.php   
    3. <?php   
    4. $mem = new Memcache;   
    5. $mem->connect("172.16.1.13", 11211)  or die("Could not connect");   
    6. $version = $mem->getVersion();   
    7. echo "Server's version: ".$version."<br/>\n";   

    8. $mem->set('hellokey', 'Hello World', 0, 600) or die("Failed to save data at the memcached server");   
    9. echo "Store data in the cache (data will expire in 600 seconds)<br/>\n";   
    10. $get_result = $mem->get('hellokey');   
    11. echo "$get_result is from memcached server.";   
    12. ?>   

    測試訪問即可。

    5.安裝wordpress測試訪問即可

    十、安裝memadmin-master查看memcached狀態信息

    1.解壓即可使用

    
    		
    1. //解壓至php服務器/usr/local/nginx/html/  
    2. # unzip memadmin-master.zip 

    2.測試訪問

    www.hoo.com/memadmin-master

    原文鏈接:http://hoolee.blog.51cto.com/7934938/1413346

Copyright © Windows教程網 All Rights Reserved