2012年2月17日 星期五

LINUX系統下安裝GCC和KERNEL-DEVEL


剛在虛擬機器(Vmware7.0)上裝了個CentOS5.4作業系統,可惜的是在安裝Vmware Tools的時候老報錯,先是找不到gcc,等gcc安裝好以後又提示找不到C Header Files。具體解決辦法如下:
1.Linux作業系統安裝好以後,查看gcc是否已經安裝;
    # gcc -v //如果後面出現一大段,則已經安裝;
2.查看內核是否一致;
    #uname -r
    #rpm -q kernel-devel
    如果兩個命令得到的版本號一致,那麼恭喜你可以直接安裝Vmware Tools了;不過一般情況下,兩個版本是不一致的,或者是提示kernel-devel沒有安裝;
3.安裝gcc(如果gcc沒有安裝的話);要確保網路是連通的;
    #yum -y install gcc
4.安裝kernel-devel(可以在iso檔中找到)
    #cd /mnt/
    #mkdir cdrom
    #mount /dev/cdrom /mnt/cdrom //這三步是將光碟機掛載到/mnt目錄下麵的cdrom資料夾;
    #cp /mnt/cdrom/CentOS/kernel-xen-devel-2.6.18-164.el5.i686.rpm /tmp   //找到kernel-xen-devel...檔並複製到/tmp目錄下;
    #cd /tmp
    #rpm -ivh kernel-xen-devel-2.6.18-164.el5.i686.rpm //安裝kervel-devel
5. 重啟電腦,安裝Vmware Tools;

2012年2月15日 星期三

用tcpreplay對網路程式進行壓力測試


以前tcpdump用的比較多,主要用在診斷的時候。tcpreplay則是把tcpdump記錄下來的包原樣發回去這樣tcpreplay就可以用來以極快的速度複現記錄下來的資料從而實現壓力測試,好處在於資料比較真實

先是在實際環境中用tcpdump記錄資料用於複現
例如記錄發往某ip某埠的報文一百萬個
1
tcpdump 'dst aa.aa.aa.aa and dst port xxx' -c 1000000 -w log.pcap
假設這些報文要在機器bb.bb.bb.bb上複現然後發給cc.cc.cc.cc,從bb.bb.bb.bb發往cc.cc.cc.cc的源mac地址為bb:bb:bb:bb:bb:bb 目的mac位址為cc:cc:cc:cc:cc:cc
首先tcpprep預處理下
1
tcpprep -p --pcap=log.pcap --cachefile=input.cache
先修改mac位址使之有效
1
tcprewrite --enet-dmac="cc:cc:cc:cc:cc:cc" --enet-smac="bb:bb:bb:bb:bb:bb" --infile=log.pcap --outfile=pcap.tmp
然後修改ip位址使之有效
1
tcprewrite --cachefile=input.cache --endpoints="cc.cc.cc.cc:bb.bb.bb.bb" --infile=pcap.tmp --outfile=replay.pcap
然後就可以用來複現了 -l參數是說迴圈多少次 -p參數是說每秒發多少個包 -i是說從那個網卡發
1
tcpreplay -l 10 -p 1000 -i eth0 replay.pcap

2012年2月13日 星期一

以Virtual Switch建置雲端虛擬網路交換機制(轉)

虛擬交換(Virtual Switch)顧名思義就是建立於虛擬平台上,透過軟體模擬出網路交換器的功能,其提供管理員能夠不依賴於實體網路和硬體,動態地重新配置虛擬環境中的網路架構。也由於其變動性較小,因此可減少網路和虛擬平台管理人員的負擔。  

本文中將介紹一套以開放原始碼(Open Source)技術為基礎的虛擬交換器OpenvSwitch,透過實際部署安裝於Xen虛擬平台上的方式,針對虛擬交換機制作深入的分析與探討。 

運作流程說明

在Xen的虛擬平台中,傳統上其內部網路主要由虛擬網卡與虛擬橋接器(Linux Bridge)所組成,兩者皆是由Hypervisor所模擬出來的軟體物件,提供虛擬機器橋接實體網路及虛擬機器之間彼此互相連線溝通機制。

而虛擬交換器(Virtual Switch)的介入,則帶給Hypervisor更多彈性化的功能來管控整體的虛擬網路架構。由於連接實體網路的硬體介面是由Hypervisor中的實體網路卡負責,其便可以直接成為虛擬交換器的uplink埠。虛擬交換器和Hypervisor間的互動架構則如下圖所示。  

