使用iSCSI服务部署网络存储

2022-10-25 22:20:20 浏览数 (2)

主机挂载镜像

代码语言:javascript复制
[root@rhel ~]# mount /dev/cdrom /mnt

cat <<EOF>/etc/yum.repos.d/local.repo
[local]
name=local
baseurl=file:///mnt
gpgcheck=0
enabled=1
EOF

yum repolist all

1. 创建RAID磁盘阵列

首先在虚拟机中添加4块新硬盘,用于创建RAID 5磁盘阵列和备份盘

使用mdadm命令创建RAID磁盘阵列。其中,-Cv参数为创建阵列并显示过程,/dev/md0为生成的阵列组名称,-n 3参数为创建RAID 5磁盘阵列所需的硬盘个数,-l 5参数为RAID磁盘阵列的级别,-x 1参数为磁盘阵列的备份盘个数。在命令后面要逐一写上使用的硬盘名称。

代码语言:javascript复制
[root@rhel ~]# ls -l /dev/sd*
brw-rw----. 1 root disk 8,  0 Oct 25 18:52 /dev/sda
brw-rw----. 1 root disk 8,  1 Oct 25 18:52 /dev/sda1
brw-rw----. 1 root disk 8,  2 Oct 25 18:52 /dev/sda2
brw-rw----. 1 root disk 8, 16 Oct 25 18:52 /dev/sdb
brw-rw----. 1 root disk 8, 32 Oct 25 18:52 /dev/sdc
brw-rw----. 1 root disk 8, 48 Oct 25 18:52 /dev/sdd
brw-rw----. 1 root disk 8, 64 Oct 25 18:52 /dev/sde

[root@rhel ~]# mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 20954112K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

使用mdadm -D命令来查看设备的详细信息
[root@rhel ~]# mdadm -D /dev/md0

2. 配置iSCSI服务端

iSCSI技术在工作形式上分为服务端(target)与客户端(initiator)。iSCSI服务端即用于存放硬盘存储资源的服务器,它作为前面创建的RAID磁盘阵列的存储端,能够为用户提供可用的存储资源。iSCSI客户端则是用户使用的软件,用于访问远程服务端的存储资源。

表17-1                             iSCSI服务端和客户端的操作系统以及IP地址

主机名称

操作系统

IP地址

iSCSI服务端

RHEL 7

192.168.30.10

iSCSI客户端

RHEL 7

192.168.30.20

第1步:在RHEL 7/CentOS 7系统中,默认已经安装了iSCSI服务端程序,用户需要做的是配置好软件仓库后安装iSCSI服务端的交换式配置工具。

代码语言:javascript复制
[root@rhel ~]# yum install -y targetcli

第2步:配置iSCSI服务端共享资源。targetcli是用于管理iSCSI服务端存储资源的专用配置命令

代码语言:javascript复制
[root@rhel ~]# targetcli
Warning: Could not load preferences file /root/.targetcli/prefs.bin.
targetcli shell version 2.1.51
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.

/> 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]
/> 

/backstores/block是iSCSI服务端配置共享设备的位置。我们需要把刚刚创建的RAID 5磁盘阵列md0文件加入到配置共享设备的“资源池”中,并将该文件重新命名为disk0,这样用户就不会知道是由服务器中的哪块硬盘来提供共享存储资源,而只会看到一个名为disk0的存储设备。

