SAN之可擴展的集羣共享存儲

###############################node

SCSIvim

SANbash

ISCSI服務器

SAN和NAS的對比網絡

ISCSI+gfs2+cLVM的實現架構

###############################ide


SCSI性能

計算機體系結構
測試

101813573.png

  • CPU:核心組件,負責從memory中讀取數據並進行處理。spa

  • Memory:核心組件,經過北橋與外圍存儲設備進行交換,做爲易失性存儲有極高的存儲效率,但斷電後數據會丟失。

  • IDE:有限的接口上,可以鏈接的設備有限,IDE的控制器在數據傳輸過程當中的協議封裝能力不好,整個傳輸過程須要大量CPU時鐘週期的參與,這就意味着CPU要花費大量的時候完成數據的讀入和寫出,在業務處理比較繁忙和CPU資源極尤其重要的場合下是沒法忍受的。

  • SCSI:是一種I/O技術,SCSI規範了一種並行的I/O總線和相關的協議,除了硬盤轉速上的提高外,總線的適配器HBAHostBusAdapter)卡中內置了控制芯片,此控制芯片能夠完成協議的封裝,能夠大量下降CPU的參與,此外因爲SCSI的數據傳輸是以塊的方式進行的,所以它具備如下特色設備無關性、多設備並行、高帶寬、低系統開銷

SCSI使用體系結構

104549352.png

  • 窄SCSI總線:最多容許8個SCSI設備和它進行鏈接。

  • 寬SCSI總線:最多容許16個不一樣的SCSI設備和它進行鏈接

  • SCSI ID:一個獨立的SCSI總線按照規格不一樣能夠支持8或16個SCSI設備,設備的編號須要經過SCSI ID(Target)來進行控制,系統中每一個SCSI設備都必須有本身惟一的SCSI ID,SCSI ID實際上就是這些設備的地址。

SCSI的侷限性

105949434.png

  • 傳輸距離:因爲SCSI線纜的長度有限,限制了SCSI的延展性。

  • 服務主機:Target數量限制了可服務的主機數。



SAN

  • 可以經過非SCSI線纜傳輸SCSI協議報文,而且能將其路由至目標存儲設備的網絡成爲Storage Area Network(區域存儲網絡)。

113205604.png


SCSI協議報文

113957158.png

  • Physical Interconnects and Transport Protocols:定義物理傳輸介質和傳輸報文格式,經過光信道傳輸就成爲FCSAN,經過IP網絡傳輸就成爲IPSAN

  • Shared Command Set:SCSI共享(公共)命令集,定義存儲或讀取等相關命令。

  • SCSI Device-Type Specific Command Sets:不一樣SCSI設備類型特有的命令。

  • Common Access Method:公共訪問方法。


ISCSI

IPSAN和FCSAN的對比

120511922.png

  • FCSAN:須要FC的HBA,存儲端互相也須要FC的交換機或者SCSI線纜,應用程序存儲數據由Adapter Driver向存儲網絡發起請求並完成數據存取。

  • IPSAN:應用程序的請求先交由SCSI驅動封裝(協議報文各類指令),再由ISCSI驅動封裝(用於聯繫ISCSI服務器端),藉助於TCP/IP網絡發送至ISCSI服務器端。

IPSAN的傳輸過程

122335429.png

124959588.png

  • ISCSI服務端:經過安裝一款成熟的存儲管理軟件ISCSI Target,也稱爲Target。

  • ISCSI客戶端:能夠是硬件,也能夠是安裝iscsi客戶端軟,稱爲Initiator。客戶端的連接方式有如下三種:

  • 以太網+initiator軟件成本低,但須要佔用客戶端主機部分資源用於ISCSI和TCP/IP協議之間的解析, 適用於低I/O帶寬的環境下。

  • 硬件TOE網卡+initiatorTOETCP Offload Engine)功能的智能以太網卡能夠完成ISCSI的封裝,但SCSI封裝仍以軟件方式運做,使得客戶端主機能夠從繁忙的協議中解脫出來,大幅度提升數據傳輸速率,下降了客戶端主機資源消耗。但TOE功能的網卡,成本較高。

  • ISCSI HBA卡鏈接:不須要安裝客戶端軟件,所有靠硬件,數據傳輸性能最好,但成本很高,客戶端數量和性價比成反比。


