小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

關(guān)于大型論壇系統(tǒng)環(huán)境搭建(20萬日IP負(fù)載平衡實(shí)戰(zhàn))–Nginx Apache2 PHP MySQL - Nginx

 ShangShujie 2010-04-26

作者:豬頭
版權(quán)沒有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)勿注明出處
(本文只針對(duì)Discuz論壇系統(tǒng)討論,由于軟件包更新速度比較快,你看本貼的時(shí)候可能已經(jīng)是使用新版本的軟件包了,安裝方法可能不一致,詳細(xì)請(qǐng)查看軟件 包的README文件)

測(cè)試環(huán)境:理想論壇(55188).
理想論壇為國(guó)內(nèi)人氣最旺的股票論壇,注冊(cè)會(huì)員已超過100萬,并以每月60000人的速度穩(wěn)定遞增,每日頁(yè)面訪問量超過200萬,并保持穩(wěn)定增長(zhǎng)的趨 勢(shì),60分鐘在線平均約2萬多人,最高記錄3萬3千多。 目前主題超過30萬,帖子接近1千萬,數(shù)據(jù)庫(kù)大小5.8GB,附件總大小大約150GB
之前理想論壇有三臺(tái)服務(wù)器,兩臺(tái)WEB服務(wù)器以及一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器,訪問已經(jīng)漸漸出現(xiàn)瓶頸,在豬頭的建議下,站長(zhǎng)決定增加一臺(tái)服務(wù)器放數(shù)據(jù)庫(kù),另外三臺(tái)做 WEB,并且對(duì)原有的服務(wù)器的操作系統(tǒng)進(jìn)行升級(jí)。
硬件具體情況
MySQL服務(wù)器: DualXeon 5335/8GB內(nèi)存/73G SAS硬盤(RAID0+1)/CentOS5.1-x86_64/MySQL5
三臺(tái)WEB服務(wù)器如下:
N1. Dual Xeon 3.0 2GB 內(nèi)存
N1. Dual Xeon 3.0 4GB 內(nèi)存
N1. Dual Xeon 3.0(雙核) 4G內(nèi)存
另外有三塊300G的SCSI硬盤準(zhǔn)備做RAID5,用來存放附件,四臺(tái)機(jī)器通過內(nèi)網(wǎng)連接

豬頭考慮過的解決方案如下:
1. ZEUS + PHP5 + eAccelerator
2. squid + Apache2 + PHP + eAccelerator
3. nginx + PHP(fastcgi) + eAccelerator
4. nginx + Apache2 + PHP + eAccelerator

第一個(gè)方案,屬于比較完美的,而且很穩(wěn)定,但是最大的問題是ZEUS是收費(fèi)軟件,用盜版總會(huì)受良心責(zé)備的,所以暫時(shí)押后做候補(bǔ)方案
第二個(gè)方案,squid轉(zhuǎn)發(fā)請(qǐng)求給Apache2,很多網(wǎng)站都采用這種方式,而且效率也非常高,豬頭也測(cè)試了一下,但是問題非常嚴(yán)重,因?yàn)閟quid是把 文件緩存起來的,所以每一個(gè)訪問過的文件,squid都要把它打開,理想論壇擁有150G的附件,而且訪問量巨大,這種情況下只有打開squid,機(jī)器很 快就會(huì)因?yàn)榇蜷_文件過多而拒絕響應(yīng)任何請(qǐng)求了,看來也不適合,只適合緩存文件只有幾百M(fèi)以內(nèi)的網(wǎng)站.
第三個(gè)方案,豬頭對(duì)第三個(gè)方案的測(cè)試結(jié)果是訪問量大的時(shí)候,PHP經(jīng)常會(huì)出現(xiàn)bad gateway,看來通過TCP連接Fastcgi執(zhí)行PHP的方法不夠穩(wěn)定,豬頭也測(cè)試了通過Unix Socket連接執(zhí)行PHP,同樣還是不穩(wěn)定.

對(duì)比之下,豬頭目前使用了第四種解決方案.

Apache2的安裝。
(由于服務(wù)器采用FreeBSD7,所以大部分軟件將會(huì)通過ports安裝)
由于Apache2只需要處理PHP請(qǐng)求,所以其他模塊基本上都不需要,所以不要選擇安裝其他模塊,即使rewrite也不需要,因?yàn)閞ewrite將會(huì) 在nginx上面實(shí)現(xiàn),如果熟悉,還可以修改Makefile刪掉不需要的部分,這樣經(jīng)過優(yōu)化之后,apache將會(huì)以最穩(wěn)定最高效的方式處理PHP請(qǐng)求

cd /usr/ports/www/apache20
make install clean

