天天看點

基于memcached搭建LNMMP平台

一、環境介紹

功用

ip位址

安裝軟體

提供前段靜态頁面和動态頁面

192.168.1.201

nginx+php

緩存伺服器

192.168.1.202

mencached

資料庫伺服器

192.168.1.203

MariaDB

二、nginx與php的安裝配置

   1.nginx的安裝與配置

      關于Nginx的安裝,請移步至本人相關博文http://wangfeng7399.blog.51cto.com/3518031/1403741,本處将不再給出操作步驟

     2.安裝php

       關于php的安裝,請移步至本人相關博文,http://wangfeng7399.blog.51cto.com/3518031/1381688,本處将不再給出操作步驟  

     3、安裝xcache,為php加速

       關于xcache的安裝,請移步至本人相關博文http://wangfeng7399.blog.51cto.com/3518031/1381688,本處将不再給出具體操作步驟

     4.nginx和php的結合

       編輯/etc/nginx/nginx.conf,啟用如下選項

1

2

3

4

5

6

7

<code>location ~ \.php$ {</code>

<code>    </code><code>root           html;</code>

<code>    </code><code>fastcgi_pass   </code><code>127.0</code><code>.</code><code>0.1</code><code>:</code><code>9000</code><code>;</code>

<code>    </code><code>fastcgi_index  index.php;</code>

<code>    </code><code>fastcgi_param  SCRIPT_FILENAME  $document_root$$fastcgi_script_name;</code>

<code>    </code><code>include</code>        <code>fastcgi_params;</code>

<code>}</code>

       編輯/etc/nginx/fastcgi_params,将其内容更改為如下内容

8

9

10

11

12

13

14

15

16

17

<code>fastcgi_param  GATEWAY_INTERFACE  CGI/</code><code>1.1</code><code>;</code>

<code>fastcgi_param  SERVER_SOFTWARE    nginx;</code>

<code>fastcgi_param  QUERY_STRING       $query_string;</code>

<code>fastcgi_param  REQUEST_METHOD     $request_method;</code>

<code>fastcgi_param  CONTENT_TYPE       $content_type;</code>

<code>fastcgi_param  CONTENT_LENGTH     $content_length;</code>

<code>fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;</code>

<code>fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;</code>

<code>fastcgi_param  REQUEST_URI        $request_uri;</code>

<code>fastcgi_param  DOCUMENT_URI       $document_uri;</code>

<code>fastcgi_param  DOCUMENT_ROOT      $document_root;</code>

<code>fastcgi_param  SERVER_PROTOCOL    $server_protocol;</code>

<code>fastcgi_param  REMOTE_ADDR        $remote_addr;</code>

<code>fastcgi_param  REMOTE_PORT        $remote_port;</code>

<code>fastcgi_param  SERVER_ADDR        $server_addr;</code>

<code>fastcgi_param  SERVER_PORT        $server_port;</code>

<code>fastcgi_param  SERVER_NAME        $server_name;</code>

   并在做支援的首頁面格式中添加php格式的首頁

