架構 Varnish+nginx+php(FastCGI)+MYSQL5+MenCache+MenCachedb (三)

來源:互聯網
上載者:User

標籤:style   blog   http   io   ar   os   使用   for   sp   

四、最佳化Linux核心參數

vi /etc/sysctl.conf

  在末尾增加以下內容:

引用
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 5000    65000


  使配置立即生效:

/sbin/sysctl -p

-----------------------------------------------------------------------------------------------------------------------

附:最近經常搞lighttpd+fastcgi+php或者nginx+fastcgi+php,時常被php的“No input file specified.”給鬱悶了,把我遇到的情況說一下

首先php.ini的配置中
cgi.fix_pathinfo=1
doc_root=

doc_root曾經被我設定過一個路徑,結果php老提示“No input file specified.”,只有一個虛擬機器好使。改掉後就正常了。

nginx中的配置有些麻煩

fastcgi_pass 127.0.0.1:1234;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;

每個虛機要根據自己不通的虛機設定不能的目錄,要保證這個路徑正確。
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;不能在fastcgi_pass 127.0.0.1:1234;的前面。

記得修改了php.ini要重啟fastcgi服務。

其實都是因為粗心造成的,本來很簡單,寫出來也給自己提個醒

 

---------------------------------------------------------------------------------------------------------------------------

