###############################node
SCSIvim
SANbash
ISCSI服務器
SAN和NAS的對比網絡
ISCSI+gfs2+cLVM的實現架構
###############################ide
SCSI性能
計算機體系結構
測試
CPU:核心組件,負責從memory中讀取數據並進行處理。spa
Memory:核心組件,經過北橋與外圍存儲設備進行交換,做爲易失性存儲有極高的存儲效率,但斷電後數據會丟失。
IDE:有限的接口上,可以鏈接的設備有限,IDE的控制器在數據傳輸過程當中的協議封裝能力不好,整個傳輸過程須要大量CPU時鐘週期的參與,這就意味着CPU要花費大量的時候完成數據的讀入和寫出,在業務處理比較繁忙和CPU資源極尤其重要的場合下是沒法忍受的。
SCSI:是一種I/O技術,SCSI規範了一種並行的I/O總線和相關的協議,除了硬盤轉速上的提高外,總線的適配器HBA(HostBusAdapter)卡中內置了控制芯片,此控制芯片能夠完成協議的封裝,能夠大量下降CPU的參與,此外因爲SCSI的數據傳輸是以塊的方式進行的,所以它具備如下特色:設備無關性、多設備並行、高帶寬、低系統開銷。
SCSI使用體系結構
窄SCSI總線:最多容許8個SCSI設備和它進行鏈接。
寬SCSI總線:最多容許16個不一樣的SCSI設備和它進行鏈接
SCSI ID:一個獨立的SCSI總線按照規格不一樣能夠支持8或16個SCSI設備,設備的編號須要經過SCSI ID(Target)來進行控制,系統中每一個SCSI設備都必須有本身惟一的SCSI ID,SCSI ID實際上就是這些設備的地址。
SCSI的侷限性
傳輸距離:因爲SCSI線纜的長度有限,限制了SCSI的延展性。
服務主機:Target數量限制了可服務的主機數。
SAN
可以經過非SCSI線纜傳輸SCSI協議報文,而且能將其路由至目標存儲設備的網絡成爲Storage Area Network(區域存儲網絡)。
SCSI協議報文
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的對比
FCSAN:須要FC的HBA,存儲端互相也須要FC的交換機或者SCSI線纜,應用程序存儲數據由Adapter Driver向存儲網絡發起請求並完成數據存取。
IPSAN:應用程序的請求先交由SCSI驅動封裝(協議報文各類指令),再由ISCSI驅動封裝(用於聯繫ISCSI服務器端),藉助於TCP/IP網絡發送至ISCSI服務器端。
IPSAN的傳輸過程
ISCSI服務端:經過安裝一款成熟的存儲管理軟件ISCSI Target,也稱爲Target。
ISCSI客戶端:能夠是硬件,也能夠是安裝iscsi客戶端軟,稱爲Initiator。客戶端的連接方式有如下三種:
以太網卡+initiator軟件:成本低,但須要佔用客戶端主機部分資源用於ISCSI和TCP/IP協議之間的解析, 適用於低I/O帶寬的環境下。
硬件TOE網卡+initiator:TOE(TCP Offload Engine)功能的智能以太網卡能夠完成ISCSI的封裝,但SCSI封裝仍以軟件方式運做,使得客戶端主機能夠從繁忙的協議中解脫出來,大幅度提升數據傳輸速率,下降了客戶端主機資源消耗。但TOE功能的網卡,成本較高。
ISCSI HBA卡鏈接:不須要安裝客戶端軟件,所有靠硬件,數據傳輸性能最好,但成本很高,客戶端數量和性價比成反比。
SAN和NAS的對比
註釋:因爲SAN是在DAS的基礎之上增長了延展性,所以下圖以DAS做比較:
結論:從圖中能夠看出NAS的文件系統在服務器端,而SAN的文件系統在客戶端,由於SAN的客戶端能夠實現對分區的建立格式化等操做,而NAS不能夠。所以SAN常常配合集羣文件系統(gfs二、ocfs)一塊兒使用,爲的就是避免多個Initiator對Target的同一資源在同一時刻進行徵用帶來的腦裂。
ISCSI+gfs2+cLVM的實現
架構圖以下:
部署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