<code>location / {</code>

<code>    </code><code>root   html;</code>

<code>    </code><code>index  index.php index.html index.htm;</code>

   而後重新載入nginx的配置檔案

<code>[root@node1 ~]# service nginx reload</code>

<code>nginx: the configuration file /etc/nginx/nginx.conf syntax </code><code>is</code> <code>ok</code>

<code>nginx: configuration file /etc/nginx/nginx.conf test </code><code>is</code> <code>successful</code>

<code>Reloading nginx:                                           [  OK  ]</code>

   準備測試頁面    

<code>[root@node1 ~]# vi /usr/local/nginx/html/index.php</code>

<code>&lt;?php</code>

<code>        </code><code>phpinfo();</code>

<code>?&gt;</code>

   可以看到nginx與php、xcache整合成功

<a href="http://s3.51cto.com/wyfs02/M02/25/43/wKioL1NdDxmx5g_2AAJDWedoTAY994.jpg" target="_blank"></a>

   5.壓力測試

<code>[root@node1 xcache-</code><code>3.0</code><code>.</code><code>4</code><code>]# ab -c </code><code>100</code> <code>-n </code><code>1000</code> <code>http:</code><code>//192.168.1.201/index.php</code>

<code>Concurrency Level:      </code><code>100</code>

<code>Time taken </code><code>for</code> <code>tests:   </code><code>3.259</code> <code>seconds</code>

<code>Complete requests:      </code><code>1000</code>

<code>Failed requests:        </code><code>87</code>

<code>   </code><code>(Connect: </code><code>0</code><code>, Receive: </code><code>0</code><code>, Length: </code><code>87</code><code>, Exceptions: </code><code>0</code><code>)</code>

<code>Write errors:           </code><code>0</code>

<code>Total transferred:      </code><code>60208909</code> <code>bytes</code>

<code>HTML transferred:       </code><code>60061909</code> <code>bytes</code>

<code>Requests per second:    </code><code>306.81</code> <code>[#/sec] (mean)</code>

<code>Time per request:       </code><code>325.930</code> <code>[ms] (mean)</code>

<code>Time per request:       </code><code>3.259</code> <code>[ms] (mean, across all concurrent requests)</code>

<code>Transfer rate:          </code><code>18040.01</code> <code>[Kbytes/sec] received</code>

三、資料庫的安裝配置

四、memcached的安裝

   1.簡介

   Memcached是一款開源、高性能、分布式記憶體對象緩存系統,可應用各種需要緩存的場景,其主要目的是通過降低對Database的通路來加速web應用程式。它是一個基于記憶體的“鍵值對”存儲,用于存儲資料庫調用、API調用或頁面引用結果的直接資料,如字元串、對象等。

   memcached是以LiveJournal旗下Danga Interactive 公司的Brad Fitzpatric 為首開發的一款軟體。現在已成為mixi、hatena、Facebook、Vox、LiveJournal等衆多服務中提高Web應用擴充性的重要因素。

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

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

   2. 功能的實作一半依賴于用戶端,一半基于伺服器端:客戶負責發送存儲項至伺服器端、從服務端擷取資料以及無法連接配接至伺服器時采用相應的動作;服務端負責接收、存儲資料,并負責資料項的逾時過期;

   3. 各伺服器間彼此無視:不在伺服器間進行資料同步;

   4. O(1)的執行效率

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

   Memcached提供了為數不多的幾個指令來完成與伺服器端的互動,這些指令基于memcached的協定實作。

   存儲類指令:set, add, replace, append, prepend

   擷取資料類指令:get, delete, incr/decr

   統計類指令:stats, stats items, stats slabs, stats sizes

   清理指令: flush_all

  2.安裝

   memcached可以通過yum安裝也可以通過編譯源碼安裝,本處通過yun安裝

<code>[root@node2 ~]# yum install -y memcached</code>

   3.使用telnet指令測試menmcached的使用

      memcached提供一組基本指令用于基于指令行調用其服務或檢視伺服器狀态等

<code>[root@node2 ~]# telnet </code><code>127.0</code><code>.</code><code>0.1</code> <code>11211</code>

<code>add mykey </code><code>0</code> <code>60</code> <code>12</code>

<code>Hello world!</code>

<code>STORED</code>

<code>get</code> <code>mykey</code>

<code>VALUE mykey </code><code>0</code> <code>12</code>

<code>END</code>

<code>add指令格式:</code>

<code>add keyname flag timeout datasize</code>

<code>get</code><code>指令格式:</code>

<code>get</code> <code>keyname</code>

    4.memcached的常用選項說明:

   -l &lt;ip_addr&gt;:指定程序監聽的位址

   -d:以守護模式運作

   -u &lt;username&gt;:以指定的使用者運作menmcached程序

   -m &lt;num&gt;:用于緩存資料的最大記憶體空間,機關為MB,預設為64MB

   -c &lt;num&gt;:最大支援的并發連接配接數,預設為1024

   -p &lt;num&gt;: 指定監聽的TCP端口,預設為11211

   -U &lt;num&gt;:指定監聽的UDP端口,預設為11211,0表示關閉UDP端口

   -t &lt;threads&gt;:用于處理入站請求的最大線程數,僅在mencached編譯時開啟了支援線程才有效

   -f &lt;num&gt;:設定slab allocator定義預先配置設定記憶體空間大小固定的塊時使用的增長因子

   -M:當記憶體不夠使用時傳回錯誤資訊,而不是按照LRU算法利用空間

   -n:指定最小的slab chuck大小;機關為位元組

   -S:啟用ssl進行進行使用者認證

五、安裝Memcached的PHP擴充

   1、安裝php的memcache擴充

<code>[root@node1 ~]# wget http:</code><code>//pecl.php.net/get/memcache-2.2.7.tgz</code>

<code>[root@node1 ~]# tar xf memcache-</code><code>2.2</code><code>.</code><code>7</code><code>.tgz</code>

<code>[root@node1 ~]# cd memcache-</code><code>2.2</code><code>.</code><code>7</code>

<code>[root@node1 memcache-</code><code>2.2</code><code>.</code><code>7</code><code>]# /usr/local/php/bin/phpize</code>

<code>[root@node1 memcache-</code><code>2.2</code><code>.</code><code>7</code><code>]# ./configure --</code><code>with</code><code>-php-config=/usr/local/php/bin/php-config --enable-memcache</code>

<code>[root@node1 memcache-</code><code>2.2</code><code>.</code><code>7</code><code>]# make &amp;&amp; make install</code>

<code>上述安裝完成會出現如下提示</code>

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

   2.開啟menmcache擴充

     編輯/etc/php.ini檔案添加如下項

<code>extension =/usr/local/php/lib/php/extensions/no-debug-non-zts-</code><code>20100525</code><code>/memcache.so</code>

     可以看到memcache加載成功

<a href="http://s3.51cto.com/wyfs02/M01/25/44/wKioL1NdGqOzeTJ4AAGgHyt6wUo418.jpg" target="_blank"></a>

   3.測試  

<code>在html路徑下添加一個test.php頁面,内容如下</code>

<code>$mem = </code><code>new</code> <code>Memcache;</code>

<code>$mem-&gt;connect(</code><code>"127.0.0.1"</code><code>, </code><code>11211</code><code>)  or die(</code><code>"Could not connect"</code><code>);</code>

<code>$version = $mem-&gt;getVersion();</code>

<code>echo </code><code>"Server's version: "</code><code>.$version.</code><code>"&lt;br/&gt;\n"</code><code>;</code>

<code>$mem-&gt;</code><code>set</code><code>(</code><code>'hellokey'</code><code>, </code><code>'Hello World'</code><code>, </code><code>0</code><code>, </code><code>600</code><code>) or die(</code><code>"Failed to save data at the memcached server"</code><code>);</code>

<code>echo </code><code>"Store data in the cache (data will expire in 600 seconds)&lt;br/&gt;\n"</code><code>;</code>

<code>$get_result = $mem-&gt;</code><code>get</code><code>(</code><code>'hellokey'</code><code>);</code>

<code>echo </code><code>"$get_result is from memcached server."</code><code>;       </code>

   可以看到測試成功

   4.安裝memcache的圖形化界面

<code>[root@node1 ~]# cd /usr/local/nginx/html/</code>

<code>[root@node1 html]# wget http:</code><code>//www.junopen.com/memadmin/memadmin-1.0.12.tar.gz</code>

<code>[root@node1 html]# tar xf memadmin-</code><code>1.0</code><code>.</code><code>12</code><code>.tar.gz</code>

<code>[root@node1 html]# cd memadmin</code>

   使用者名和密碼都為admin

    有沒有感到這是一個很贊的軟體

   5.壓力測試  

<code>Time taken </code><code>for</code> <code>tests:   </code><code>1.965</code> <code>seconds</code>

<code>Failed requests:        </code><code>0</code>

<code>Total transferred:      </code><code>276000</code> <code>bytes</code>

<code>HTML transferred:       </code><code>129000</code> <code>bytes</code>

<code>Requests per second:    </code><code>508.81</code> <code>[#/sec] (mean)</code>

<code>Time per request:       </code><code>196.536</code> <code>[ms] (mean)</code>

<code>Time per request:       </code><code>1.965</code> <code>[ms] (mean, across all concurrent requests)</code>

<code>Transfer rate:          </code><code>137.14</code> <code>[Kbytes/sec] received</code>

六、nginx和memcached集合

   nginx的資料也可以換成在memcache中,配置如下

<code>server {</code>

<code>        </code><code>listen       </code><code>80</code><code>;</code>

<code>        </code><code>server_name  www.wangfeng7399.com;</code>

<code>        </code><code>#charset koi8-r;</code>

<code>        </code><code>#access_log  logs/host.access.log  main;</code>

<code>        </code><code>location / {</code>

<code>                </code><code>set</code> <code>$memcached_key $uri;</code>

<code>                </code><code>memcached_pass     </code><code>192.168</code><code>.</code><code>1.202</code><code>:</code><code>11211</code><code>;</code>

<code>                </code><code>default_type       text/html;</code>

<code>                </code><code>error_page         </code><code>404</code> <code>@fallback;</code>

<code>        </code><code>}</code>

<code>        </code><code>location @fallback {</code>

<code>                </code><code>proxy_pass http:</code><code>//192.168.1.201;</code>

<code></code>

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