Squid優化完全手冊

火星人 @ 2014-03-04 , reply:0


Squid優化完全手冊

Squid優化完全手冊(1)

出自:http://www.unixtech.cn/

一、 概述
  squid是一款優秀的open source的代理伺服器軟體,可以運行於多種系統平台上,但是同其他商業化的產品相比,其缺點也是很明顯的,那就是它的命中率和效率相對低下。

  本文主要討論在不改變硬體條件之下,通過以下手段對squid進行性能優化:

1. 編譯一個高效的、精簡的新內核;
2. 對Cache分區採用reiserfs日誌文件系統;
3. 重新編譯squid;
4. 優化squid配置;

  對於優化的效果,我使用大名鼎鼎的cacheflow公司的測試工具——cfmc進行測試比較:

  首先用cfmc自帶的一個腳本,從squid.conf的access.log中抽出RUL,然後以這些RUL為依據進行測試。

  伺服器配置:

型號:HP LH3
CPU:PII450
內存:256MB 100MHz ECC SDRAM DIMM
硬碟:9.1GB Hot-Swap Ultra2 Hard Disk
網卡:Ethernet Express PRO 100 10/100M X 2
操作系統:RedHat 7.1

  優化前測試結果:

Iteration 0: Cumulative statistics; 933 seconds elapsed
Total objects: 72599, total object size: 513211102 bytes
Average object size: 7069 bytes
Average object response time: 2707 milliseconds
Objects per second: 77.81
Bytes per second: 550065, min: 550065, max: 879873
URLs discarded due to socket or connection failures: 6955
Redirections: 1017, Cookied objects: 1036
Pragma no-cache objects: 1656, Non-200 HTTP response codes: 2505

  優化后測試結果:

Iteration 0: Cumulative statistics; 688 seconds elapsed
Total objects: 72599, total object size: 403833100 bytes
Average object size: 5562 bytes
Average object response time: 1890 milliseconds
Objects per second: 105.52
Bytes per second: 586966, min: 586966, max: 995582
URLs discarded due to socket or connection failures: 16372
Redirections: 1658, Cookied objects: 1000
Pragma no-cache objects: 1454, Non-200 HTTP response codes: 3132

  通過對以上測試結果的比較,我們可以看出:

  優化后的Objects per second增加了35.6%,Average object response time減少了43.2%,對整體性能的提升還是比較明顯的。

二、 編譯新內核
  我們採取這樣的方式來編譯內核:取消內核的模塊支持,將伺服器所有的硬體驅動編譯到內核中,此外還要注意將對reiserfs文件系統的支持也編譯到內核中,從而在提供系統性能的同時增加系統安全性。在2.4.10以上的版本中,已經內置了對reiserfs文件系統的支持。

  首先從http://www.kernel.org/pub/linux/kernel/v2.4/下載linux-2.4.12.tar.gz,這是當前最新的內核。

  然後解開內核文件:

tar xvzf linux-2.4.12.tar.gz

  進入新生成的目錄並執行:

cd linux
make mrproper
make config

  根據我的伺服器的配置,我選擇這樣編譯內核:

