歡迎您光臨本站 註冊首頁

multipath & gfs調優手札

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

multipath & gfs調優手札

寫得比較流水賬,大家莫見怪,:)

=================================

還真是無需求不前進了!

M哥發來需求要我看看以前在前前公司擺弄的Global Filesystem為何性能如此底下以至於不及老邁的NFS。M哥的忙怎麼不幫,雖然不知能否幫得到,先答應下來回去看文檔。

丟了差不多一年的這個GFS,先把以前寫的文檔(非官方那種,官方總是帶有推銷性質的)翻了一遍,總算找了點感覺回來。M哥提出是否multipath的問題,於是先從此方向著手。

multipath全名叫device-mapper-multipath,顧名思義,設備映射、多條路徑,在現實環境中往往是SAN架構中的一個block設備,通過多個HBA卡和多台SAN交換機后,被主機訪問到時呈現出多條路徑,其實這多條路徑指向的是同一個物理設備。multipath的工作就是把多個路徑映射成一個單一的路徑,在主機看來就只有一個塊設備。multipath還掌管主機對該設備的訪問細節,比如是以負載均衡還是failover方式訪問,請求方式是round-robin還是其他,以及底層設備的基礎。

鑒於我這裡無真實環境,遂用虛擬機vware來實現。我現在的需求是,模擬出一個物理設備在主機方來看是有多條路徑的,即/dev/sdc、/dev/sdd、/dev/sde之類的都指向同一個設備。首先想到的是在虛擬機里把同一個硬碟添加幾次,但5秒鐘后vmware告訴我不行。也是,vmware添加硬碟是通過匯流排方式的,而一塊硬碟是如何也不能接到兩個匯流排的介面上的。

然後,想到了一個iscsi的方式。因為以前接觸過一些iscsi的概念。所謂iscsi,即Internet scsi匯流排技術,它的原理是把scsi協議封裝在ip包里,通過tcp/ip協議傳輸到對端機器,從而讓ip網路上的機器能以scsi匯流排的方式訪問到某台伺服器的本地磁碟。到這一想,哎,有門路了,因為我即使同一個本地硬碟,而我ip鏈路可以有很多的嘛。

想到馬上干,驅貓上網找RHEL下的iscsi模擬軟體,找到一個套裝,iscsitarget(server site)+iscsi-initialator(client site,RHEL 5自帶)。因為是基於RHEL 5 os系統,當然是找兼容性早已做好了的el5.rpm包了。iscsitarget的依賴性依然需要自己解決。initialator的不用。以前最怕的就是解決rpm包的依賴性,現在發現一個非常好的網站,rpm.pbone.net,它可以幫你找到比如缺少了什麼庫.so文件具體位於哪一個rpm包,並且會給出相應平台的rpm包(如果有)。依賴性解決,rpm安裝無誤。具體怎麼裝就不說了,模擬multipath的原理是這樣的。首先iscsitarget釋放出兩個target,名字一樣,但是id不同,重要的是ScsiId這個必須一致(以0x86開頭的字元串),這樣在客戶端看來才是同一個block設備。

ok,客戶端既然看到了兩個路徑/dev/sdb、/dev/sdc,那麼,繼續,裝multpath,RHEL 5自帶。相關進程啟動后(當然multipath.conf要配置),multipath -ll看到已經map到一個路徑例如/dev/dm-0的設備。接下來就在這個dm-0上mkfs,mount,然後進行常規測試比如dd。邊測邊調,最後發現一個比較好的值,rr_min_io 5000,在該值下基本達到了直接寫物理磁碟的極限了。doc上說rr_min_io的值為切換到下一條路徑前執行的io次數,線上環境的值為100次,顯然是有點小了,這樣會導致multipath在大量小io讀寫操作是頻繁切換路徑,造成不必要的開銷。

multipath的問題基本解決,是參數配置問題。

接下來看一下GFS方面,是否有得調。模擬真實環境,在iscsitarget端釋放出兩個物理磁碟(當然,vmware下的物理磁碟而已,不是真的disk),然後分別兩台client段裝multipath,裝rhcs+gfs套件。gfs這些不打算再寫怎麼裝了,RHEL 5在這方面做得很好了,沒有以前那麼麻煩,所有的包在安裝盤裡都有,依賴性可以通過建立cdrom上rpm包的yum倉庫來解決。

gfs的配置是拷貝了線上的,很簡單,兩個node,手動fence,資源啊什麼的都不用設置。

通過iscsitarget釋放出的兩個磁碟,4個target,兩個target對應一個磁碟,這樣在客戶端看來就是有4塊設備了,通過multipath一整合,剛好/dev/dm-1、/dev/dm-2,這裡不是從0開始了,估計是multipath在系統里殘留了些東西吧,不去深究。

啟動cman,啟動clvmd即可,不需要在啟動gfs/gfs2(這兩個是用來檢查fstab里是否有gfs掛載點的,和netfs用途一樣),不需要啟動rgmanager(這個是用來管理集群資源的,gfs不屬於集群的資源,而是專門的集群,叫存儲集群,這個在rhcs overview里已經明確的定義了)。這裡需要在兩台node執行。

接下來就是創建pv,vg,創建一個條帶化的lv(參數 -i 2),只需要在一台node執行即可,另一台node已經功過rhcs提供的基本集群功能和clvmd進程獲得了相關信息,可以用xxdispay來看相關lvm的東西。然後mkfs.gfs,也是只需要在一台node。

最後兩台node都mount.gfs即可(當然,mount還有參數)。

正如線上,df,ls -R都很慢。上網查看gfs相關的更新,看到gfs2針對gfs進行了很多bugfix,於是在測試完一遍gfs后,改成gfs2方式再進行測試。順便也在iscsitarget那台機export了一個本地目錄,結果gfs2和nfs測試結果表面,gfs2確實有改進!贊一個。

關於改進了些啥,以及一下相關的技術細節,這裡不詳談。有興趣去redhat.com上去搜gfs2吧。

至此,自認為基本可以進行下一步的線上改造了,當然,在改造前還需對rhcs+gfs的doc進行更深入的了解。這個我就不去參與了,哈哈,顧問一下是可以的。

總結:gfs當初上線太急,當然也因為它優勢明顯。後期還需進行大量的文檔閱讀和測試工作,才能把rhcs+gfs這東西玩好,總之,rhcs是一個好東西,業界基本的集中集群類型都能在其基礎上搭建。對於一些比較care cost-effective的場合來說再合適不過了。

[火星人 ] multipath & gfs調優手札已經有131次圍觀

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