Nginx+Squid+Apche 負載均衡配置示例

最近研究nginx在負載均衡上的配置,下步網站的整體架構有可能要適當的調整下,使用nginx在最前端做負載均衡,中間放多個squid緩存節點,爲最後端的圖片服務器提供高速緩存,從而大大提高網站打開的響應速度;下面介紹下在kvm環境下的大致部署步驟和配置,負載均衡器方面也可以使用lvs來替代nginx,拓撲圖大致如下:

 


nginx的負載均衡的詳細介紹可以參考這篇文章:http://www.zzbaike.com/wiki/Nginx%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1
Nginx的 upstream目前支持5種方式的分配,nginx支持同時設置多組的負載均衡,用來給不用的server來使用;
1:down 表示單前的server暫時不參與負載
2:weight 默認爲1.weight越大,負載的權重就越大;
3:max_fails :允許請求失敗的次數默認爲1.當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤
4:fail_timeout:max_fails次失敗後,暫停的時間;
5:backup:其它所有的非backup機器down或者忙的時候,請求backup機器,所以這臺機器壓力會最輕; 

一:配置負載均衡器nginx
root@server5 ~]# grep -v '^#' /usr/local/nginx/conf/nginx.conf
user www www;
worker_processes 1;
error_log /usr/local/nginx/logs/nginx_error.log crit;
pid        /usr/local/nginx/nginx.pid;

events
{
use epoll;
worker_connections 65535;
}
http
{     
include       mime.types;
default_type application/octet-stream;

keepalive_timeout 120;

tcp_nodelay on;

fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;

gzip on;
gzip_min_length 1k;
gzip_buffers     4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types       text/plain application/x-javascript text/css application/xml;
gzip_vary on;


upstream pic.bleachyang.com {
server   192.168.122.10:80 backup;    //這裏採用backup方式分配負載
server   192.168.122.20:80;
}


server
{
listen 80;
server_name pic.bleachyang.com;

location / {
proxy_pass        http://pic.bleachyang.com;
proxy_set_header   Host             $host;
proxy_set_header   X-Real-IP        $remote_addr;
proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
}

log_format pic.bleachyang.com '$remote_addr - $remote_user [$time_local] $request '
'"$status" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /usr/local/nginx/logs/pic.bleachyang.log;
}
}


二,配置反向代理squid緩存加速服務器,兩臺的配置一致即可
[root@server1 ~]# groupadd squid
[root@server1 ~]# useradd -g squid -s /sbin/nologin squid
[root@server1 ~]# cd /usr/local/src/tarbag/
[root@server1 tarbag]# wget ftp://ftp.dti.ad.jp/pub/unix/net/proxy/squid/squid-3.1.2.tar.gz
[root@server1 tarbag]# tar -zxvf squid-3.1.2.tar.gz -C ../software/
[root@server1 tarbag]# cd ../software/squid-3.1.2/
[root@server1 squid-3.1.2]# ./configure --prefix=/usr/local/squid --enable-gnuregex --enable-arp-acl --enable-auth="basic" --enable-basic-auth-helpers="NCSA" --enable-async-io=80 --enable-storeio=ufs --enable-icmp --enable-kill-parent-hack --enable-snmp --disable-ident-lookups --enable-cache-digests --enable-ssl --enable-delay-pools --enable-poll --enable-linux-netfilter --enable-underscore --enable-err-language="Simplify_Chinese" --enable-default-err-languages="Simplify_Chinese"

