搭建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文件系統就可以同步。