CentOS 6.4下DNS+Squid+Nginx+MySQL搭建高可用Web服務器
一.Squid是什麼
Squid是一種用來緩衝Internet數據的軟件。它是這樣實現其功能的,接受來自人們需要下載的目標(object)的請求並適當地處理這些請求。也就是說,如果一個人想下載一web頁面,他請求Squid為他取得這個頁面。Squid隨之連接到遠程服務器並向這個頁面發出請求。然後,Squid顯式地聚集數據到客戶端機器,而且同時複製一份。當下一次有人需要同一頁面時,Squid可以簡單地從磁盤中讀到它,那樣數據迅即就會傳輸到客戶機上。當前的Squid可以處理HTTP,FTP,GOPHER,SSL和WAIS等協議。但它不能處理如POP,NNTP,RealAudio以及其它類型的東西。
squid各種代理的定義
正向代理
a.標準的代理緩衝服務器
一個標準的代理緩衝服務被用於緩存靜態的網頁(例如:html文件和圖片文件等)到本地網絡上的一台主機上(即代理服務器)。當被緩存的頁面被第二次訪問的時候,瀏覽器將直接從本地代理服務器那裡獲取請求數據而不再向原web站點請求數據。這樣就節省了寶貴的網絡帶寬,而且提高了訪問速度。但是,要想實現這種方式,必須在每一個內部主機的瀏覽器上明確指明代理服務器的IP地址和端口號。客戶端上網時,每次都把請求送給代理服務器處理,代理服務器根據請求確定是否連接到遠程web服務器獲取數據。如果在本地緩衝區有目標文件,則直接將文件傳給用戶即可。如果沒有的話則先取迴文件,先在本地保存一份緩衝,然後將文件發給客戶端瀏覽器。
b.透明代理緩衝服務器(常用在局域網網關上安裝,配合防火牆reject使用)
透明代理緩衝服務和標準代理服務器的功能完全相同。但是,代理操作對客戶端的瀏覽器是透明的(即不需指明代理服務器的IP和端口)。透明代理服務器阻斷網絡通信,並且過濾出訪問外部的HTTP(80端口)流量。如果客戶端的請求在本地有緩衝則將緩衝的數據直接發給用戶,如果在本地沒有緩衝則向遠程web服務器發出請求,其餘操作和標準的代理服務器完全相同。對於Linux操作系統來說,透明代理使用Iptables或者Ipchains實現。因為不需要對瀏覽器作任何設置,所以,透明代理對於ISP(Internet服務器提供商)特別有用。
反向代理
a.反向代理緩衝服務器
反向代理是和前兩種代理完全不同的一種代理服務。使用它可以降低原始WEB服務器的負載。反向代理服務器承擔了對原始WEB服務器的靜態頁面的請求,防止原始服務器過載。它位於本地WEB服務器和Internet之間,處理所有對WEB服務器的請求,組織了WEB服務器和Internet的直接通信。如果互聯網用戶請求的頁面在代理服務器上有緩衝的話,代理服務器直接將緩衝內容發送給用戶。如果沒有緩衝則先向WEB服務器發出請求,取回數據,本地緩存後再發送給用戶。這種方式通過降低了向WEB服務器的請求數從而降低了WEB服務器的負載。
二.系統架構
1.原理說明
通過DNS的輪詢技術,將來自客戶端的請求分發給其中一台 Squid 反向代理服務器處理,如果這台 Squid 緩存了用戶的請求資源,則將請求的資源直接返回給用戶,否則 Squid 將此次請求根據配置的規則發送給鄰居 Squid 和後台的 WEB 服務器處理,這樣既減輕後台 WEB 服務器的負載,又提高整個網站的性能和安全性。
2.主機分配:
DNS服務器: 啟用兩張網卡,連接兩個網段
eth0:10.10.54.150
eth1:172.16.54.254(作為172.16.54.0/24網段的網關)
兩台squid反向代理服務器
squid1:172.16.54.150
squid2:172.16.54.151
兩台web服務器(安裝Discuz_X3.0_SC_UTF8.zip)
web1:172.16.54.200
web2:172.16.54.201
三台mysql服務器(一主兩從)
master:172.16.54.203
slave1:172.16.54.204
slave2:172.16.54.205
三:首先進行內存優化
編輯sysctl.conf文件,添加以下內容
shell> vi /etc/sysctl.conf
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_wmem = 4096 65536 4194304
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144
net.core.somaxconn = 262144
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 786432 1048576 1572864
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 1024 65000
#配置選項解釋:
net.ipv4.tcp_rmem = 4096 87380 4194304:TCP讀buffer,可參考的優化值: 32768 436600 873200
net.ipv4.tcp_wmem = 4096 65536 4194304:TCP寫buffer,可參考的優化值: 8192 436600 873200
net.core.wmem_default:表示發送套接字緩衝區大小的缺省值(以字節為單位)
net.core.rmem_default:表示接收套接字緩衝區大小的缺省值(以字節為單位)
net.core.rmem_max :表示接收套接字緩衝區大小的最大值(以字節為單位)
net.core.wmem_max:表示發送套接字緩衝區大小的最大值(以字節為單位)
net.core.netdev_max_backlog = 262144:每個網絡接口接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目。
net.core.somaxconn = 262144:web應用中listen函數的backlog默認會給我們內核參數的net.core.somaxconn限制到128,而nginx定義的NGX_LISTEN_BACKLOG默認為511,所以有必要調整這個值。
net.ipv4.tcp_max_orphans = 3276800:系統中最多有多少個TCP套接字不被關聯到任何一個用戶文件句柄上。
net.ipv4.tcp_max_syn_backlog = 8192:表示SYN隊列的長度,默認為1024,加大隊列長度為8192,可以容納更多等待連接的網絡連接數。
net.ipv4.tcp_max_tw_buckets = 5000:表示系統同時保持TIME_WAIT套接字的最大數量,如果超過這個數字,TIME_WAIT套接字將立刻被清除並打印警告信息。減少它的最大數量,避免Squid服務器被大量的TIME_WAIT套接字拖死。
net.ipv4.tcp_timestamps = 0:時間戳可以避免序列號的卷繞。一個1Gbps的鏈路肯定會遇到以前用過的序列號,時間戳能夠讓內核接受這種“異常“的數據包,這裡需要將其關掉。
net.ipv4.tcp_tw_recycle = 1:表示開啟TCP連接中TIME-WAIT sockets的快速回收。
net.ipv4.tcp_tw_reuse = 1:表示開啟重用,允許將TIME-WAIT sockets重新用於新的TCP連接。
net.ipv4.tcp_mem = 786432 1048576 1572864:同樣有3個值,net.ipv4.tcp_mem[0]:低於此值,TCP沒有內存壓力;net.ipv4.tcp_mem[1]:在此值下,進入內存壓力階段;net.ipv4.tcp_mem[2]:高於此值,TCP拒絕分配socket。可根據物理內存大小進行調整,如果內存足夠大的話,可適當往上調。建議94500000 915000000 927000000。
net.ipv4.tcp_fin_timeout = 30:表示如果套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。
net.ipv4.tcp_keepalive_time = 1200:表示當keepalive起用的時候,TCP發送keepalive消息的頻度。缺省是2小時,改為20分鐘。
net.ipv4.ip_local_port_range = 1024 65000:表示用於向外連接的端口範圍。缺省情況下很小:32768到61000,改為1024到65000。
#使配置立即生效:
/sbin/sysctl -p
以下文章點擊率最高
Loading…