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