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

###############################

SCSI

SAN

ISCSI

SAN和NAS的對比

ISCSI+gfs2+cLVM的實現

###############################


SCSI

計算機體系結構

101813573.png

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

  • 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經常配合集羣文件系統(gfs2、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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章