四.)安裝Varnish

     今天寫的這篇關於Varnish的文章,已經是一篇可以完全替代Squid做網站緩衝加速器的詳細解決方案了。網上關於Varnish的資料很少,中文資料更是微乎其微,希望本文能夠吸引更多的人研究、使用Varnish。

  在我看來,使用Varnish代替Squid的理由有三點:
  1、Varnish採用了“Visual Page Cache”技術,在記憶體的利用上,Varnish比Squid具有優勢,它避免了Squid頻繁在記憶體、磁碟中分頁檔,效能要比Squid高。
  2、Varnish的穩定性還不錯,順便說一句,Varnish的效能的發揮關鍵在於Varnish配置文檔的最佳化.
  3、通過Varnish管理連接埠,可以使用Regex快速、批量地清除部分緩衝,這一點是Squid不能具備的
    4. 還有一點,應該算是Varnish的缺點了吧,就是Varnish的緩衝基本上在記憶體中,如果Varnish進程停止再啟動,Varnish就會重新訪問後端Web伺服器,再一次進行緩衝.雖然Squid效能沒有Varnish高,但它停止、重啟的時候,可以直接先從磁碟讀取快取資料。

    varnish是一款高效能的開源HTTP加速器,挪威最大的線上報紙 Verdens Gang (http://www.vg.no) 使用3台Varnish代替了原來的12台squid,效能比以前更好。

    varnish的作者Poul-Henning Kamp是FreeBSD的核心開發人員之一,他認為現在的電腦比起1975年已經複雜許多。在1975年時,儲存媒介只有兩種:記憶體與硬碟。但現在電腦系統的記憶體除了主存外,還包括了cpu內的L1、L2,甚至有L3快取。硬碟上也有自己的快取裝置,因此squid cache自行處理物件替換的架構不可能得知這些情況而做到最佳化,但作業系統可以得知這些情況,所以這部份的工作應該交給作業系統處理,這就是 Varnish cache設計架構.
   
------------------------------------------------------------------------------------------------------------------

1.編譯安裝varnish:

下載源碼包連結:  wget http://nchc.dl.sourceforge.net/sourceforge/varnish/varnish-1.1.1.tar.gz

附1:Varnish官方網站:http://www.varnish-cache.org/

[[email protected]]#wget http://blog.s135.com/soft/linux/varnish/varnish-1.1.2.tar.gz
[[email protected]]#tar zxvf varnish-1.1.2.tar.gz
[[email protected]]#cd varnish-1.1.2
[[email protected]]#./configure --prefix=/usr/local/varnish --enable-debugging-symbols --enable-developer-warnings --enable-dependency-tracking
[[email protected]]#make && make install

2.建立www使用者和組,以及Varnish快取檔案存放目錄(/var/vcache):

[[email protected]]#/usr/sbin/groupadd www
[[email protected]]#/usr/sbin/useradd -g www www
[[email protected]]#mkdir -p  /usr/local/varnish/var/varnish/
[[email protected]]#chmod +w  /usr/local/varnish/var/varnish/
[[email protected]]#chown -R www:www  /usr/local/varnish/var/varnish/

3.建立Varnish日誌目錄(/usr/local/varnish/logs):

[[email protected]]#mkdir -p /usr/local/varnish/logs
[[email protected]]#chmod +w /usr/local/varnish/logs
[[email protected]]#chown -R www:www /usr/local/varnish/logs
[[email protected]]#touch /usr/local/varnish/logs/varnish.log

4.建立Varnish設定檔:

[[email protected]]#vi /usr/local/varnish/vcl.conf

backend myblogserver {
       set backend.host = "192.168.0.1";
       set backend.port = "80";
}

acl purge {
       "localhost";
       "127.0.0.1";
       "192.168.0.0"/24;
       "192.168.1.0"/24;
}

sub vcl_recv {
       if (req.request == "PURGE") {
               if (!client.ip ~ purge) {
                       error 405 "Not allowed.";
               }
               lookup;
       }

       if (req.http.host ~ "^www.test.com") {
               set req.backend = myblogserver;
               if (req.request != "GET" && req.request != "HEAD") {
                       pipe;
               }
               else {
                       lookup;
               }
       }
       else {
               error 404 "Zhang Quan Sheng Cache Server";
               lookup;
       }
}

sub vcl_hit {
       if (req.request == "PURGE") {
               set obj.ttl = 0s;
               error 200 "Purged.";
       }
}

sub vcl_miss {
       if (req.request == "PURGE") {
               error 404 "Not in cache.";
       }
}

sub vcl_fetch {
       if (req.request == "GET" && req.url ~ "\.(txt|js)$") {
               set obj.ttl = 3600s;
       }
       else {
               set obj.ttl = 30d;
       }
}

  這裡,我對這段設定檔解釋一下:
  (1)、Varnish通過反向 Proxy請求後端IP為192.168.0.1,連接埠為80的web伺服器;
  (2)、Varnish允許localhost、127.0.0.1、192.168.0.***三個來源IP通過PURGE方法清除緩衝;
  (3)、Varnish對網域名稱為www.test.com的請求進行處理,非www.test.com網域名稱的請求則返回"Zhang Quan Sheng Cache Server";
  (4)、Varnish對HTTP協議中的GET、HEAD請求進行緩衝,對POST請求透過,讓其直接存取後端Web伺服器。之所以這樣配置,是因為POST請求一般是發送資料給伺服器的,需要伺服器接收、處理,所以不緩衝;
  (5)、Varnish對以.txt和.js結尾的URL緩衝時間設定1小時,對其他的URL緩衝時間設定為30天。

-------------------------------------------------------------------------------------------------------------------------

5、啟動Varnish

ulimit -SHn 51200l
/usr/local/varnish/sbin/varnishd -n /var/vcache -f /usr/local/varnish/vcl.conf -a 0.0.0.0:80 -s file, /usr/local/varnish/var/varnish/varnish_cache.data,1G -g www -u www -w 30000,51200,10 -T 127.0.0.1:3500 -p client_http11=on

6.啟動varnishncsa用來將Varnish訪問日誌寫入記錄檔:

/usr/local/varnish/bin/varnishncsa -n /usr/local/varnish/var/varnish/ -w /usr/local/varnish/var/varnish/varnish.log &

7.配置開機自動啟動Varnish

vi /etc/rc.local

ulimit -SHn 51200l
/usr/local/varnish/sbin/varnishd -n /var/vcache -f /usr/local/varnish/vcl.conf -a 0.0.0.0:80 -s file, /usr/local/varnish/var/varnish/varnish_cache.data,1G -g www -u www -w 30000,51200,10 -T 127.0.0.1:3500 -p client_http11=on
/usr/local/varnish/bin/varnishncsa -n /usr/local/varnish/var/varnish/ -w /usr/local/varnish/var/varnish/varnish.log &

8.最佳化Linux核心參數

vi /etc/sysctl.conf
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 5000    65000

---------------------------------------------------------------------------------------------------------------------------

再看看如何管理Varnish:
1.查看Varnish伺服器串連數與命中率:

/usr/local/varnish/bin/varnishstat

2.通過Varnish管理連接埠進行管理:
 用help看看可以使用哪些Varnish命令:

/usr/local/varnish/bin/varnishadm -T 127.0.0.1:3500 help

Available commands:
ping [timestamp]
status
start
stop
stats
vcl.load
vcl.inline
vcl.use
vcl.discard
vcl.list
vcl.show
param.show [-l] []
param.set
help [command]
url.purge
dump.pool

3、通過Varnish管理連接埠,使用Regex批量清除緩衝:
  (1)、例:清除類似http://www.k18.com/a/quansheng.html的URL地址):

/usr/local/varnish/bin/varnishadm -T 127.0.0.1:3500 url.purge /a/

  (2)、例:清除類似http://blog.s135.com/tech的URL地址:

/usr/local/varnish/bin/varnishadm -T 127.0.0.1:3500 url.purge w*$

  (3)、例:清除所有緩衝:

/usr/local/varnish/bin/varnishadm -T 127.0.0.1:3500 url.purge *$

 4、一個清除Squid緩衝的PHP函數(清除Varnish緩衝同樣可以使用該函數,無需作任何修改,十分方便):

<?php  
function purge($ip, $url)  
{  
    $errstr = ‘‘;  
    $errno = ‘‘;  
    $fp = fsockopen ($ip, 80, $errno, $errstr, 2);  
    if (!$fp)  
    {  
         return false;  
    }  
    else 
    {  
        $out = "PURGE $url HTTP/1.1\r\n";  
        $out .= "Host:blog.s135.com\r\n";  
        $out .= "Connection: close\r\n\r\n";  
        fputs ($fp, $out);  
        $out = fgets($fp , 4096);  
        fclose ($fp);  
        return true;  
    }  
}  
 
purge("192.168.0.4", "/index.php");  
?> 

附2:2007年12月10日,我寫了一個每天0點運行,按天切割Varnish日誌,產生一個壓縮檔,同時刪除上個月舊日誌的指令碼(/usr/local/varnish/var/varnish/cutlog.sh):
 /usr/local/varnish/var/varnish/cutlog.sh檔案內容如下:

#!/bin/sh
# This file run at 00:00
date=$(date -d "yesterday" +"%Y-%m-%d")
pkill -9 varnishncsa
mv /usr/local/varnish/var/varnish/youvideo.log /usr/local/varnish/var/varnish/${date}.log
/usr/local/varnish/bin/varnishncsa -n /usr/local/varnish/var/varnish/ -w /usr/local/varnish/var/varnish/youvideo.log &
mkdir -p /usr/local/varnish/var/varnish/youvideo/
gzip -c /usr/local/varnish/var/varnish/${date}.log > /usr/local/varnish/var/varnish/${date}.log.gz
rm -f /usr/local/varnish/var/varnish/${date}.log
rm -f /usr/local/varnish/var/varnish/youvideo/$(date -d "-1 month" +"%Y-%m*").log.gz

  設定在每天00:00定時執行:
  
/usr/bin/crontab -e
  或者  
vi /var/spool/cron/root
  輸入以下內容:
引用
0 0 * * * /bin/sh /usr/local/varnish/var/varnish/cutlog.sh

--------------------------------------------------------------------------------------------------------------------------

附3.TCP串連數Varnish要比Squid少,因為Varnish的TCP串連釋放要比Squid快。

但同時處理的請求數Varnish要比Squid高一些,一台Varnish、另一台Squid,分給它們的串連
數相同,Varnish即時處理的請求數比Squid多1倍,平均處理的請求數也比Squid多100餘個:

/usr/local/webserver/varnish/bin/varnishstat
-----------------------------------------------------------
   70979868       580.97       356.55 Client requests received
   70897998       580.97       356.14 Cache hits

/usr/local/squid/bin/squidclient -p 80 mgr:5min
-----------------------------------------------------------
client_http.requests = 248.425264/sec
client_http.hits = 245.135282/sec


如果正常的話,vcache這個目錄裡只有一個大小為1G的檔案:varnish_cache.data

---------------------------------------------------------------------------------------------------------------------------

 

五.)Memcachedb

