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