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