LNMMP之nginx+“php-fpm”及memcached

LNMMP之nginx+“php-fpm”及memcached


說明:nginx不能像apache一樣動態的裝卸載php模塊,所以只能使用fastcgi協議跟後端php建立連接。Nginx提供靜態頁面,並將動態頁面提交給後端php-fpm服務器處理,

  爲了應付更大的訪問量對服務器造成的壓力,方案引進了memcached做爲緩存服務器。

Memcached是一種開發工具,作爲一個服務器啓動使用。要想使用它需要程序員在php代碼中調用使用。需要結合使用memcachephp擴展來實現調用這一功能。

wKioL1NbqiTjOtw9AAF4nmmDP-k487.jpg

Memcached簡介:

Memcached是一種免費、開源、高性能、分佈式內存對象緩存系統,用於加速動態web應用程序,減輕數據庫負載。可應用各種需要緩存的場景,其主要目的是通過降低對Database的訪問來加速web應用程序。它是一個基於內存的“鍵值對”存儲,用於存儲數據庫調用、API調用或頁面引用結果的直接數據,如字符串、對象等。
Memcached簡單而強大。它的簡單的設計促進快速部署,易於開發,解決了大數據緩存面臨許多問題。是一款比較常用的開發工具。

Memcached工作機制

1. 簡單key/value存儲:服務器不關心數據本身的意義及結構,只要是可序列化數據即可。、

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

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

4. O(1)的執行效率

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

官網下載地址:http://www.memcached.org/


安裝:

l Nginx源碼安裝:

編譯安裝nginx需要事先需要安裝開發包組"Development Tools"和 "Development Libraries"。同時,還需要專門安裝pcre-devel包:

首先添加用戶nginx,實現以之運行nginx服務進程:

# groupadd -r nginx
# useradd -r -g nginx nginx
接着開始編譯和安裝:
# ./configure \
  --prefix=/usr/local/nginx \
  --sbin-path=/usr/local/nginx/sbin/nginx \
  --conf-path=/etc/nginx/nginx.conf \
  --error-log-path=/var/log/nginx/error.log \
  --http-log-path=/var/log/nginx/access.log \
  --pid-path=/var/run/nginx/nginx.pid  \
  --lock-path=/var/lock/nginx.lock \
  --user=nginx \
  --group=nginx \
  --with-http_ssl_module \
  --with-http_flv_module \
  --with-http_stub_status_module \
  --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/ \
  --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
  --http-scgi-temp-path=/var/tmp/nginx/scgi \
  --with-pcre
# make && make install

l 工作於fastcgi模式的php的安裝

# yum -y groupinstall "X Software Development"
如果想讓編譯的php支持mcrypt、mhash擴展和libevent,此處還需要如下幾個rpm包並安裝之:
libmcrypt-2.5.8-4.el5.centos.i386.rpm
libmcrypt-devel-2.5.8-4.el5.centos.i386.rpm
mhash-0.9.9-1.el5.centos.i386.rpm
mhash-devel-0.9.9-1.el5.centos.i386.rpm
mcrypt-2.6.8-1.el5.i386.rpm
# tar xf php-5.4.4.tar.bz2
# cd php-5.4.4
#  ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl --enable-fpm --enable-sockets --enable-sysvshm  --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib-dir --with-libxml-dir=/usr --enable-xml  --with-mhash --with-mcrypt  --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --with-curl



   實驗步驟:

       一、配置nginx

       1、配置nginx提供虛擬主機