代码语言:javascript复制
/> cd /backstores/block
/backstores/block> create disk0 /dev/md0
Created block storage object disk0 using /dev/md0.
/backstores/block> cd /
/> ls
o- / ......................................................................................................................... [...]
  o- backstores .............................................................................................................. [...]
  | o- block .................................................................................................. [Storage Objects: 1]
  | | o- disk0 ......................................................................... [/dev/md0 (40.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名称是由系统自动生成的,这是一串用于描述共享资源的唯一字符串

代码语言:javascript复制
/> cd /iscsi
/iscsi> create
Created target iqn.2003-01.org.linux-iscsi.rhel.x8664:sn.50e6bb5e0412.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
/iscsi> ls
o- iscsi .............................................................................................................. [Targets: 1]
  o- iqn.2003-01.org.linux-iscsi.rhel.x8664:sn.50e6bb5e0412 .............................................................. [TPGs: 1]
    o- tpg1 ................................................................................................. [no-gen-acls, no-auth]
      o- acls ............................................................................................................ [ACLs: 0]
      o- luns ............................................................................................................ [LUNs: 0]
      o- portals ...................................................................................................... [Portals: 1]
        o- 0.0.0.0:3260 ....................................................................................................... [OK]

系统在生成这个target名称后,还会在/iscsi参数目录中创建一个与其字符串同名的新“目录”用来存放共享资源。我们需要把前面加入到iSCSI共享资源池中的硬盘设备添加到这个新目录中,这样用户在登录iSCSI服务端后,即可默认使用这硬盘设备提供的共享存储资源了。

代码语言:javascript复制
/iscsi> cd iqn.2003-01.org.linux-iscsi.rhel.x8664:sn.50e6bb5e0412/
/iscsi/iqn.20....50e6bb5e0412> cd tpg1/luns
/iscsi/iqn.20...412/tpg1/luns> create /backstores/block/disk0
Created LUN 0.

第4步:设置访问控制列表(ACL)。iSCSI协议是通过客户端名称进行验证的。也就是说,用户在访问存储共享资源时不需要输入密码,只要iSCSI客户端的名称与服务端中设置的访问控制列表中某一名称条目一致即可,因此需要在iSCSI服务端的配置文件中写入一串能够验证用户信息的名称。acls参数目录用于存放能够访问iSCSI服务端共享存储资源的客户端名称。推荐在刚刚系统生成的iSCSI target后面追加上类似于:client的参数,这样既能保证客户端的名称具有唯一性,又非常便于管理和阅读:

代码语言:javascript复制
/iscsi/iqn.20...412/tpg1/luns> cd ..
/iscsi/iqn.20...bb5e0412/tpg1> cd acls
/iscsi/iqn.20...412/tpg1/acls> create iqn.2003-01.org.linux-iscsi.rhel.x8664:sn.50e6bb5e0412:client
Created Node ACL for iqn.2003-01.org.linux-iscsi.rhel.x8664:sn.50e6bb5e0412:client
Created mapped LUN 0.

第5步:设置iSCSI服务端的监听IP地址和端口号。位于生产环境中的服务器上可能有多块网卡,那么到底是由哪个网卡或IP地址对外提供共享存储资源呢?在配置文件中默认是允许所有网卡提供iSCSI服务,如果您认为这有些许不安全,可以手动删除:

代码语言:javascript复制
/iscsi/iqn.20...412/tpg1/acls> cd ../portals/
/iscsi/iqn.20.../tpg1/portals> ls
o- portals ............................................................................................................ [Portals: 1]
  o- 0.0.0.0:3260 ............................................................................................................. [OK]
/iscsi/iqn.20.../tpg1/portals> delete 0.0.0.0 3260
Deleted network portal 0.0.0.0:3260

继续进行设置,使系统使用服务器IP地址192.168.10.10的3260端口向外提供iSCSI共享存储资源服务:

代码语言:javascript复制
/iscsi/iqn.20.../tpg1/portals> create 192.168.30.10
Using default IP port 3260
Created network portal 192.168.30.10:3260.

第6步:在参数文件配置妥当后,浏览刚刚配置的信息,确保上述提到的“目录”都已经填写了正确的内容。在确认信息无误后输入exit命令退出配置。

代码语言:javascript复制
/iscsi/iqn.20.../tpg1/portals> cd /
/> ls
o- / ......................................................................................................................... [...]
  o- backstores .............................................................................................................. [...]
  | o- block .................................................................................................. [Storage Objects: 1]
  | | o- disk0 ........................................................................... [/dev/md0 (40.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.rhel.x8664:sn.50e6bb5e0412 ............................................................ [TPGs: 1]
  |   o- tpg1 ............................................................................................... [no-gen-acls, no-auth]
  |     o- acls .......................................................................................................... [ACLs: 1]
  |     | o- iqn.2003-01.org.linux-iscsi.rhel.x8664:sn.50e6bb5e0412:client ........................................ [Mapped LUNs: 1]
  |     |   o- mapped_lun0 ................................................................................. [lun0 block/disk0 (rw)]
  |     o- luns .......................................................................................................... [LUNs: 1]
  |     | o- lun0 ...................................................................... [block/disk0 (/dev/md0) (default_tg_pt_gp)]
  |     o- portals .................................................................................................... [Portals: 1]
  |       o- 192.168.30.10:3260 ............................................................................................... [OK]
  o- loopback ......................................................................................................... [Targets: 0]
/> exit
Global pref auto_save_on_exit=true
Configuration saved to /etc/target/saveconfig.json

清空iptables防火墙中的默认策略,设置firewalld防火墙,使其放行iSCSI服务或3260/TCP端口号:

代码语言:javascript复制
[root@rhel ~]# iptables -F
[root@rhel ~]# iptables-save
[root@rhel ~]# firewall-cmd --permanent --add-port=3260/tcp
success
[root@rhel ~]# firewall-cmd --reload
success

配置Linux客户端 192.168.30.20

代码语言:javascript复制
[root@redhat ~]# mount /dev/cdrom /mnt

cat <<EOF>/etc/yum.repos.d/local.repo
[local]
name=local
baseurl=file:///mnt
gpgcheck=0
enabled=1
EOF

yum repolist all

安装iSCSI客户端服务程序initiator,默认已经安装

代码语言:javascript复制
[root@redhat ~]# yum install iscsi-initiator-utils

代码语言:javascript复制
[root@redhat ~]# vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2003-01.org.linux-iscsi.rhel.x8664:sn.50e6bb5e0412:client
重启客户端iscsid服务程序并将其加入到开机启动项中:
[root@redhat ~]# systemctl restart iscsid
[root@redhat ~]# systemctl enable  iscsid
Created symlink from /etc/systemd/system/multi-user.target.wants/iscsid.service to /usr/lib/systemd/system/iscsid.service.

iscsiadm是用于管理、查询、插入、更新或删除iSCSI数据库配置文件的命令行工具,用户需要先使用这个工具扫描发现远程iSCSI服务端,然后查看找到的服务端上有哪些可用的共享存储资源。其中,-m discovery参数的目的是扫描并发现可用的存储资源,-t st参数为执行扫描操作的类型,-p 192.168.30.10参数为iSCSI服务端的IP地址:

代码语言:javascript复制
[root@redhat ~]# iscsiadm -m discovery -t st -p 192.168.30.10
192.168.30.10:3260,1 iqn.2003-01.org.linux-iscsi.rhel.x8664:sn.50e6bb5e0412

在使用iscsiadm命令发现了远程服务器上可用的存储资源后,接下来准备登录iSCSI服务端。其中,-m node参数为将客户端所在主机作为一台节点服务器,-T参数为要使用的存储资源,-p 192.168.30.10参数依然为对方iSCSI服务端的IP地址。最后使用--login或-l参数进行登录验证。

代码语言:javascript复制
[root@redhat ~]# iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.rhel.x8664:sn.50e6bb5e0412 -p 192.168.30.10 --login
Logging in to [iface: default, target: iqn.2003-01.org.linux-iscsi.rhel.x8664:sn.50e6bb5e0412, portal: 192.168.30.10,3260] (multiple)
Login to [iface: default, target: iqn.2003-01.org.linux-iscsi.rhel.x8664:sn.50e6bb5e0412, portal: 192.168.30.10,3260] successful.

在iSCSI客户端成功登录之后,会在客户端主机上多出一块名为/dev/sdb的设备文件。

代码语言:javascript复制
[root@redhat ~]# ls -l /dev/sd*
brw-rw----. 1 root disk 8,  0 Oct 25 20:31 /dev/sda
brw-rw----. 1 root disk 8,  1 Oct 25 20:31 /dev/sda1
brw-rw----. 1 root disk 8,  2 Oct 25 20:31 /dev/sda2
brw-rw----. 1 root disk 8, 16 Oct 25 20:55 /dev/sdb
[root@redhat ~]# file /dev/sdb
/dev/sdb: block special

下面进入标准的磁盘操作流程,外加这个设备文件本身只有40GB的容量,因此不必进行分区,而是直接格式化并挂载使用。

代码语言:javascript复制
[root@redhat ~]# mkfs.xfs /dev/sdb
meta-data=/dev/sdb               isize=512    agcount=16, agsize=654720 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=10475520, imaxpct=25
         =                       sunit=128    swidth=256 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=5120, version=2
         =                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@redhat ~]# mkdir /iscsi
[root@redhat ~]# mount /dev/sdb /iscsi/

代码语言:javascript复制

[root@redhat ~]# df -h
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               974M     0  974M   0% /dev
tmpfs                  991M     0  991M   0% /dev/shm
tmpfs                  991M   12M  980M   2% /run
tmpfs                  991M     0  991M   0% /sys/fs/cgroup
/dev/mapper/rhel-root   17G  4.2G   13G  25% /
/dev/sda1             1014M  170M  845M  17% /boot
tmpfs                  199M   48K  198M   1% /run/user/1000
tmpfs                  199M     0  199M   0% /run/user/0
/dev/sr0               4.3G  4.3G     0 100% /mnt
/dev/sdb                40G   33M   40G   1% /iscsi

blkid命令用于查看设备的名称、文件系统及UUID

代码语言:javascript复制
[root@redhat ~]# blkid | grep /dev/sdb
/dev/sdb: UUID="10bcca83-be2f-474d-b59b-fb139dd6ab21" TYPE="xfs"

代码语言:javascript复制
[root@redhat ~]# vim /etc/fstab
[root@redhat ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Tue Oct 25 20:24:26 2022
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/rhel-root   /                       xfs     defaults        0 0
UUID=52edf422-262b-4143-aad0-f55b7bc7be9c /boot                   xfs     defaults        0 0
/dev/mapper/rhel-swap   swap                    swap    defaults        0 0
UUID="10bcca83-be2f-474d-b59b-fb139dd6ab21" /iscsi  xfs defaults,_netdev 0 0

scsiadm命令的-u参数将其设备卸载:

代码语言:javascript复制
iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.rhel.x8664:sn.50e6bb5e0412 -u

这种获取iSCSI远程存储的方法依赖的是RHEL 7系统自带的iSCSI initiator软件程序

配置Windows客户端(练习)

0 人点赞