Memcachedb:編譯以及安裝     

 
說明: memcachedb跟memcache一樣,網路socket資料處理依賴於libevent,所以,在安裝之前需要下載三個安裝包,即libevent、Berkeley Db以及memcachedb。

Libevent 下載頁面:http://monkey.org/~provos/libevent/ ,下載最新穩定版本就行。

Berkeley Db下載頁面:http://www.oracle.com/technology/software/products/berkeley-db/index.html 需要安裝4.6版本

memcachedb下載頁面:http://code.google.com/p/memcachedb/  下載最新版本 0.1.0版本

按照順序安裝,Libevent和Berkeley Db按照常規安裝即可,這裡以Linux 環境為標準。

[======Libevent=====]

[[email protected]]#tar -zxvf libevent-1.3e.tar.gz
[[email protected]]#cd libevent-1.3e
[[email protected]]#./configure
[[email protected]]#make && make install

[======Berkeley Db=====]

[[email protected]]#tar -zxvf db-4.6.19.tar.gz

#需要進入特定作業系統編譯環境,更常規軟體的編譯有些區別

[[email protected]]#cd db-4.6.19/build_unix/

#然後才能夠開始編譯

[[email protected]]#../dist/configure

[[email protected]]#make && make install

#如果沒有指定特殊安裝路徑,編譯完成,需要將Berkeley Db運行庫的路徑添加到系統配置裡面