server {
        listen       80;
        server_name  www.a.com;
#       root /www/a.com;
        location ~\.php$ {
            fastcgi_pass   172.16.20.61:9000;
            root /web;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi_params;
            fastcgi_cache fcgi;
            fastcgi_cache_valid 200 10m;
            fastcgi_cache_valid 301 302 3m;
            fastcgi_cache_valid any 1m;
        }
        location ~*/(status|ping){-----------可以查看php—fpm狀態信息
#               root /www/a.com;
                fastcgi_pass 172.16.20.61:9000;
                fastcgi_param SCRIPT_FILENAME  $fastcgi_script_name;
                include fastcgi_params;
        }

       2、測試nginx和php的結合是否成功運行

後端php監聽端口已開啓

[root@My1 ~]# ss -tunlp
tcp   LISTEN     0      128       172.16.20.61:9000                *:*      users:(("php-fpm",2148,7),("php-fpm",2149,0),("php-fpm",2150,0))

wKioL1NbqSHC5Qj7AAU9BFTHmXg116.jpg



   二、memcached服務器的配置

       1、安裝啓動memcached

[root@My2 ~]# yum install memcached
   [root@My1 ~]# memcached -u memcached
[root@My1 ~]# ss -tunlp
udp    UNCONN     0      0                                                        :::11211                                                   :::*      users:(("memcached",2428,29))
tcp    LISTEN     0      128                                                      :::11211                                                   :::*      users:(("memcached",2428,27))
tcp    LISTEN     0      128                                                       *:11211                                                    *:*      users:(("memcached",2428,26))
tcp    LISTEN     0      128                                                      :::111                                                     :::*    


       2、查看memcached詳細信息

[root@My2 ~]# memcached -u memcached -vv
3、slab class   1: chunk size        96 perslab   10922
4、slab class   2: chunk size       120 perslab    8738
5、slab class   3: chunk size       152 perslab    6898
6、slab class   4: chunk size       192 perslab    5461
7、slab class   5: chunk size       240 perslab    4369
8、slab class   6: chunk size       304 perslab    3449
9、slab class   7: chunk size       384 perslab    2730
10、slab class   8: chunk size       480 perslab    2184
11、slab class   9: chunk size       600 perslab    1747

       3、使用telnet連接查看memcached信息

   Memcached提供一組基本命令用於基於命令行調用其服務或查看服務器狀態等。

[root@My2 ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Stats------------------鍵入stats查看詳情
STAT pid 2480
STAT uptime 46
STAT time 1398506695
STAT version 1.4.4
STAT pointer_size 64
STAT rusage_user 0.003999
STAT rusage_system 0.000000
STAT curr_connections 10
STAT total_connections 12
add xuxu 0 50 12
hello xuxuxu
STORED
get xuxu
VALUE xuxu 0 12
hello xuxuxu
END

       三、安裝memcachephp擴展,讓php連接測試memcached

程序員在開發的時候,自行調用了memcached的API,memcached的功能才能生效,而且要想使用還需要安裝php和memcached 的擴展。可以去php官網下載memcache擴展包

在php所在的主機安裝

[root@My1 ~]# cd memcache-2.2.7
[root@My1 memcache-2.2.7]# /usr/local/php/bin/ph
phar        phar.phar   php         php-cgi     php-config  phpize
[root@My1 memcache-2.2.7]# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version:         20100412
Zend Module Api No:      20100525
Zend Extension Api No:   220100525
[root@My1 memcache-2.2.7]# ./configure --with-php-config=/usr/local/php/bin/php-config --enable-memcache
[root@My1 memcache-2.2.7]# make && make install

安裝完成的時候會生成一個memcache.so模塊的路徑,記得把這個路徑記下來寫到php的配置文件中。

編輯/usr/local/php/lib/php.ini,在“動態模塊”相關的位置添加如下一行來載入memcache擴展:

extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/memcache.so

然後就可以寫一個測試頁面,來測試php是否能與後端緩存服務器聯繫了。

[root@My1 php]# vim /web/testmem.php
<?php
$mem = new Memcache;
$mem->connect("172.16.20.62", 11211)  or die("Could not connect");
寫上你的緩存服務器的ip地址。
$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.";        
?>

Ok.打開瀏覽器測試吧。

wKiom1NbqcnyBN4qAAPJMR2Ai94498.jpg

刷新可見此值變大

wKiom1NbrDjC9PQ2AAD3IpYm6cY915.jpg

 四、好用的查看memcached服務器工作情況的工具的安裝使用

   1.直接解壓各種memcache管理類工具到頁面目錄下,修改連接的緩存服務器ip即可

wKioL1Nbrpajcs0GAAHws_C8XFA697.jpg

wKiom1Nbr7CQ2yicAATO5GOc6ss846.jpg

       2、好用的中文節目緩存服務器查看工具admin-master


wKiom1NbwaCQDnfKAATCaqm5hHQ386.jpg


    統計信息

參數描述
pid8337memcache服務器進程ID
uptime6536服務器已運行秒數
time1398023613服務器當前Unix時間戳
version1.4.4memcache版本
pointer_size64操作系統指針大小
rusage_user0.070989進程累計用戶時間
rusage_system0.378942進程累計系統時間
curr_connections11當前連接數量
total_connections164Memcached運行以來連接總數
connection_structures12Memcached分配的連接結構數量
cmd_get60get命令請求次數
cmd_set59set命令請求次數
cmd_flush3flush命令請求次數
get_hits59get命令命中次數
get_misses1get命令未命中次數
delete_misses0delete命令未命中次數
delete_hits0delete命令命中次數
incr_misses0incr命令未命中次數
incr_hits0incr命令命中次數
decr_misses0decr命令未命中次數
decr_hits0decr命令命中次數
cas_misses0cas命令未命中次數
cas_hits0cas命令命中次數
cas_badval0使用擦拭次數
auth_cmds0認證命令處理的次數
auth_errors0認證失敗數目
bytes_read4337讀取總字節數
bytes_written74120發送總字節數
limit_maxbytes67108864分配的內存總大小(字節)
accepting_conns1接受新的連接
listen_disabled_num0失效的監聽數
threads4當前線程數
conn_yields0連接操作主動放棄數目
bytes0當前存儲佔用的字節數
curr_items0當前存儲的數據總數
total_items59啓動以來存儲的數據總數
evictions0LRU釋放的對象數目
      設置信息


參數描述
maxbytes67108864最大字節數限制(0無限制)
maxconns1024允許最大連接數
tcpport11211TCP端口
udpport11211UDP端口
interNULLIP地址
verbosity0日誌(0=none,1=som,2=lots)
oldest3397最老對象過期時間
evictionsonLRU可用(on/off)
domain_socketNULLSocketpath
umask700創建Socket的掩碼
growth_factor1.25增長因子
chunk_size48chunk大小(key+value+flags)
num_threads4線程數(默認4,可通過-t參數設置)
stat_key_prefix:stats分隔符
detail_enabledno顯示stats細節信息(yes/no)
reqs_per_event20最大IO吞吐量(每event)
cas_enabledyes是否啓用CAS(yes/no,-C禁用)
tcp_backlog1024TCP監控日誌
binding_protocolauto-negotiate綁定協議
auth_enabled_saslno是否啓用SASL驗證(yes/no)
item_size_max1048576數據最大尺寸



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