SAN和NAS的對比

註釋:因爲SAN是在DAS的基礎之上增長了延展性,所以下圖以DAS做比較:

123916442.png

結論:從圖中能夠看出NAS的文件系統在服務器端,而SAN的文件系統在客戶端,由於SAN的客戶端能夠實現對分區的建立格式化等操做,而NAS不能夠。所以SAN常常配合集羣文件系統(gfs二、ocfs)一塊兒使用,爲的就是避免多個Initiator對Target的同一資源在同一時刻進行徵用帶來的腦裂。


ISCSI+gfs2+cLVM的實現

架構圖以下:

140212644.png

部署Target端

安裝軟件包

yum install scsi-target-utils

查看當前磁盤情況(將/dev/sdb2發佈出去3GB)

[root@localhost yum.repos.d]# fdisk -l
Disk /dev/sdb: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1217     9775521   83  Linux
/dev/sdb2            1218        1583     2939895   83  Linux

經常使用配置

/etc/tgt/targets.conf   配置文件的方式來管理target
/etc/sbin/tgt-admin     經過配置文件定義
/usr/sbin/tgtadm        經過命令行的方式管來target
service tgtd start      啓動服務

編輯配置文件vim /etc/tgt/targets.conf

<target iqn.2013-08.com.soulboy:sdb1>
        backing-store /dev/sdb2
        initator-address 192.168.1.0/24
</target>

啓動服務

service tgtd start

命令行方式配置

tgtadm --lld iscsi --mode logicalunit --op new --tid 2 --lun 1 --backing-store /dev/sdb2
    tgtadm --lld iscsi --mode target --op bind --tid 2 --initiator-address 192.168.1.0/24

部署各節點

安裝軟件包

yum install -y cman rgmanager gfs2-utils vm2-cluster

確保個節點hosts文件和hostname爲以下

[root@node3 ~]# cat /etc/hosts
192.168.1.21    node1.soulboy.com node1
192.168.1.22    node2.soulboy.com node2
192.168.1.23    node3.soulboy.com node3

各節點時間同步

ntpdate 192.168.1.101

集羣邏輯卷 cLVM共享存儲作成LVM,借用HA的機制,讓多個節點能夠同時對一個捲髮起管理操做。

vim /etc/lvm/lvm.conf
locking_type = 3

定義集羣名稱

ccs_tool create tcluster

添加fence設備

ccs_tool addfence meatware fence_manual

添加集羣成員

ccs_tool addnode -v 1 -n 1 -f meatware node1.soulboy.com
ccs_tool addnode -v 1 -n 2 -f meatware node2.soulboy.com
ccs_tool addnode -v 1 -n 3 -f meatware node3.soulboy.com

在各節點依次啓動服務

service  cman  start                
service  rgmanager start

查看各節點信息

[root@node3 ~]#  ccs_tool lsnode
Cluster name: tcluster, config_version: 7
Nodename                        Votes Nodeid Fencetype
node1.soulboy.com                  1    1
node2.soulboy.com                  1    2
node3.soulboy.com

各節點安裝initator配置並啓動服務

yum --nogpgcheck localinstall iscsi-initiator-utils-6.2.0.872-16.el5.i386.rpm
service iscsi start 啓動服務

各節點客戶端執行發現和登錄操做

[root@localhost mydata]#  iscsiadm -m discovery -t sendtargets -p 192.168.1.50
192.168.1.50:3260,1 iqn.2013-08.com.soulboy:sdb1
192.168.1.50:3260,1 iqn.2013-08.com.soulboy:sdb2
[root@localhost mydata]#  iscsiadm -m node -T iqn.2013-08.com.soulboy:sdb2 -p 192.168.1.50 -l