修改httpd.conf(這里僅列出要修改/增加的部分)
vi /usr/local/etc/apache2/httpd.conf
把KeepAlive On修改為KeepAlive Off,在下面添加
ServerLimit 2048
MaxClients增加到512
Listen 127.0.0.1:81 #由于httpd服務(wù)器不需要對(duì)外開放,僅僅處理nginx轉(zhuǎn)發(fā)過來的PHP請(qǐng)求,所以僅僅需要監(jiān)聽本地的端口.
另外增加對(duì)PHP的支持
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
至于添加虛擬主機(jī)的部分將不再羅嗦,注意虛擬主機(jī)也監(jiān)聽本地81端口就可以了

PHP5的安裝(GD庫(kù)等模塊請(qǐng)?zhí)崆把b好)
cd /usr/ports/lang/php5
修改一下Makefile,把需要的東西加上去吧
本來應(yīng)該有這樣一段的

CONFIGURE_ARGS= \
–with-layout=GNU \
–with-config-file-scan-dir=${PREFIX}/etc/php \
–disable-all \
–enable-libxml \
–with-libxml-dir=${LOCALBASE} \
–enable-reflection \
–program-prefix=”"

我們要把它修改成

CONFIGURE_ARGS= \
–with-layout=GNU \
–with-config-file-scan-dir=${PREFIX}/etc/php \
–disable-all \
–enable-libxml \
–with-libxml-dir=${LOCALBASE} \
–enable-reflection \
–program-prefix=”" \
–with-config-file-path=/etc –enable-mbstring –enable-ftp –with-gd –with-jpeg-dir=/usr/local –with-png-dir=/usr/local –enable-magic-quotes –with-mysql=/usr/local –with-pear –enable-sockets –with-ttf –with-freetype-dir=/usr/local –enable-gd-native-ttf –with-zlib –enable-sysvsem –enable-sysvshm –with-libxml-dir=/usr/local –with-pcre-regex –enable-xml

make install clean
cp work/php-5.2.5/php.ini-dist /etc/php.ini

安裝eAccelerator
cd /usr/ports/www/eaccelerator
make install clean
把以下部分添加到php.ini尾端:

extension_dir=”/usr/local/lib/php/20060613/”
extension=”eaccelerator.so”
eaccelerator.cache_dir=”/tmp/eaccelerator”
eaccelerator.shm_size=”64″
eaccelerator.enable=”1″
eaccelerator.optimizer=”1″
eaccelerator.check_mtime=”1″
eaccelerator.debug=”0″
eaccelerator.filter=”"
eaccelerator.shm_max=”0″
eaccelerator.shm_ttl=”60″
eaccelerator.shm_prune_period=”60″
eaccelerator.shm_only=”0″
eaccelerator.compress=”1″
eaccelerator.compress_level=”9″
eaccelerator.keys=”shm_and_disk”
eaccelerator.sessions=”shm_and_disk”
eaccelerator.content=”shm_and_disk”

建立緩存目錄以及修改權(quán)限

mkdir /tmp/eaccelerator
chmod 777 /tmp/eaccelerator
chown nobody:nobody /tmp/eaccelerator

nginx的安裝以及配置

cd /usr/ports/www/nginx
make install

有幾個(gè)module是我們需要的,要選上

HTTP module
http_addition module
http_rewrite module
http_realip module
http_stub_status module

其他的看自己需要了
修改配置文件
vi /usr/local/etc/nginx/nginx.conf

user nobody nobody;
worker_processes 4;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid /var/log/nginx.pid;
events {
worker_connections 10240;
}
http {
include mime.types;
default_type application/octet-stream;
limit_zone one $binary_remote_addr 10m;
#log_format main ‘$remote_addr – $remote_user [$time_local] $request ‘
# ‘”$status” $body_bytes_sent “$http_referer” ‘
# ‘”$http_user_agent” “$http_x_forwarded_for”‘;
sendfile off;
tcp_nopush off;
#keepalive_timeout 0;
keepalive_timeout 10;
gzip off;

server {
listen 80;
server_name www.55188.net www. www1. www2. 55188.net www.55188.cn 55188.cn bbs.55188.net bbs. bbs.55188.cn;
index index.html index.htm index.php;
root /home/www;
access_log /dev/null combined;
limit_conn one 5;#限制一個(gè)IP并發(fā)連接數(shù)為五個(gè)
error_page 404 /404.html;
error_page 403 /403.html;
location /status {
stub_status on;
access_log off;
auth_basic “NginxStatus”;
auth_basic_user_file conf/htpasswd;
}

#在根目錄使用Discuz6.0 rewrite規(guī)則,如果你的論壇在二級(jí)目錄下面,則要相應(yīng)修改location
location / {
rewrite ^/archiver/((fid|tid)-[\w\-]+\.html)$ /archiver/index.php?$1 last;
rewrite ^/forum-([0-9]+)-([0-9]+)\.html$ /forumdisplay.php?fid=$1&page=$2 last;
rewrite ^/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /viewthread.php?tid=$1&extra=page\%3D$3&page=$2 last;
rewrite ^/space-(username|uid)-(.+)\.html$ /space.php?$1=$2 last;
rewrite ^/tag-(.+)\.html$ /tag.php?name=$1 last;
break;
error_page 404 /404.html;
error_page 403 /403.html;
}

#對(duì)附件做防盜鏈,沒有正確的referer將會(huì)返回403頁(yè)面
location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$ {
valid_referers none blocked server_names *.55188.net *.;
if ($invalid_referer) {
rewrite ^/ http://www./403.html;
}
}

#轉(zhuǎn)發(fā)PHP請(qǐng)求到本地的81端口,讓Apache處理.
location ~ \.php$ {
proxy_pass http://127.0.0.1:81;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_hide_header Content-Type;
}
}

}