▲虛擬交換器與Hypervisor間的互動架構。


首先,Xen會啟用一個Domain0負責做為後端驅動(netback),接收從各個虛擬機器(DomainU)中的前端驅動(netfront)所傳送的封包,其傳送的機制是透過共享記憶體的方式,將記憶體存取權限授與(grant)後端驅動,因此DomainU之間無法讀取未經授權的記憶體空間,也不會干擾到本身之外的封包儲存空間。  

而Domain0的後端驅動在收到封包之後,則會交由虛擬交換器判別封包應轉發至何處,要往外透過實體網路卡發送,抑或往內送予其他虛擬機器,如此就完成整個虛擬網路的封包流向。  

優點與用途簡介 

OpenvSwitch這款虛擬交換器具備很強的靈活性,可以在管理程序中作為軟體Switch運行,也可以直接部署到硬體設備上作為控制層。  

在Linux環境中可透過編譯成核心模組(Kernel Module)的形式運行於系統核心層內(kernel-based)以提供較佳的運行效能,或是以軟體的方式執行於系統應用層(userspace-based)讓使用者可靈活地操控。此外,OpenvSwitch還支援多種標準的管理接口,如Netlow、sFlow、RSPAN、ERSPAN、CLI。  

OpenvSwitch和LinuxBridge的差別 

目前Linux預設已在核心中提供L2封包交換模組Bridge,Linux Bridge可提供不同虛擬器間的網路數據封包交換,然而OpenvSwitch與LinuxBridge仍有些許的差異,比較如下表所示。  



可移動性設定組態 

傳統的Bridge在做IP位址轉移時,必須在相同的L2網路環境,然而OpenvSwitch支援GRE tunnel技術,可在任意網路環境中轉移,而且OpenvSwitch易於佈建,每一個佈建案例都可以透過管理介面獨立區分管理,同時在跨虛擬器溝通(inter-VM communication)間具有通透性,其功能多層次的特性可以使轉送封包的狀態跨多台虛擬器,且可運用不同的交換器功能。例如policy routing state、ACLs、QoS policy、monitoring configuration (e.g. NetFlow, sFlow)。  

此特性可以有效地與實體網路拓樸做區分,例如一個遠端程式若運行在虛擬控制平台上,可移植其網路設定在多台虛擬機器間。  

即時反映網路狀態 

虛擬環境常常會因需求不同而有所改變,同時也須改變邏輯網路環境,而OpenvSwitch提供一個狀態資料庫(State Database),支援遠端控制,因此可以隨時反映出網路環境的改變。  

自動維護邏輯標籤 

分散式虛擬交換器常常添加標籤(Tag)在網路封包,以維護整體網路的邏輯內容,因此如何有效率且正確地維護邏輯標籤,會是分散式虛擬交換器所需面臨的問題。  

OpenvSwitch的標籤規則可被遠端程式存取與編排,同時它們以最佳的形式儲存,以減少網路設備的負擔。OpenvSwitch所提供的VPN GRE tunnel,可以遠端操控tunnel,因此能夠被用於建立私有的虛擬網路環境。  

提升封包處理效能 

OpenvSwitch由於精簡其位於kernel中的程式碼,封包轉送可運行於kernel中,因此可以減輕處理封包的負擔,在執行效能上較傳統之Bridge有明顯的改進。同時,它也可以兼容其他網路應用服務,如QoS。  

由於OpenvSwitch利用Linux中已存在的hook點進入kernel,透過kernel裡面的net_device結構,hook網路設備的封包接收和傳送點。然後,讓封包在不同的netdevice之間轉發,修改封包的流向等,因此不須要修改kernel中的程式,即可用模組的型式載入。  

安裝部署 

關於OpenvSwitch的設定,在此將分為編譯,安裝,控制三部分說明,本篇文章以kernel-based的佈建為示範。  

編譯程式碼 

在編譯的過程中依系統不同,可能需要額外安裝必須套件,如autoconf、automake、python等,「--with-l26」參數將OpenvSwitch編譯為kernel-based交換器,此處須確定系統的kernel source路徑正確。  



安裝核心模組 

因為OpenvSwitch是以替換掉系統核心中LinuxBridge的方式運作,因此必須先確定Bridge為模組型式而且可以被移除,若是直接編在核心中,便不適用此方式,移除後便可以載入openvswitch_mod.ko核心模組。  



