一、ISCSI的基础知识
• Internet SCSI,网际SCSI接口 默认端口 3260
– 一种基于C/S架构的虚拟磁盘技术
– 服务器提供磁盘空间,客户机连接并当成本地磁盘使用
• backstore,后端存储
– 对应到服务端提供实际存储空间的设备,需要起一个管理名称
• target,磁盘组
– 是客户端的访问目标,作为一个框架,由多个lun组成
• lun,逻辑单元
– 每一个lun需要关联到某一个后端存储设备,在客户端会视为一块虚拟硬盘
• ISCSI Qualified Name 名称规范(iqn)
– iqn.yyyy-mm.倒序域名:自定义标识
– 用来识别 target 磁盘组,也用来识别客户机身份
如图,backstore,target,lun的关系如下,客户端的访问点是target,target下有数个lun,可以看做对应backstore的接口,lun与backstore的区别在于lun是虚拟的(相当于关联设备),而backstore是实际存储空间的设备.
二、待做的事
1.服务端
1)安装相关软件
2)创建好backstore存储空间
3)创建好target,以供客户端访问
4)在target下创建lun用来关联实际存储空间backstore
2.客户端
1) 安装相关软件
2) 访问target,从而远程使用共享磁盘,
三、运行环境
两台虚拟机 : server 172.25.0.11
desktop 172.25.0.10
server作为服务器,desktop作为客户端
四、服务器配置
1.修改防火墙默认配置
firewall-cmd --set-default-zone=trusted
2.划分一个分区
这个分区是位backstore准备的,作为数据的存储点,做位lun的访问点.
具体的磁盘以本机环境位主.我在server上配置了一个10G的虚拟磁盘.我打算划分一个5G的主分区作为backstore
1)划分区
fdisk /dev/vdb
2)查看分区
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 10G 0 disk
└─vda1 253:1 0 10G 0 part /
vdb 253:16 0 10G 0 disk
└─vdb1 253:17 0 5G 0 part
我在vdb下划分了一个vdb1,5G的大小
3.安装软件
安装软件包targetcli
yum -y install tragetcli
4.打开targetcli
输入命令 : targetcli
5. 进入到targetcli
输入命令:ls
o- / ..................................................................... [...]
o- backstores .......................................................... [...]
| o- block .............................................. [Storage Objects: 0]
| o- fileio ............................................. [Storage Objects: 0]
| o- pscsi .............................................. [Storage Objects: 0]
| o- ramdisk ............................................ [Storage Objects: 0]
o- iscsi ........................................................ [Targets: 0]
o- loopback ..................................................... [Targets: 0]
默认是什么都没有的
1) 创建backstore
这里有四种存储类型,我们选择创建block
命令: backstores/存储类型 create name=[名称] dev=[分区]
输入命令 : backstores/block create name=blk dev=/dev/vdb1
2) 创建target磁盘组
命令: iscsi/ create iqn.yyyy-mm.倒序域名:自定义标识
输入命令: iscsi/ create iqn.2019-07.com.example:server
target又可以细分为TPG(Target Portal Group)
TPG:目标门户组,某个特定iSCSI目标要侦听的接口IP地址和TCP端口的集合。可以将目标配置添加到TPG以协调多个LUN的设置。
3) 进行lun关联
命令 : [lun路径] create [被关联的backstore的路径]
输入命令: iscsi/iqn.2019-07.com.example:server/tpg1/luns create /backstores/block/blk
注意lun路径跟和backstore的路径与你之前创建的backstore和target相关
4) 设置访问控制:acls
客户端声称的名字,符合iqn名称规范.客户端若是想要访问到这个服务器的iscsi,其申明的名字在服务器端必须存在,也就是说服务器一开始就设置了允许访问的名字.而客户端就必须根据这些名字进行访问
命令 : [acls路径] create [被申明的名字]
输入命令:iscsi/iqn.2019-07.com.example:server/tpg1/acls create iqn.2019-07.com.example:desktop
5)设置监听的IP地址:portals
命令 : [protals路径] create ip_address=[本机ip]
输入命令:iscsi/iqn.2019-07.com.example:server/tpg1/portals create ip_address=172.25.0.11
6) 退出targetcli
ls一下看看完成创建后的结果,一定要确保按照顺序创建.
输入exit退出,一定要不要ctrl+c退出,否则无法报错
o- / ..................................................................... [...]
o- backstores .......................................................... [...]
| o- block .............................................. [Storage Objects: 1]
| | o- blk ......................... [/dev/vdb1 (5.0GiB) write-thru activated]
| o- fileio ............................................. [Storage Objects: 0]
| o- pscsi .............................................. [Storage Objects: 0]
| o- ramdisk ............................................ [Storage Objects: 0]
o- iscsi ........................................................ [Targets: 1]
| o- iqn.2019-07.com.example:server ................................ [TPGs: 1]
| o- tpg1 ........................................... [no-gen-acls, no-auth]
| o- acls ...................................................... [ACLs: 1]
| | o- iqn.2019-07.com.example:desktop .................. [Mapped LUNs: 1]
| | o- mapped_lun0 ............................... [lun0 block/blk (rw)]
| o- luns ...................................................... [LUNs: 1]
| | o- lun0 ...................................... [block/blk (/dev/vdb1)]
| o- portals ................................................ [Portals: 1]
| o- 172.25.0.11:3260 ............................................. [OK]
o- loopback ..................................................... [Targets: 0]
6.重启服务
[root@server0 ~]# systemctl restart target
[root@server0 ~]# systemctl enable target #设置为开机自启
ln -s '/usr/lib/systemd/system/target.service' '/etc/systemd/system/multi-user.target.wants/target.service'
服务器的配置就结束了
五、客户端配置
1.安装软件:iscsi-initiator-utils和修改防火墙配置
yum -y install iscsi-initiator-utils
firewall-cmd --set-default-zone=trusted
2.设置客户端的访问名称
必须与服务器提前申明的名称相同
vim /etc/iscsi/initiatorname.iscsi
-->InitiatorName=iqn.2019-07.com.example:desktop
3.客户端刷新声称名字的服务
systemctl restart iscsid
如果出现报错,出现以下信息:
Warning: Unit file of iscsid.service changed on
disk, 'systemctl daemon-reload' recommended.
输入命令: systemctl daemon-reload
systemctl restart httpd
4.发现共享存储
命令: iscsiadm --mode discoverydb --type sendtargets --portal [服务器ip] --discover
输入命令 iscsiadm --mode discoverydb --type sendtargets --portal 172.25.0.11 --discover
连接成功后显示如下信息:
[root@desktop0 ~]# iscsiadm --mode discoverydb --type sendtargets --portal 172.25.0.11 --discover
172.25.0.11:3260,1 iqn.2019-07.com.example:server
5.加载共享存储
重启一下iscsi
systemctl restart iscsi
systemctl enable iscsi
lsblk
[root@desktop0 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 5G 0 disk
vda 253:0 0 10G 0 disk
└─vda1 253:1 0 10G 0 part /
vdb 253:16 0 10G 0 disk
sda服务器共享的存储,到现在就完成服务器和客户端的配置了,下面是如何使用这个共享存储.
六、使用共享存储
1)将sda分区
共享存储在/dev下
fdisk /dev/sda
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 5G 0 disk
├─sda1 8:1 0 1G 0 part
└─sda2 8:2 0 1G 0 part
vda 253:0 0 10G 0 disk
└─vda1 253:1 0 10G 0 part /
vdb 253:16 0 10G 0 disk
我分了两个区,sda1,sda2
2) 格式化
mkfs.ext4 /dev/sda1
3) 挂载
mkdir /mnt/sda1
mount /dev/sda1 /mnt/sda1
4)开机自动挂载
vim /etc/fastb.
/dev/sda1 /mnt/sda1 xfs defaults 0 0
4) 创建文件
touch abc.txt
创建成功,代表可以使用
七、注意事项
1.保证服务器开启
如果服务器关机了,客户端就无法使用这个共享存储了,再次使用这个共享分区会卡死