在任意initator上對共享設備建立分區(各節點在本地識別成sdc)

fdisk /dev/sdc

在其餘節點上執行

partprobe /dev/sdb

在節點三建立物理卷

[root@node3 ~]# pvcreate /dev/sdc

在節點二使用pvs命令查看

[root@node2 ~]# pvs
PV         VG         Fmt  Attr PSize  PFree
/dev/sda2  VolGroup00 lvm2 a--  19.88G    0
/dev/sdc              lvm2 a--   2.80G 2.80G

在節點三建立建立卷組

[root@node3 ~]# vgcreate clustervg /dev/sdc

在節點二使用vgs命令查看

[root@node2]# vgs
  VG         #PV #LV #SN Attr   VSize  VFree
  VolGroup00   1   2   0 wz--n- 19.88G      0
  clustervg    1   1   0 wz--nc  2.80G  2.80G

在節點二建立邏輯卷

[root@node2]# lvcreate -L 1G -n clusterlv clustervg

在節點三使用lvs命令查看

[root@node3 ~]# lvs
LV        VG         Attr   LSize  Origin Snap%  Move Log Copy%  Convert
LogVol00  VolGroup00 -wi-ao 17.88G                              
LogVol01  VolGroup00 -wi-ao  2.00G                              
clusterlv clustervg  -wi-a-  1.00G

在集羣邏輯上使用集羣文件系統(暫時先建立2個日誌區域,加入兩個節點)

mkfs.gfs2 -j 2 -p lock_dlm -t tcluster:lktb1 /dev/clustervg/clusterlv

各節點建立/mydata目錄

mkdir /mydata

各節點掛載邏輯卷clustervg至本地/mydata目錄中

mount -t gfs2 /dev/clustervg/clusterlv /mydata

查看信息

[root@node3 ~]# gfs2_tool df /mydata
/mydata:
  SB lock proto = "lock_dlm"
  SB lock table = "tcluster:lktb1"
  SB ondisk format = 1801
  SB multihost format = 1900
  Block size = 4096
  Journals = 2
  Resource Groups = 8
  Mounted lock proto = "lock_dlm"
  Mounted lock table = "tcluster:lktb1"
  Mounted host data = "jid=1:id=196610:first=0"
  Journal number = 1
  Lock module flags = 0
  Local flocks = FALSE
  Local caching = FALSE
  Type           Total Blocks   Used Blocks    Free Blocks    use%   
  ------------------------------------------------------------------------
  data           524196         66195          458001         13%
  inodes         458018         17             458001         0%

補充

#####馬上同步到磁盤
gfs2_tool settune /mydata new_files_directio 1
#####默認是60秒,日誌刷新次數
log_flush_secs = 60                   
#####擴展邏輯卷物理邊界至2GB(能夠指定選項,不指默認就是擴展所有)
lvextend -L 2G /dev/clustervg/clusterlv
mount -t gfs2 /dev/clustervg/clusterlv /mnt
#####擴展邏輯卷邏輯編輯至2GB
gfs2_grow /dev/clustervg/clusterlv
#####磁盤檢測命令
fsck.gfs2
#####凍結gfs文件系統(只能讀,不能寫)
gfs2_tool freeze /mydata
#####解凍,備份數據的時候能夠用到。
gfs2_tool unfreeze /mydata
註釋:擴展卷組須要iSCSI添加新的設備,和使用LVM同樣建立PV,添加入卷組便可不在演示過程。

測試

節點二

[root@node2 mydata]# pwd
/mydata
[root@node2 mydata]# ls
[root@node2 mydata]# touch node2
[root@node2 mydata]# ls
node2

節點三

[root@node3 mydata]# pwd
/mydata
[root@node3 mydata]# ls
node2
[root@node3 mydata]# rm -rf node2

節點二

[root@node2 mydata]# pwd
/mydata
[root@node2 mydata]# ls
相關文章
相關標籤/搜索