建立OpenvSwitch狀態資料庫,儲存網路邏輯環境設定,執行ovsdb-server,讓管理員可以透過unix domain socket遠端設定資料庫內容,當資料庫第一次建立好後須執行「ovs-vsctl --no-wait init」初始化資料庫。  



最後的步驟就是啟動ovs-vswitchd daemon,並將其連線到unix domain socket。  



系統控制操作 

當上述步驟完成後,便可以用ovs-vsctl作設定bridges或是控制interface ports的動作。  



此外,OpenvSwitch同時提供支援相容於Linux Bridge「brctl」指令的模組。  



將上述兩個模組與daemon載入後,便可用brctl相關指令進行操作。  



實際操作 

經過上述佈建流程後,接下來將以兩個例子演練如何使用OpenvSwitch設定網路環境。  

第一個範例是將同一個Bridge的虛擬網卡分配到不同的VLAN,其分布如下:  

▲將同一個Bridge的虛擬網卡分配到不同的VLAN。


VLAN1:VM1,VM3
VLAN2:VM2 

STEP 1:首先,建立一個OpenvSwitch的Bridge。 



STEP 2:將實體網卡eth0加入br0中。 



STEP 3:把VM1的虛擬網卡vif1.0加進VLAN1。 



STEP 4:將VM2的虛擬網卡vif2.0加進VLAN2中。 



STEP 5:最後把VM3的虛擬網卡vif3.0加進VLAN1。  



測試結果是,從VM1中Ping VM3可以連線,因其屬於同一個VLAN1中;從VM1中Ping VM2無法連線,因其分屬於不同的VLANs。 

▲連線測試結果。


第二個範例是使用QoS策略限制虛擬網卡最大傳輸率(Rate Limiting),其相關設定如下:  

Rate limit VM1: 1 Mbps 
Rate limit VM2: 10 Mbps  

▲使用QoS策略限制虛擬網卡最大傳輸率。


在此須設定ingress_policing_rate、ingress_policing_burst這兩個虛擬網卡參數:  

ingress_policing_rate:虛擬機器所允許傳送的最大傳輸率(kbps)。 
ingress_policing_burst:虛擬網卡在policing_rate下所允許最大傳輸量(kb)。  

STEP 1:首先,在VM1中設定rate limit為1Mbps。 



STEP 2:然後,在VM2中將rate limit設定為10Mbps。  



這裡以iperf 2.0.4這套網路效能測試工具來測量VM1與VM2的封包傳送頻寬,測試結果顯示,當VM1為client連到VM2 server的時候,頻寬測得為1Mbps;當VM2為client連到VM1 server的時候,頻寬則測得為10Mbps。  

▲測量VM1與VM2的封包傳送頻寬。


效能測試 

前面提到OpenvSwitch因其精簡程式碼設計,並執行於系統核心層中,所以能有效提高處理效能。  

在此以iperf 2.0.4分別對於OpenvSwitch(version 1.1.0pre2)和LinuxBridge(kernel 2.6.32)作效能測試評比。  

下圖以每10秒統計一次throughput測試時間120秒,可以看出OpenvSwitch整體效能遠優於LinuxBridge。  

▲效能趨勢圖。


從以下圖表可以看出LinuxBridge的平均throughput為11.21Gbps,而OpenvSwitch則為14.88Gbps,整體效能提升32%。  

▲平均效能圖。


結語 

本文介紹了以開放原始碼開發的虛擬交換器OpenvSwitch,用來建置雲端虛擬網路交換機制,其優異的處理效能與靈活的操作,提供管理人員一個很好的使用經驗。目前最新版的OpenvSwitch已經內建於雲端虛擬平台開發組織Xen.org所推出的Xen Cloud Platform裡,並可部署在多種虛擬平台如Xen、XenServer、KVM、Proxmox VE和VirtualBox等。  

2012年2月9日 星期四

Loadrunner 性能測試伺服器監控指標