* Code maturity level options
Prompt for development and/or incomplete code/drivers (CONFIG_EXPERIMENTAL)
* Loadable module support
Enable loadable module support (CONFIG_MODULES)
* Processor type and features
Processor family (386, 486, 586/K5/5x86/6x86/6x86MX, Pentium-Classic, Pentium-MM
X, Pentium-Pro/Celeron/Pentium-II, Pentium-III/Celeron(Coppermine), Pentium-4, K
6/K6-II/K6-III, Athlon/Duron/K7, Crusoe, Winchip-C6, Winchip-2, Winchip-2A/Winch
ip-3, CyrixIII/C3)
* General setup
Networking support (CONFIG_NET)
PCI support (CONFIG_PCI)
PCI access mode (BIOS, Direct, Any)
defined CONFIG_PCI_GOANY
PCI device name database (CONFIG_PCI_NAMES)
System V IPC (CONFIG_SYSVIPC)
Sysctl support (CONFIG_SYSCTL)
Kernel core (/proc/kcore) format (ELF, A.OUT)
defined CONFIG_KCORE_ELF
* Plug and Play configuration
Plug and Play support (CONFIG_PNP)
* Block devices
Normal PC floppy disk support (CONFIG_BLK_DEV_FD)
* Networking options
Kernel/User netlink socket (CONFIG_NETLINK)
Routing messages (CONFIG_RTNETLINK)
Network packet filtering (replaces ipchains) (CONFIG_NETFILTER)
Unix domain sockets (CONFIG_UNIX)
TCP/IP networking (CONFIG_INET)
IP: advanced router (CONFIG_IP_ADVANCED_ROUTER)
IP: policy routing (CONFIG_IP_MULTIPLE_TABLES)
IP: use netfilter MARK value as routing key (CONFIG_IP_ROUTE_FWMARK)
IP: fast network address translation (CONFIG_IP_ROUTE_NAT)
IP: equal cost multipath (CONFIG_IP_ROUTE_MULTIPATH)
* IP: Netfilter Configuration
Connection tracking (required for masq/NAT) (CONFIG_IP_NF_CONNTRACK)
FTP protocol support (CONFIG_IP_NF_FTP)
IP tables support (required for filtering/masq/NAT) (CONFIG_IP_NF_IPTABLES)
limit match support (CONFIG_IP_NF_MATCH_LIMIT)
Multiple port match support (CONFIG_IP_NF_MATCH_MULTIPORT)
Connection state match support (CONFIG_IP_NF_MATCH_STATE)
Packet filtering (CONFIG_IP_NF_FILTER)
Full NAT (CONFIG_IP_NF_NAT)
REDIRECT target support (CONFIG_IP_NF_TARGET_REDIRECT)
LOG target support (CONFIG_IP_NF_TARGET_LOG)
ATA/IDE/MFM/RLL support (CONFIG_IDE)
* IDE, ATA and ATAPI Block devices
Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support (CONFIG_BLK_DEV_IDE)
Include IDE/ATA-2 DISK support (CONFIG_BLK_DEV_IDEDISK)
Use multi-mode by default (CONFIG_IDEDISK_MULTI_MODE)
Include IDE/ATAPI CDROM support (CONFIG_BLK_DEV_IDECD)
* SCSI support
SCSI support (CONFIG_SCSI)
* SCSI support type (disk, tape, CD-ROM)
SCSI disk support (CONFIG_BLK_DEV_SD)
Maximum number of SCSI disks that can be loaded as modules (CONFIG_SD_EXTRA_DEVS)
* Some SCSI devices (e.g. CD jukebox) support multiple LUNs
Enable extra checks in new queueing code (CONFIG_SCSI_DEBUG_QUEUES)
* SCSI low-level drivers
AMI MegaRAID support (CONFIG_SCSI_MEGARAID)
SYM53C8XX SCSI support (CONFIG_SCSI_SYM53C8XX)
default tagged command queue depth (CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS)
maximum number of queued commands (CONFIG_SCSI_NCR53C8XX_MAX_TAGS)
synchronous transfers frequency in MHz (CONFIG_SCSI_NCR53C8XX_SYNC)
* Network device support
Network device support (CONFIG_NETDEVICES)
* Ethernet (10 or 100Mbit)
Ethernet (10 or 100Mbit) (CONFIG_NET_ETHERNET)
EISA, VLB, PCI and on board controllers (CONFIG_NET_PCI)
EtherExpressPro/100 support (CONFIG_EEPRO100)
* Input core support
Input core support (CONFIG_INPUT)
Keyboard support (CONFIG_INPUT_KEYBDEV)
* Character devices
Virtual terminal (CONFIG_VT)
Support for console on virtual terminal (CONFIG_VT_CONSOLE)
Standard/generic (8250/16550 and compatible UARTs) serial support (CONFIG_SERIAL)
Unix98 PTY support (CONFIG_UNIX98_PTYS)
Maximum number of Unix98 PTYs in use (0-2048) (CONFIG_UNIX98_PTY_COUNT)
* File systems
Reiserfs support (CONFIG_REISERFS_FS)
ISO 9660 CDROM file system support (CONFIG_ISO9660_FS)
/proc file system support (CONFIG_PROC_FS)
/dev/pts file system for Unix98 PTYs (CONFIG_DEVPTS_FS)
* Console drivers
VGA text console (CONFIG_VGA_CONSOLE)

  這裡需要說明的是:如果要使用透明代理模式,要仔細選擇Netfilter,因為我們還得用iptables來重定向tcp包,以滿足透明代理的要求。

  假如您的伺服器配置與我的不同,只需要更改相應的硬體配置參數即可,比如CPU類型、網卡、SCSI硬碟等。

  接著:

