05 ISCSI块存储服务
徐亮伟, 江湖人称标杆徐。多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。擅长Web集群架构与自动化运维,曾负责国内某大型电商运维工作。
个人博客"徐亮伟架构师之路"累计受益数万人。
笔者Q:552408925、572891887
架构师群:471443208
重要指数2星
1.iSCSI技术介绍
为了进一步提升硬盘存储设备的读写速度和性能,人们一直在努力改进物理硬盘设备的接口协议。当前的硬盘接口类型主要有IDE、SCSI和SATA这3种。
IDE是一种成熟稳定、价格便宜的并行传输接口。
SATA是一种传输速度更快、数据校验更完整的串行传输接口。
SCSI是一种用于计算机和硬盘、光驱等设备之间系统级接口的通用标准,具有系统资源占用率低、转速高、传输速度快等优点。
iSCSI技术在工作形式上分为服务端target
与客户端initiator
iSCSI服务端即用于存放硬盘存储资源的服务器
iSCSI客户端则是用户使用的软件,用于访问远程服务端的存储资源。
2.配置iSCSI服务端
主机名称 | 操作系统 | IP地址 |
---|---|---|
iSCSI服务端 | Linux7 | 192.168.56.11 |
iSCSI客户端 | Linux7 | 192.168.56.12 |
1.安装iscsi
服务
[root@iscsi-server ~]# yum install targetd targetcli -y
//启动ISCSI服务端程序targetd, 并加入开机自启
[root@iscsi-server ~]# systemctl start targetd
[root@iscsi-server ~]# systemctl enable targetd
2.配置iSCSI服务共享资源
targetcli是用于管理iSCSI服务端存储资源的配置命令,将iSCSI共享资源的配置内容抽象成“目录”的形式, 我们只需将各类配置信息填入到相应的“目录”中即可。
[root@linux-node1 ~]# targetcli
targetcli shell version 2.1.fb46
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
/> cd backstores/block
/backstores/block>'create disk0 /dev/sdb'
Created block storage object disk0 using /dev/sdb.
/backstores/block> cd /
/> ls
o- / ..................................................................... [...]
o- backstores .......................................................... [...]
| o- block .............................................. [Storage Objects: 1]
| | o- disk0 ..................... [/dev/sdb (20.0GiB) write-thru deactivated]
| | o- alua ............................................... [ALUA Groups: 1]
| | o- default_tg_pt_gp ................... [ALUA state: Active/optimized]
| o- fileio ............................................. [Storage Objects: 0]
| o- pscsi .............................................. [Storage Objects: 0]
| o- ramdisk ............................................ [Storage Objects: 0]
o- iscsi ........................................................ [Targets: 0]
o- loopback ..................................................... [Targets: 0]
3.创建iSCSI target
名称及配置共享资源
iSCSI target名称是由系统自动生成,用于描述共享资源的唯一字符串。
客户端在扫描iSCSI服务端时即可看见该字符串,因此我们无需记忆该字符串。
系统在生成这个target名称后,还会在/iscsi参数目录中创建一个与其字符串同名的新“目录”用来存放共享资源。
//将之前ISCSI共享资源池中硬盘添加至/iscsi目录
/> cd iscsi
/iscsi> create
Created target iqn.2003-01.org.linux-iscsi.linux-node1.x8664:sn.9eaea9756a73.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
//
/iscsi> cd iqn.2003-01.org.linux-iscsi.linux-node1.x8664:sn.9eaea9756a73/tpg1/luns
//
/iscsi/iqn.20...a73/tpg1/luns> create /backstores/block/disk0
Created LUN 0.
4.设置访问控制列表(ACL)
iSCSI协议是通过客户端名称进行验证, 用户在访问存储共享资源时不需要输入密码,只要iSCSI客户端的名称与服务端中设置的访问控制列表中某一名称条目一致即可
acls参数目录用于存放能够访问iSCSI服务端共享存储资源的客户端名称。
/iscsi/iqn.20...a9756a73/tpg1> cd acls
/iscsi/iqn.20...a73/tpg1/acls> create iqn.2003-01.org.linux-iscsi.linux-node1.x8664:sn.9eaea9756a73:client
5.设置iSCSI服务端的监听IP地址和端口号
/iscsi/iqn.20...d80/tpg1/acls> cd ..
/iscsi/iqn.20...c356ad80/tpg1> cd portals
/iscsi/iqn.20.../tpg1/portals> create 192.168.56.11
Using default IP port 3260
6.配置后检查配置信息,重启iSCSI
服务端程序并配置防火墙策略。
/iscsi/iqn.20.../tpg1/portals> cd /
/> ls
o- / ..................................................................... [...]
o- backstores .......................................................... [...]
| o- block .............................................. [Storage Objects: 1]
| | o- disk0 ....................... [/dev/sdb (20.0GiB) write-thru activated]
| | o- alua ............................................... [ALUA Groups: 1]
| | o- default_tg_pt_gp ................... [ALUA state: Active/optimized]
| o- fileio ............................................. [Storage Objects: 0]
| o- pscsi .............................................. [Storage Objects: 0]
| o- ramdisk ............................................ [Storage Objects: 0]
o- iscsi ........................................................ [Targets: 1]
| o- iqn.2003-01.org.linux-iscsi.linux-node1.x8664:sn.9eaea9756a73 . [TPGs: 1]
| o- tpg1 ........................................... [no-gen-acls, no-auth]
| o- acls ...................................................... [ACLs: 1]
| | o- iqn.2003-01.org.linux-iscsi.linux-node1.x8664:sn.9eaea9756a73:client [Mapped LUNs: 1]
| | o- mapped_lun0 ............................. [lun0 block/disk0 (rw)]
| o- luns ...................................................... [LUNs: 1]
| | o- lun0 .................. [block/disk0 (/dev/sdb) (default_tg_pt_gp)]
| o- portals ................................................ [Portals: 1]
| o- 0.0.0.0:3260 ................................................. [OK]
o- loopback ..................................................... [Targets: 0]
//保存配置
/> saveconfig
//注意:不要使用ctrl+c结束该进程
/> exit
//重启targetd服务, 并配置firewalld防火墙
[root@xuliangwei ~]# systemctl restart targetd
[root@xuliangwei ~]# firewall-cmd --permanent --add-port=3260/tcp
firsuccess
[root@linux-node1 ~]# firewall-cmd --reload
success
3.配置Linux客户端
1.安装iSCSI
客户端服务程序initiator
yum install iscsi-initiator-utils
2.编辑iSCSI客户端中的initiator
名称文件,将服务端的访问控制列表名称填写进来
[root@xuliangwei ~]# cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2003-01.org.linux-iscsi.linux-node1.x8664:sn.9eaea9756a73:client
3.重启客户端iscsid
服务程序并将其加入开机自启动
[root@xuliangwei ~]# systemctl restart iscsid
[root@xuliangwei ~]# systemctl enable iscsid
4.iSCSI
客户端访问并使用共享存储资源的步骤很简单, 发现, 登录, 挂载, 使用
//iscsiadm是用于管理、查询、插入、更新或删除iSCSI数据库配置文件的命令行工具
//扫描远程ISCSI服务端共享存储资源
//-m discovery 扫描并发现可用的存储资源
//-t st 执行扫描操作的类型
// -p 指定iSCSI服务端的IP地址
[root@xuliangwei ~]# iscsiadm -m discovery -t st -p 192.168.56.11
192.168.56.11:3260,1 iqn.2003-01.org.linux-iscsi.linux-node1.x8664:sn.9eaea9756a73
5.iscsiadm
命令发现远程服务器上可用的存储资源后,然后使用iscsiadm
登陆ISCSI
服务端
//-m node参数为将客户端所在主机作为一台节点服务器
//-T 参数为要使用的存储资源(直接复制前面命令中扫描发现的结果,以免录入错误)
//-p 192.168.10.10参数依然为对方iSCSI服务端的IP地址
//--login或-l参数进行登录验证
[root@xuliangwei ~]# iscsiadm -m node \
-T iqn.2003-01.org.linux-iscsi.linux-node1.x8664:sn.9eaea9756a73 \
-p 192.168.56.11 --login
6.iSCSI
客户端成功登录之后, 会在客户端主机上多出一块名为/dev/sd[x]
的设备文件, 进行格式化挂载即可
//查看当前磁盘
[root@xuliangwei ~]# lsblk
//格式化并挂载
[root@xuliangwei ~]# mkfs.xfs /dev/sdb
[root@xuliangwei ~]# mkdir /iscsi
[root@xuliangwei ~]# mount /dev/sdc /iscsi/
//开机自动挂载
[root@xuliangwei ~]# blkid | grep /dev/sdb
/dev/sdc: UUID="0b5f71ea-90f9-45c5-a7cb-6a22f5460a67" TYPE="xfs"
[root@xuliangwei ~]# tail -n1 /etc/fstab
UUID=0b5f71ea-90f9-45c5-a7cb-6a22f5460a67 /iscsi xfs defaults 0 0
7.卸载iSCSI
共享设备资源-u
参数进行卸载
[root@xuliangwei ~]# iscsiadm -m node \
-T iqn.2003-01.org.linux-iscsi.linux-node1.x8664:sn.9eaea9756a73 -u
4.配置Win客户端
使用Windows
系统的客户端也可以正常访问iSCSI
服务器上的共享存储资源,而且操作原理及步骤与Linux系统的客户端基本相同。
1.运行iSCSI
发起程序。在Windows 7操作系统中已经默认安装了iSCSI客户端程序,我们只需在控制面板中找到“系统和安全”标签,然后单击“管理工具”,如图1-1所示
进入到“管理工具”双击“iSCSI发起程序”, 在第一次运行iSCSI发起程序时,系统会提示Microsoft iSCSI
服务端未运行,单击“是”按钮即可自动启动并运行iSCSI发起程序,如图1-2所示
2.必须先扫描发现iSCSI
服务端上可用的存储资源。
在ISCSI
发起程序的目标窗口栏写入ISCSI
服务端的IP
地址, 单击快速链接, 如图1-3
在弹出的“快速连接”提示框中可看到共享的硬盘存储资源,单击“完成”按钮即可,如图1-4所示。
回到“目标”选项卡页面,可以看到共享存储资源的名称已经出现,如图1-5所示。
3.由于在iSCSI
服务端程序上设置了ACL
使得只有客户端名称与ACL
策略中的名称保持一致时才能使用远程存储资源,因此需要在“配置”选项卡中单击“更改”按钮,把iSCSI
发起程序的名称修改为服务端, 如图1-6
在确认客户端发起程序的名称修改正确后即可返回到“目标”选项卡页面中,然后单击“连接”按钮进行连接请求,成功连接到远程共享存储资源的页面如图1-7所示。
4.访问iSCSI
远程共享存储资源。右键单击桌面上的“计算机”图标,打开计算机管理程序,如图1-8所示。
5.对磁盘进行初始化操作,如图1-9至1-16所示。