伺服器資源監控指標:
記憶體:
1 UNIX資源監控中指標記憶體頁交換速率(Paging rate),如果該值偶爾走高,表明當時有執行緒競爭記憶體。如果持續很高,則記憶體可能是瓶頸。也可能是記憶體訪問命中率低。
2 Windows資源監控中,如果Process\Private Bytes計數器和Process\Working Set計數器的值在長時間內持續升高,同時Memory\Available bytes計數器的值持續降低,則很可能存在記憶體洩漏。
記憶體資源成為系統性能的瓶頸的徵兆:
很高的換頁率(high pageout rate);
進程進入不活動狀態;
交換區所有磁片的活動次數可高;
可高的全域系統CPU利用率;  
記憶體不夠出錯(out of memory errors)
處理器:
1 UNIX資源監控(Windows作業系統同理)中指標CPU佔用率(CPU utilization),如果該值持續超過95%,表明瓶頸是CPU。可以考慮增加一個處理器或換一個更快的處理器。如果伺服器專用於SQL Server,可接受的最大上限是80-85%  
合理使用的範圍在60%70%
2 Windows資源監控中,如果System\Processor Queue Length大於2,而處理器利用率(Processor Time)一直很低,則存在著處理器阻塞。
CPU資源成為系統性能的瓶頸的徵兆:  
很慢的回應時間(slow response time)  
CPU閒置時間為零(zero percent idle CPU)  
過高的用戶佔用CPU時間(high percent user CPU)  
過高的系統佔用CPU時間(high percent system CPU)  
長時間的有很長的運行進程佇列(large run queue size sustained over time)
磁片I/O
1 UNIX資源監控(Windows作業系統同理)中指標磁片交換率(Disk rate),如果該參數值一直很高,表明I/O有問題。可考慮更換更快的硬碟系統。
2 Windows資源監控中,如果 Disk TimeAvg.Disk Queue Length的值很高,而Page Reads/sec頁面讀取操作速率很低,則可能存在磁片瓶徑。
I/O資源成為系統性能的瓶頸的徵兆 :
過高的磁片利用率(high disk utilization)  
太長的磁片等待佇列(large disk queue length)  
等待磁片I/O的時間所占的百分率太高(large percentage of time waiting for disk I/O)  
太高的物理I/O速率:large physical I/O rate(not sufficient in itself)  
過低的緩存命中率(low buffer cache hit ratio(not sufficient in itself))  
太長的運行進程佇列,但CPU卻空閒(large run queue with idle CPU)
4.資料庫伺服器:
SQL Server資料庫:
1 SQLServer資源監控中指標緩存點擊率(Cache Hit Ratio),該值越高越好。如果持續低於80%,應考慮增加記憶體。
2 如果Full Scans/sec(全資料表掃描/秒)計數器顯示的值比12高,則應分析你的查詢以確定是否確實需要全資料表掃描,以及SQL查詢是否可以被優化。  
3 Number of Deadlocks/sec(鎖死的數量/):鎖死對應用程式的可伸縮性非常有害,並且會導致惡劣的用戶體驗。該計數器的值必須為0
4 Lock Requests/sec(鎖請求/),通過優化查詢來減少讀取次數,可以減少該計數器的值。
Oracle資料庫:
1 如果自由記憶體接近於0而且庫快存或資料字典快存的命中率小於0.90,那麼需要增加SHARED_POOL_SIZE的大小。
快存(共用SQL區)和資料字典快存的命中率:  
select(sum(pins-reloads))/sum(pins) from v$librarycache;  
select(sum(gets-getmisses))/sum(gets) from v$rowcache;  
自由記憶體: select * from v$sgastat where name=’free memory’;  
2 如果資料的緩存命中率小於0.90,那麼需要加大DB_BLOCK_BUFFERS參數的值(單位:塊)。
緩衝區快取記憶體命中率:
select name,value from v$sysstat where name in (’db block gets’,
‘consistent gets’,'physical reads’) ;
Hit Ratio = 1-(physical reads / ( db block gets + consistent gets))
3 如果日誌緩衝區申請的值較大,則應加大LOG_BUFFER參數的值。
日誌緩衝區的申請情況
select name,value from v$sysstat where name = ‘redo log space requests’ ;
4 如果記憶體排序命中率小於0.95,則應加大SORT_AREA_SIZE以避免磁片排序
記憶體排序命中率
select round((100*b.value)/decode((a.value+b.value), 0, 1, (a.value+b.value)), 2)from v$sysstat a, v$sysstat b where a.name=’sorts (disk)’ and b.name=’sorts (memory)’
注:上述SQL ServerOracle資料庫分析,只是一些簡單、基本的分析,特別是Oracle資料庫的分析和優化,是一門專門的技術,進一步的分析可查相關資料。