測(cè)試一下你的配置文件是否都正確

/usr/local/sbin/apachectl configtest
/usr/local/sbin/nginx -t

都沒問題的話就啟動(dòng)服務(wù)器吧

/usr/local/sbin/apachectl start
/usr/local/sbin/nginx -c /usr/local/etc/nginx/nginx.conf

瀏覽一下主頁(yè),應(yīng)該正常了

后繼討論,
1.數(shù)據(jù)庫(kù).
數(shù)據(jù)庫(kù)的編譯安裝不再重復(fù)討論,僅僅討論環(huán)境,由于理想論壇的數(shù)據(jù)庫(kù)比較大,而且發(fā)展比較快,所以要作比較前一點(diǎn)的預(yù)算,硬盤需要使用15K RPM的SAS硬盤做RAID0+1,操作系統(tǒng)需要使用64位版本,因?yàn)榉?wù)器需要8GB內(nèi)存,要注意的時(shí),使用了64位系統(tǒng)之后部分比較老的軟件可能你 無法找到64位的版本,這臺(tái)機(jī)器就專門做MySQL服務(wù)器吧,如果數(shù)據(jù)庫(kù)超過10G,應(yīng)該考慮MySQL_Cluster

2.附件.
因?yàn)橛腥_(tái)服務(wù)器做WEB,所以附件要使用nfs的方式通過內(nèi)網(wǎng)進(jìn)行共享,至于如何設(shè)置nfs這里不再討論,如果有不明白的請(qǐng)將學(xué)費(fèi)交給Google

3.WEB.
由于三臺(tái)機(jī)器硬件配置不一致,所以有必要考慮一下負(fù)載平衡的問題,nginx本身附帶有負(fù)載平衡的功能,但是如果啟用負(fù)載平衡的功能的話,每臺(tái)機(jī)器都將會(huì) 把客戶端請(qǐng)求的數(shù)據(jù)緩存到本機(jī),這樣增加了硬盤的IO,對(duì)于理想論壇的訪問量來說,這是個(gè)不小的開銷,最后我們是使用DNS查詢的方式來分配流量, 通過不同的A記錄,配置好點(diǎn)的機(jī)器,多分一條A記錄,配置差的就少一條A記錄,這樣從整體上看,流量分配應(yīng)該比較平衡.

4.關(guān)于nginx并發(fā)連接
豬頭給nginx限制了每個(gè)IP的并發(fā)連接,因?yàn)閷?duì)于大論壇來說,總是比較出名的,不說人家攻擊你什么的.采集都特別多,如果不限制,很容易出問題,經(jīng)常 會(huì)導(dǎo)致PHP罷工.

以上只是豬頭愚見,如果有其他進(jìn)展,豬頭會(huì)更新本貼,如有疑問或者不同見解,歡迎提出討論

當(dāng)然還有很多很瘋狂的方法,例如說把WEB文件(附件除外)全部放內(nèi)存里面,MYSQL如果小于5G,也可以全部放內(nèi)存里面,不過這些方法都是太極 端的了,優(yōu)化效果須然好,但是風(fēng)險(xiǎn)很大。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

優(yōu)化之后的效果
由于還有兩臺(tái)機(jī)器升級(jí)沒完成,只帖一下其中一臺(tái)WEB的狀況了。目前
Active connections: 1143
server accepts handled requests
1211445 1211445 6221785
Reading: 67 Writing: 136 Waiting: 940

Apache最優(yōu)化要關(guān)閉不用的模塊,因?yàn)閔ttpd請(qǐng)求全部讓nginx處理了,Apache僅僅需要處理PHP就可以了,目前我開啟的模塊
LoadModule access_module libexec/apache2/mod_access.so
LoadModule setenvif_module libexec/apache2/mod_setenvif.so
LoadModule mime_module libexec/apache2/mod_mime.so
LoadModule autoindex_module libexec/apache2/mod_autoindex.so
LoadModule negotiation_module libexec/apache2/mod_negotiation.so
LoadModule alias_module libexec/apache2/mod_alias.so
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
LoadModule php5_module libexec/apache2/libphp5.so

autoindex negotiation以及rewrite這些應(yīng)該都關(guān)閉的,但是要做相應(yīng)的修改.目前跑起來絕對(duì)比Fastcgi要好

轉(zhuǎn)載自 http://www./thread-882980-1-2.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多