Home | Mirror | Search

第 16 章 How Opensource Helps Optimize IT and Save You Money

目錄

1. Traffic
1.1. bandwidth
1.1.1. firewall
1.1.2. switch
1.1.3. Server
1.2. Session
1.2.1. firewall
1.2.2. Server
1.2.3. application
1.3. IO
1.3.1. 分佈IO
1.3.2. FC SAN
1.3.3. iSCSI / FCoE
1.3.4. InfiniBand 或 RDMA
2. Distributed File System(簇檔案系統)
2.1. 聚合檔案系統
2.2. 全局檔案系統
2.3. 負載均衡檔案系統
2.4. 網絡塊設備

OS Linux/FreeBSD

Web Apache/Lighttpd/Nginx

DB MySQL/PostgreSQL

1. Traffic

數不清的用戶在訪問你的伺服器

頻寬與伺服器可以隨時增加,但也有限

瓶頸無處不在

	

user -> \                                     /--1G--> | server |
user ->  |--1G--> [Firewal] --1G--> [Switch] ----1G--> | server |
user -> /                                     \--1G--> | server |

	
	

1.1. bandwidth

主流網絡設備頻寬均為1G,目前來看10G仍不普及,僅在存儲領域封閉使用,價格非常昂貴

firewall (1G) - switch (Forwarding bandwidth / 1G) - server (NIC 1G)

1.1.1. firewall

怎麼能提高頻寬呢?

首先是防火牆,這個設備非常重要。 100M 基本淘汰,10G 防火牆尚未普及,1G頻寬如果不夠怎麼辦?答案是買2個,3個...

為什麼不買10G的。在下面會談到會話數,你一看就明白了。10G防火牆會話數不是1G防火牆會話數的十倍。

1.1.2. switch

目前主流交換機 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箱式交換機

1.1.3. Server

目前主流服務都配備2到4個網口,像IBM / HP / DELL 等品牌伺服器你無需關心網卡問題.

這裡主要是針對自行安裝或使用PC伺服器的用戶,因為很多PC伺服器使用Realtak網卡。那麼Realtak與Broadcom的NetXtreme有什麼不同?

建議你安裝一個windows系統在伺服器上,然後看看網卡驅動屬性。Realtak 僅僅提供基本網絡功能,QOS質量訪問服務由驅動程式提供(軟QOS)而NetXtreme 提供非常豐富的功能,並且都是硬件實現。

話題回到頻寬上,linux 支持 bonding 網卡,可以幫你解決伺服器網絡通信頻寬問題,bonding 還可以解決網卡故障轉移,傳輸流量負載均衡等等。

在我的《Netkiller Linux 手札》中你可以找到具體的設置方法。

1.2. Session

firewall (nat session) - switch (Forwarding bandwidth) - os (ulimit,sysctl) - application (httpd,vsftpd,tomcat ...)

會話數,國人俗稱並發數。當你的頻寬沒有滿,但tcp不能建立連接,這時你就要考慮會話數了。

1.2.1. firewall

購買防火牆的時候主要有兩個指標,一是會話數,二是頻寬,三是配備模組。售前工程師都會交代清楚。

例如 Cisco ASA 5550 會話數65萬,2個1G介面,可選IPS模組等等...

使用下面命令可以查看當前會話數

show conn count
			

1.2.2. Server

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 手札》中你可以找到具體的設置方法。

1.2.3. application

連接數受限與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
			
			

不依依列舉,有興趣看我的系列文檔。

1.3. IO

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排隊等待問題,而不是傳輸頻寬不夠用

1.3.1. 分佈IO

在經濟緊張的情況下,可以使用多塊獨立硬碟分佈IO,每塊硬件分別做獨立存儲,比如資料庫可以採用這種方案:可以一塊硬碟存數據,一塊硬碟做索引,另一塊做日誌等等,禁止交叉。

在經濟允許的情況下,你可以配置多個RAID卡,外掛DAS。或者採用集群加分散式檔案系統方案

1.3.2. FC SAN

8Gb Fibre Channel

我曾經測試過本地硬碟(146G 15RPM * 8 做RAID10)

1.3.3. iSCSI / FCoE

http://zh.wikipedia.org/wiki/ISCSI

iSCSI 可以提供1GB,10GB數據傳輸,傳輸介質可以選擇雙絞綫或者光纖

FCoE 通過乙太網傳輸FC協議,與iSCSI有很多相似之處

1.3.4. InfiniBand 或 RDMA

提供10Gbps ~ 120Gbps 的IO速度

http://en.wikipedia.org/wiki/InfiniBand

http://www.infinibandta.org/

comments powered by Disqus