標籤: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 (三)