make bzImage

  完成後,將 arch/i386/boot/目錄下的新內核bzImage拷貝到/boot/目錄下,並更名為opt:

cp arch/i386/boot/bzImage /boot/
mv /boot/bzImage /boot/opt

  然後編輯lilo.conf如下所示:

boot=/dev/sda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
message=/boot/message
default=opt

image=/boot/vmlinuz-2.4.2-2
label=linux
initrd=/boot/initrd-2.4.2-2.img
read-only
root=/dev/sda1

image=/boot/opt
label=opt
read-only
root=/dev/sda1

        最後執行:

# lilo
Added linux
Added opt *

  好了,這樣我們就可以用新內核啟動了,您可以發現,這樣自己編譯的內核要小的多,也快得多。

Squid優化完全手冊(2)

三、 使用reiserfs文件系統
  有人做過測試,在相同條件下,如果cache分區使用reiserfs文件系統,性能要比使用ext2的高出20%,所以我們將在cache分區中採用reiserfs文件系統。在上一步中,我們已經在內核中提供了對reiserfs的支持,下面我們要做的,就是將原來的cache分區重新格式化成reiserfs文件系統。

  首先從ftp://ftp.namesys.com/pub/reiserfsprogs/reiserfsprogs-3.x.0j.tar.gz下載reiserfs文件系統相關工具reiserfsprogs,然後解開該文件:

tar xvzf reiserfsprogs-3.x.0j.tar.gz

  進入新生成目錄,執行:

./configure
make
make install

  這將生成mkreiserfs、reiserfsck、debugreiserfs、resize_reiserfs四個reiserfs的工具。

  完成後我們將reiserfs工具安裝成功了。這時,假設原來的cache分區為/dev/sda7,所裝載的目錄為/cache,在對其格式化之前,我們要先umount 原來的分區:

umount /cahce

  對分區格式化,我們執行:

mkreiserfs –h r5 /de/sda7

  完成後我們修改/etc/fstab,將/cache一行改為:

/dev/sda7 /cache reiserfs notail,noatime 0 0

  然後重啟動。

四、 重新編譯squid
  經過大量的測試表明:squid-2.2.STABLE5+hno補丁的組合要比2.3或者是其他版本的squid都要穩定的多、效率也要高的多,如果您不相信可以自己化幾天時間做一下測試。所以我們將採用這個版本的squid。

  首先從http://www.squid-cache.org/Versions/v2/2.2/下載squid-2.2.STABLE5-src.tar.gz, 從http://prdownloads.sourceforge.net/squid/下載squid-2.2.STABLE5-hno.20000202.snapshot.gz補丁,然後分別解開這兩個包:

tar xvzf squid-2.2.STABLE5-src.tar.gz
gunzip –d squid-2.2.STABLE5-hno.20000202.snapshot.gz

  然後打補丁:

cd squid-2.2.STABLE5
patch –p1 < ../ squid-2.2.STABLE5-hno.20000202.snapshot

  接下來,就可以開始編譯squid了,在採用非同步io(多線程模式)之外,我們本著這樣一個原則:那就是去掉一切不需要的功能,如下所示:

./configure --prefix=/usr --exec_prefix=/usr --bindir=/usr/sbin --libexecdir=/usr/lib/squid --localstatedir=/var --sysconfdir=/etc/squid --mandir=/usr/share/man --enable-async-io=20 --disable-icmp --disable-delay-pools --disable-mem-gen-trace --disable-useragent-log --enable-kill-parent-hack --disable-arp-acl --enable-poll --disable-ident-lookups