[[email protected]]#echo "/usr/local/BerkeleyDB.4.6/lib/" >> /etc/ld.so.conf

#重載系統Ld運行庫

[[email protected]]#ldconfig

[======Memcachedb=====]

[[email protected]]#tar -zxvf memcachedb-0.1.0.tar.gz
[[email protected]]#cd memcachedb-0.1.0

#如果您要儲存的內容的索引值的長度和單筆內容的長度有變化,您需要更改一個檔案 memcachedb.h

[[email protected]]#vi memcachedb.h

////////////////////////////////////////////////////////////

#define END_LEN 32               ----> 這是是 Key+Value 的最大長度
#define END_LEN_STR "31"     ----> 這是是 key 的最大長度

 /////////////////////////////////////////////////////////

#預設key索引值只預留了31個位元組的長度,單筆資料最長是32個位元組數。

#例如您如果需要用這個玩藝來儲存常值內容資料,假設您的索引值是一個32個位元組的md5,單筆資料允許最長10K,那您可以設定

////////////////////////////////////////////////////////////

#define END_LEN 102400             ----> 這是是 Key+Value 的最大長度
#define END_LEN_STR "32"           ----> 這是是key的最大長度

 /////////////////////////////////////////////////////////

#修改完之後,直接make就行

[[email protected]]#make

#編譯完之後,將產生可執行memcachedb拷貝到 /usr/sbin/

[[email protected]]#cp -f memcachedb  /usr/sbin/

#啟動 memcachedb

#第一種,讀寫合并模式,即不做輔拷貝,即讀又寫,不做冗餘備份

[[email protected]]#memcachedb -p21211 -d -r -u root -H  /data/mdb_11211  -N

#第二種,讀寫分離/備份模式

#主伺服器 192.168.0.1 讀寫監聽 11211 ,同步通過31211的連接埠完成,不佔用繁忙的主服務連接埠

[[email protected]]#memcachedb -p21211 -d -r -u root -H  /data/mdb_11211_m -N -R 127.0.0.1:31211 -M

# 輔伺服器 192.168.0.2  唯讀監聽 21212,從192.168.0.1 的 31211連接埠同步資料,同時再開一個31212連接埠對外提供資料同步服務

[[email protected]]#memcachedb -p21212 -d -r -u root -H  /data/mdb_11211_from_16801_s -O 192.168.0.1:31211 -R 192.168.0.2:31212 -S

------------------------------------------------------------------------------------------------------------------------

 

http://blog.sina.com.cn/s/blog_4a8d06ce010080es.html

架構 Varnish+nginx+php(FastCGI)+MYSQL5+MenCache+MenCachedb (三)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.