搭建iscsi存儲系統
- 2019 年 10 月 4 日
- 筆記
1、常見的存儲設備
存儲設備:陣列櫃



SAS:容量小, 300G, 600G, 900G, 價格貴。
SATA:容量大,500G, 750G, 1T, 2T, 3T, 4T 不支持熱插拔,價格低。
假SAS盤:容量大, 支持熱插拔,價格低, SAS接口的sata盤 , 速度慢 。
2、SAS接口和SATA接口區分
SAS接口:


SATA接口:


硬盤托架: 方便熱插拔:

3、關於存儲方式
1.直連式存儲:我們普通PC機就是直連存儲,使用跳線和主板總線相連
優點:1. 使用方便
2. 直接識別為一個塊設備。然後,製作分區、文件系統、掛載訪問
缺點:1. 消耗本服務器的資源I/O、CPU
2.非直連式存儲:NAS網絡附屬存儲和SAN存儲區域網絡。
網絡性能很重要1000mbps、10000mbps (萬兆網卡,10G)、100G網卡
以太網/光纖網 依賴網絡, 網卡, 網線, ==> 網絡
4、NAS網絡存儲
NAS(Network Attached Storage),NAS服務器是連接在網絡上,具備資料存儲功能的服務器,一種專用數據存儲服務器。網絡附屬存儲基於標準網絡協議(Tcp/IP)實現數據傳輸,為網絡中的Windows / Linux / Mac OS 等各種不同操作系統的計算機提供文件共享和數據備份。部分NAS系統還可以支持FTP, HTTP, SQL SQLSERVER等等功能,比如說現在NAS品牌 群暉!