make
make install

  其中,--enable-async-io=20說明我們採用非同步io,並採用18個線程。

  編譯通過後,我們就可以開始配置squid了。

五、 優化squid配置
  以下是我的squid.conf及相關解釋:

  #取消對代理陣列的支持

icp_port 0

  #對日誌文件和pid文件位置進行設置

cache_store_log none
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
emulate_httpd_log on
pid_filename /var/run/squid.pid

  #設置運行時的用戶和組許可權

cache_effective_user squid
cache_effective_group squid

  #設置管理信息

visible_hostname proxy.yxtc.edu.cn
cache_mgr bye2000@yxtc.edu.cn

  #設置監聽地址和埠

http_port 3128
tcp_incoming_address x.x.x.x
udp_incoming_address x.x.x.x

  #見下面補充說明

cache_mem 32 MB
cache_dir /cache 6000 14 256

  #設置cache對象超時時間

reference_age 3 months

  #訪問控制設置

acl mynet src 192.168.1.0/255.255.255.0
acl all src 0.0.0.0/0.0.0.0
http_access allow mynet
http_access deny all

  #透明代理設置

httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

  #swap 性能微調

half_closed_clients off
cache_swap_high 100%
cache_swap_low 80%
maximum_object_size 1024 KB

  #見補充說明

refresh_pattern -i .html 1440 90% 129600 reload-into-ims
refresh_pattern -i .shtml 1440 90% 129600 reload-into-ims
refresh_pattern -i .hml 1440 90% 129600 reload-into-ims
refresh_pattern -i .gif 1440 90% 129600 reload-into-ims
refresh_pattern -i .swf 1440 90% 129600 reload-into-ims
refresh_pattern -i .jpg 1440 90% 129600 reload-into-ims
refresh_pattern -i .png 1440 90% 129600 reload-into-ims
refresh_pattern -i .bmp 1440 90% 129600 reload-into-ims
refresh_pattern -i .js 1440 90% 129600 reload-into-ims

補充說明:
1.cache_mem 32 MB

  注意:cache_mem並不是squid所能使用內存的大小,而是squid用戶hot object的物理內存的大小,所以這個值可以小一些。

2.cache_dir /cache 6000 14 256

  對於第一級子目錄和第二級子目錄的計算方法,可以參考筆者以前的文章《用LINUX架設代理伺服器(上)(中)(下)》;

3.refresh_pattern -i .html 1440 90% 129600 reload-into-ims等

  這幾句其實是強行控制對象的超時時間,這違反了http協議的精神,但是在帶寬較窄的場合,可以提高明顯系統相應時間。

4.注意/cache目錄及日誌文件的許可權,其所有用戶和所有組必須為squid;

5.可以採用rpm包的腳本/etc/rc.d/init.d/squid控制squid,也可以採用squid命令控制,具體可以參考squid –h
《解決方案》

Squid優化完全手冊

總結的比較細,有一定參考價值。
《解決方案》

Squid優化完全手冊

好文~
《解決方案》

Squid優化完全手冊

不錯!不過沒提到反向代理的內容,有些可惜。
《解決方案》

Squid優化完全手冊

樓上的我可以給寫補充
《解決方案》

Squid優化完全手冊

這個是squid反向代理內容

http://www.certren.com/tech/ShowArticle.asp?ArticleID=3632
《解決方案》

Squid優化完全手冊

不錯,在向版主的方向努力中...

:)
《解決方案》

Squid優化完全手冊

謝謝段譽兄弟誇獎,

俺再接再厲
《解決方案》

Squid優化完全手冊

這些都是基本的東西 樓主沒有寫一些實際應用時需要注意的地方 比如說 在squid運行一段時間就會變得很不穩定的
《解決方案》

Squid優化完全手冊

原帖由 "y.kevin"]這些都是基本的東西 樓主沒有寫一些實際應用時需要注意的地方 比如說 在squid運行一段時間就會變得很不穩定的

怎麼說???樓主說的一大半是linux優化,而不是squid優化




[火星人 via ] Squid優化完全手冊已經有256次圍觀

http://www.coctec.com/docs/service/show-post-19343.html