Home | Mirror | Search |
目錄
OS Linux/FreeBSD
Web Apache/Lighttpd/Nginx
DB MySQL/PostgreSQL
數不清的用戶在訪問你的伺服器
頻寬與伺服器可以隨時增加,但也有限
瓶頸無處不在
user -> \ /--1G--> | server | user -> |--1G--> [Firewal] --1G--> [Switch] ----1G--> | server | user -> / \--1G--> | server |
主流網絡設備頻寬均為1G,目前來看10G仍不普及,僅在存儲領域封閉使用,價格非常昂貴
firewall (1G) - switch (Forwarding bandwidth / 1G) - server (NIC 1G)
怎麼能提高頻寬呢?
首先是防火牆,這個設備非常重要。 100M 基本淘汰,10G 防火牆尚未普及,1G頻寬如果不夠怎麼辦?答案是買2個,3個...
為什麼不買10G的。在下面會談到會話數,你一看就明白了。10G防火牆會話數不是1G防火牆會話數的十倍。
目前主流交換機 Cisco WS-C2960G-48TC-L,48個RJ45口與2或4個SFP光纖口均為1G頻寬
一般中小企業1台交換機足夠,再上一個台階超過40台伺服器,就會有出現多台交換機互連問題,使用乙太網口與SFP光纖口的頻寬是一樣的,唯一區別是傳輸距離。
每個交換機後面都對應幾十台伺服器,每個伺服器1G網卡,如果這些伺服器滿負荷傳輸,交換機與交換機間數據傳輸就會帶來瓶頸。
通過連接埠聚合可以解決交換機間數據傳輸瓶頸,另種方式是交換機堆疊。
+----------+ +----------+ | |gi0/0/1 gi0/0/1| | | Switch A +--------------------------+ Switch B | | +--------------------------+ | | |gi0/0/2 gi0/0/2| | +----------+ +----------+
比如你有5個機櫃,將交換機放置到3號機櫃,處于中間位置,所有交換機放入該機櫃,然後堆疊,從中心機櫃向兩側分綫
對於不大不小的企業,直接採購IDC箱式交換機
目前主流服務都配備2到4個網口,像IBM / HP / DELL 等品牌伺服器你無需關心網卡問題.
這裡主要是針對自行安裝或使用PC伺服器的用戶,因為很多PC伺服器使用Realtak網卡。那麼Realtak與Broadcom的NetXtreme有什麼不同?
建議你安裝一個windows系統在伺服器上,然後看看網卡驅動屬性。Realtak 僅僅提供基本網絡功能,QOS質量訪問服務由驅動程式提供(軟QOS)而NetXtreme 提供非常豐富的功能,並且都是硬件實現。
話題回到頻寬上,linux 支持 bonding 網卡,可以幫你解決伺服器網絡通信頻寬問題,bonding 還可以解決網卡故障轉移,傳輸流量負載均衡等等。
在我的《Netkiller Linux 手札》中你可以找到具體的設置方法。
firewall (nat session) - switch (Forwarding bandwidth) - os (ulimit,sysctl) - application (httpd,vsftpd,tomcat ...)
會話數,國人俗稱並發數。當你的頻寬沒有滿,但tcp不能建立連接,這時你就要考慮會話數了。
購買防火牆的時候主要有兩個指標,一是會話數,二是頻寬,三是配備模組。售前工程師都會交代清楚。
例如 Cisco ASA 5550 會話數65萬,2個1G介面,可選IPS模組等等...
使用下面命令可以查看當前會話數
show conn count
Linux 影響會話數的的參數與配置檔案
/etc/security/limits.conf , /etc/security/limits.d
nofile - max number of open files 在POSIX系統中硬件,管道,Socket 均被看作是一個設備,如硬碟是塊設備,顯示器是字元設備,操作這些設備均使用c的open函數,被算作打開一個檔案。所有設備都是如此,加上web伺服器還要讀取很多HTML檔案,系統對nofile 開銷是非常巨大的。
nproc - max number of processes 目前多綫程是主流,使用多綫程技術這個參數可以不關心。像Oracle,PostgreSQL, Apache prefork,你就需要關心這個參數
/etc/sysctl.conf , /etc/sysctl.d/
net.ipv4.ip_local_port_range = 1024 65500 可用連接埠範圍
tcp 協議當你嘗試主動與伺服器建立連接,如:telnet 172.16.0.1 80,本地會開啟一個大於1024小於65500的連接埠
client: localhost:1025 --- 172.16.0.1:80 server
以上參數要綜合你的CPU處理能力,內存空間,硬碟IO等等,才能配置出合理數值
配置過大(小馬拉大車),超出你的伺服器處理能力,導致伺服器無響應,最終只能重啟
配置過小(大馬拉小車),你的伺服器長時間處于空間狀態,CPU,內存沒有得到合理使用
在我的《Netkiller Linux 手札》中你可以找到具體的設置方法。
連接數受限與limits與sysctl
apache : httpd/conf/extra/httpd-mpm.conf
<IfModule mpm_worker_module> ServerLimit 16 ThreadLimit 256 StartServers 8 MaxClients 4096 MinSpareThreads 64 MaxSpareThreads 256 ThreadsPerChild 256 MaxRequestsPerChild 10000 </IfModule>
mysql : /etc/my.cnf
[mysqld] max_connections=250
不依依列舉,有興趣看我的系列文檔。
IO (Input/Output) 輸入/輸出,在國內被泛指硬碟IO,沒辦法這裡也不例外,也被指為硬碟IO
影響IO的幾個參數:
硬碟轉速與硬碟速率
RAID卡速率
以Dell為例,去官網查看一下http://www.dell.com/content/topics/topic.aspx/global/products/pvaul/topics/en/us/raid_controller?c=us&l=en&cs=555
PERC H700 Integrated / Adapter: 6Gb/s SAS
SAS 硬碟介面 3Gbps,理論讀寫速度300MB/S,實際情況沒有這麼理想。
RAID0 / RAID10是提高IO最有效的手段,但是你從上面數據計算。6塊SAS硬碟做Raid 0 傳輸速率可以達到18Gb/s,但RAID卡H700只能達到6Gb/s,整體頻寬並沒有提高。
這樣做的意義是在Raid頻寬與硬碟速度不變的情況下,讀寫所花費的時間減少了,提高了列隊處理速度,減少IO排隊。
IO的問題就是IO排隊等待問題,而不是傳輸頻寬不夠用
在經濟緊張的情況下,可以使用多塊獨立硬碟分佈IO,每塊硬件分別做獨立存儲,比如資料庫可以採用這種方案:可以一塊硬碟存數據,一塊硬碟做索引,另一塊做日誌等等,禁止交叉。
在經濟允許的情況下,你可以配置多個RAID卡,外掛DAS。或者採用集群加分散式檔案系統方案
http://zh.wikipedia.org/wiki/ISCSI
iSCSI 可以提供1GB,10GB數據傳輸,傳輸介質可以選擇雙絞綫或者光纖
FCoE 通過乙太網傳輸FC協議,與iSCSI有很多相似之處