一、環境介紹
功用
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><?php</code>
<code> </code><code>phpinfo();</code>
<code>?></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 <ip_addr>:指定程序監聽的位址
-d:以守護模式運作
-u <username>:以指定的使用者運作menmcached程序
-m <num>:用于緩存資料的最大記憶體空間,機關為MB,預設為64MB
-c <num>:最大支援的并發連接配接數,預設為1024
-p <num>: 指定監聽的TCP端口,預設為11211
-U <num>:指定監聽的UDP端口,預設為11211,0表示關閉UDP端口
-t <threads>:用于處理入站請求的最大線程數,僅在mencached編譯時開啟了支援線程才有效
-f <num>:設定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 && 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->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->getVersion();</code>
<code>echo </code><code>"Server's version: "</code><code>.$version.</code><code>"<br/>\n"</code><code>;</code>
<code>$mem-></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)<br/>\n"</code><code>;</code>
<code>$get_result = $mem-></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,如需轉載請自行聯系原作者