國內: 群暉Synology, 希捷, 西部數碼, 威聯通
國際: Netapp, OUO, Dell, EMC
專業開源NAS系統: freeNAS, nas4free, OpenMediaValut, [H群暉]
美國八大金剛: Cisco, IBM, Google, 高通, Intel, Apple, 甲骨文, Microsoft
去IOE計劃: IBM[小型機],Oracle[DB],EMC[存儲]
NAS優點:1. I/O消耗由前端服務器轉移到後端存儲設備上
2. 擴展方便
NAS缺點:以前網絡會成為瓶頸, 但是現在使用10G光纖卡,就可以解決這個問題。
5、NAS常見的技術:NFS和CIFS
NAS採用了NFS技術實現類Unix系統之前存儲共享。使用CIFS實現Windows與類Unix系統之前數據共享。samba 服務器就是使用CIFS計術。
SAN存儲:
存儲區域網絡(Storage Area Network and SAN Protocols,簡寫SAN,即存儲區域網絡,是一種高速網絡,提供在計算機與存儲系統之間的數據傳輸。存儲設備是指一台或多台用以存儲計算機數據的磁盤設備,通常指磁盤陣列。
SAN存儲,採用網狀通道(Fibre Channel ,簡稱FC)技術,通過FC交換機連接存儲陣列和服務器主機,建立專用於數據存儲的區域網絡。
SAN由於其基礎是一個專用網絡,因此擴展性很強,不管是在一個SAN系統中增加一定的存儲空間還是增加幾台使用存儲空間的服務器都非常方便。
6、NAS與SAN的區別在兩方面:
第一,從網絡架構來說,本質區別在於:
NAS,直接使用TCP/IP傳輸數據。SAN使用SCSI或iSCSI協議傳輸數據。
第二,從文件讀寫實現方法上來說,本質區別在於:
NAS採用了NFS和 CIFS技術實現文件共享。說明NAS是基於操作系統的「文件級」讀寫操作。
SAN中計算機和存儲間的接口是底層的塊協議,它按照協議頭的「塊地址+偏移地址」來定位。共享的存儲和前端的操作系統類型沒有關係,任何服務器操作系統,都可以正常識別。
7、 搭建iscsi存儲系統
IP-SAN的運行模式:C/S模式,工作端口3260
服務端:服務名-target 172.17.1.151(目標)
客戶端:服務名-initator 172.17.1.150 172.17.1.152(發起人).
7.1安裝target
[root@docker-02 ~]# yum install -y scsi-target-utils ##主配置文件 [root@docker-02 ~]# ls /etc/tgt/targets.conf /etc/tgt/targets.conf ##啟動服務 [root@docker-02 ~]# /etc/init.d/tgtd start [root@docker-02 ~]# netstat -antup | grep 3260
7.2新建存儲分區: sda4
[root@localhost ~]# fdisk -l Disk /dev/sda: 107.4 GB, 107374182400bytes 255heads, 63sectors/track, 13054cylinders Units =cylinders of 16065* 512=8225280bytes Sector size (logical/physical): 512bytes / 512bytes I/O size (minimum/optimal): 512bytes / 512bytes Disk identifier: 0x000b076e Device Boot Start End Blocks Id System /dev/sda1 * 1 26 204800 83Linux Partition 1does not end on cylinder boundary. /dev/sda2 26 287 2097152 82Linux swap / Solaris Partition 2does not end on cylinder boundary. /dev/sda3 287 13055 102554624 83Linux ##新建擴容時新建分區報錯No free sectors available,平時不用swap分區,我就把/dev/sda2 swap分區給刪除了。 [root@localhost ~]# fdisk /dev/sda WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m forhelp): p Disk /dev/sda: 107.4 GB, 107374182400bytes 255heads, 63sectors/track, 13054cylinders Units =cylinders of 16065* 512=8225280bytes Sector size (logical/physical): 512bytes / 512bytes I/O size (minimum/optimal): 512bytes / 512bytes Disk identifier: 0x000b076e Device Boot Start End Blocks Id System /dev/sda1 * 1 26 204800 83Linux Partition 1does not end on cylinder boundary. /dev/sda3 287 13055 102554624 83Linux Command (m forhelp): n Command action e extended p primary partition (1-4) ## 選(p) Selected partition 4 First cylinder (1428-2610, default 1428): Using default value 1428 Last cylinder, +cylinders or +size{K,M,G} (1428-2610, default 2610): Command (m forhelp): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks. [root@docker-02 ~]# reboot 或者 partx -a /dev/sda #使分區生效,多執行幾次即可 [root@docker-02 ~]# fdisk -l Disk /dev/sda: 107.4 GB, 107374182400bytes 255heads, 63sectors/track, 13054cylinders Units =cylinders of 16065* 512=8225280bytes Sector size (logical/physical): 512bytes / 512bytes I/O size (minimum/optimal): 512bytes / 512bytes Disk identifier: 0x000b076e Device Boot Start End Blocks Id System /dev/sda1 * 1 26 204800 83Linux Partition 1does not end on cylinder boundary. /dev/sda3 287 13055 102554624 83Linux /dev/sda4 26 286 2091471 83Linux Partition table entries are not indisk order
7.3配置sda4共享
[root@docker-02 ~]# vim /etc/tgt/targets.conf ##寫入以下內容 下面這段內容是參考模板 75#<target iqn.2008-09.com.example:server.target4> 76# direct-store /dev/sdb # Becomes LUN 1 77# direct-store /dev/sdc # Becomes LUN 2 78# direct-store /dev/sdd # Becomes LUN 3 79# write-cache off 80# vendor_id MyCompany Inc. 81#</target> 在上面模版後面新增內容為: <target iqn.2018-01.cn.docker:target_san1> backing-store /dev/sda4 initiator-address 172.17.1.150 initiator-address 172.17.1.152 vendor_id docker product_id target1 </target>
注釋:
default-driver iscsi #此配置文件默認全部注釋,使用iscsi驅動
<tarrget iqn.2018-1.cn.docker:target_san1> # iscsi正規名字格式:iqn.年-月.主機名倒着寫: target端名字
backing-store /dev/sda4 #可以是具體的分區,也可以是DD出來的文件。不能小於5G。(後面的文件系統是GFS,光日誌空間就128M)
initiator-address 172.17.1.150 #指定允許訪問的此存儲主機
initiator-address 172.17.1.152 #指定允許訪問的此存儲主機
vendor_id 「docker」 #vendor是供應廠商編號標識這個設備(字符不要過長)
product_id "TARGET1" # 產品編號
</target>
7.4啟動服務
[root@docker-02 ~]# service tgtd restart [root@docker-02 ~]# netstat -antup | grep 3260 或者tgt-admin --show查看狀態 [root@docker-02 ~]# tgt-admin --show Target 1: iqn.2018-01.cn.docker:target_san1 System information: Driver: iscsi State: ready I_T nexus information: I_T nexus: 4 Initiator: iqn.1994-05.com.redhat:13fcc121c9e Connection: 0 IP Address: 172.17.1.152 I_T nexus: 5 Initiator: iqn.1994-05.com.redhat:13fcc121c9e Connection: 0 IP Address: 172.17.1.150 LUN information: LUN: 0 Type: controller SCSI ID: IET 00010000 SCSI SN: beaf10 Size: 0MB, Block size: 1 Online: Yes Removable media: No Prevent removal: No Readonly: No Backing store type: null Backing store path: None Backing store flags: LUN: 1 Type: disk SCSI ID: IET 00010001 SCSI SN: beaf11 Size: 2142MB, Block size: 512 Online: Yes Removable media: No Prevent removal: No Readonly: No Backing store type: rdwr Backing store path: /dev/sda4 Backing store flags: Account information: ACL information: 172.17.1.150 172.17.1.152
8、配置客戶端: 172.17.1.152
8.1安裝服務
[root@docker-03 opt]# yum install -y iscsi-initiator-utils [root@docker-03 opt]# service iscsid restart [root@docker-03 opt]# iscsiadm -m discovery -t sendtargets -p 172.17.1.151:3260 [root@docker-03 opt]# /etc/init.d/iscsid status iscsid (pid 1553) 正在運行...
8.2target存儲服務器信息在客戶端存儲的位置
[root@docker-03 opt]# yum install -y tree ##安裝tree命令,用於查詢樹 [root@docker-03 opt]# tree /var/lib/iscsi/ ##發現target後,會在此目錄先生成樹結構 /var/lib/iscsi/ ├── ifaces ├── isns ├── nodes │ └── iqn.2018-01.cn.docker:target_san1 │ └── 172.17.1.151,3260,1 │ └── default ├── send_targets │ └── 172.17.1.151,3260 │ ├── iqn.2018-01.cn.docker:target_san1,172.17.1.151,3260,1,default -> /var/lib/iscsi/nodes/iqn.2018-01.cn.docker:target_san1/172.17.1.151,3260,1 │ └── st_config ├── slp └── static 10directories, 2files
8.3客戶端服務啟動關係
先啟動iscsid,再啟動iscsi,iscsi是根據/var/lib/iscsi/中發現的信息,識別設備
##關閉 [root@docker-03 opt]# service iscsi stop [root@docker-03 opt]# service iscsid stop ##啟動 [root@docker-03 opt]# service iscsid restart [root@docker-03 opt]# service iscsi restart ##開機自動啟動 [root@docker-03 opt]# chkconfig iscsi on [root@docker-03 opt]# chkconfig iscsid on
8.4查看發現到新硬盤以及卸載,掛載存儲設備
##卸載方法一 [root@docker-03 opt]# ll /dev/sdb brw-rw---- 1root disk 8, 169月 2916:51 /dev/sdb ##卸載 [root@docker-03 opt]# iscsiadm -m node -T iqn.2018-01.cn.docker:target_san1 -u ##登錄存儲存儲設備 [root@docker-03 opt]# iscsiadm -m node -T iqn.2018-01.cn.docker:target_san1 -l 上面的方法看起來比較複雜,命令比較長,簡單的通過服務卸載與登陸 ##卸載方法二 [root@docker-03 opt]# service iscsi stop 登錄: [root@docker-03 opt]# service iscsi start
9、在172.17.1.152上對識別出來的硬盤,分區格式化,掛載使用。
[root@docker-03 opt]# iscsiadm -m discovery -t sendtargets -p 172.17.1.151:3260 ##發現存儲設備 [root@docker-03 opt]# service iscsid restart ##登錄存儲 [root@docker-03 opt]# service iscsi restart [root@docker-03 opt]# ll /dev/sdb brw-rw---- 1root disk 8, 169月 2916:51 /dev/sdb [root@docker-03 opt]# fdisk /dev/sdb ##劃分一個分區當作本地盤使用即可 WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m forhelp): p Disk /dev/sdb: 2141MB, 2141666304bytes 66heads, 62sectors/track, 1022cylinders Units =cylinders of 4092* 512=2095104bytes Sector size (logical/physical): 512bytes / 512bytes I/O size (minimum/optimal): 512bytes / 512bytes Disk identifier: 0x4c80a2ad Device Boot Start End Blocks Id System /dev/sdb1 1 1022 2090981 83Linux Command (m forhelp): n Command action e extended p primary partition (1-4) p Partition number (1-4): Value out of range. Partition number (1-4): Value out of range. Partition number (1-4): 1 ##以下回車之後w保存 [root@docker-03 opt]# ll /dev/sdb* ##查看分區 brw-rw---- 1root disk 8, 169月 2917:06 /dev/sdb brw-rw---- 1root disk 8, 179月 2917:06 /dev/sdb1 [root@docker-03 opt]# mkfs.ext4 /dev/sdb1 ##格式化分區 [root@docker-03 opt]# mount /dev/sdb1 /opt/ ##掛載使用 [root@docker-03 opt]# cp /etc/passwd /opt/ ##測試文件寫入 [root@docker-03 opt]# cd /opt/ [root@docker-03 opt]# ls lost+found passwd
10、測試: 172.17.1.152 和172.17.1.150 都掛載上硬盤,數據同步
[root@docker-01 opt]# yum -y install iscsi-initiator-utils [root@docker-01 opt]# iscsiadm -m discovery -t sendtargets -p 172.17.1.151:3260 [root@docker-01 opt]# service iscsid restart [root@docker-01 opt]# service iscsi restart [root@docker-01 opt]# ls /dev/sdb* /dev/sdb /dev/sdb1 [root@docker-01 opt]# mount /dev/sdb1 /opt/ [root@docker-01 opt]# ls /opt/ ##可以看到數據已經同步過來了 lost+found passwd 添加新數據測試同步: [root@docker-01 ~]# cp /etc/sysconfig/network /opt/ [root@docker-01 ~]# ls /opt/ lost+found network passwd 172.17.1.152上查看: [root@docker-03 opt]# ls lost+found passwd ##只看到passwd 沒有同步,是因為我們使用的ext4 文件系統,ext4文件系統不支持多個客戶端同時使用。使用GFS文件系統就可以同步。