編譯選項註解:
--prefix=/usr/local/squid    //指定安裝路徑
--enable-arp-acl             //這樣可以在規則設置中直接通過客戶端的MAC地址進行管理,防止客戶使用IP欺騙
--enable-async-io=80         //這個主要是設置async模式來運行squid,如果服務器配置很不錯,有1G以上內存,cpu使用SMP的方式的話可以考慮設成160或者更高,如果服務器比較糟糕就根據實際情況設了,另外此項還使cache文件支持aufs
--enable-auth-modules        //此編譯選項啓用認證模塊,可以對訪問代理用戶進行授權;
--enable-cache-digests       //使能緩存摘要,本來此項目的是爲了在Squid集羣服務之間迅速發現緩存對象,這裏在本地使用,可以加快請求時,檢索緩存內容的速度;
--enable-err-language="Simplify_Chinese" 和--enable-default-err-languages="Simplify_Chinese" //指定出錯是顯示的錯誤頁面爲簡體中文
--enable-delay-pools           //此選項使能一個延時池,這樣能對某些特定的請求限制額定帶寬。
--enable-gnuregex              //由於Squid大量使用字符串處理做各種判斷,加此項能更好處理。
--enable-icmp                  //加入icmp支持
--disable-ident-lookups        //防止系統使用RFC931規定的身份識別方法。
--enable-kill-parent-hack      //關掉suqid的時候,連同父進程一起關掉
--enable-linux-netfilter       //允許使用Linux的透明代理功能。
--enable-poll                  //應啓用Poll()函數而不是select()函數,通常而言poll(輪詢)比select要好,但configure(腳本程序)已知Poll在某些平臺下失效, 若你認爲你比configure編譯配置腳本程序要聰明的話,可以用這個選項啓用Poll。總之就是用這個可以提升性能
--enable-snmp                 //此選項可以讓MRTG使用SNMP協議對服務器的流量狀態進行監測;
--enable-storeio=ufs,null     //使用的文件系統通常是默認的ufs,不過如果想要做一個不緩存任何文件的代理服務器,就需要加上null文件系統;
--enable-underscore           //允許解析的URL中出現下劃線,因爲默認squid會認爲帶下劃線的URL地址是非法的,並拒絕訪問該地址;

[root@server1 squid-3.1.2]# make && make install
[root@server1 squid-3.1.2]# ls /usr/local/squid/
bin etc include lib libexec sbin share var
[root@server1 ~]# chown -R squid.squid /usr/local/squid/
[root@server1 ~]# /usr/local/squid/sbin/squid -z
2010/05/06 13:05:40| Creating Swap Directories

[root@server1 ~]# grep -v '^#' /usr/local/squid/etc/squid.conf   //squid反向代理的關鍵配置
cache_effective_user squid
cache_effective_group squid
http_access allow all
http_port 80 accel vhost vport 
coredump_dir /usr/local/squid/var/cache
cache_peer pic.bleachyang.com parent 80 0 no-query originserver name=pic
cache_peer_domain pic   pic.bleachyang.com
……………………………………其他信息省略……………………………………………………

[root@server1 ~]# /usr/local/squid/sbin/squid    //啓動squid
[root@server1 ~]# netstat -ntpl |grep squid
tcp        0      0 :::80                       :::*                        LISTEN      384/(squid) 

[root@server1 ~]# grep pic /etc/hosts           //需要在反向代理的hosts文件上加上後臺服務器的IP
192.168.122.1   pic.bleachyang.com

日誌信息:
[root@server5 ~]# tail -f /usr/local/nginx/logs/pic.bleachyang.log
192.168.122.1 - - [06/May/2010:17:01:41 +0800] "GET /1.jpg HTTP/1.1" 304 0 "http://pic.bleachyang.com/" "Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.0.12) Gecko/2009070811 Red Hat/3.0.12-1.el5_3 Firefox/3.0.12"

[root@server1 ~]# tail -f /usr/local/squid/var/logs/access.log 
1273135928.937      4 192.168.122.1 TCP_MISS/304 284 GET http://pic.bleachyang.com/1.jpg - FIRST_UP_PARENT/pic -

[root@server2 logs]# tail -f /usr/local/squid/var/logs/access.log 
1273136458.753    129 192.168.122.1 TCP_MEM_HIT/200 1299980 GET http://pic.bleachyang.com/1.jpg - NONE/- image/jpeg
1273136459.871      7 192.168.122.1 TCP_MISS/404 598 GET http://pic.bleachyang.com/favicon.ico - FIRST_UP_PARENT/pic text/html


發佈了26 篇原創文章 · 獲贊 2 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章