搜索

13.2.3.5. 基于 iSCSI 的存储池

download PDF
建议
Internet Small Computer System Interface(iSCSI)是用于共享存储设备的网络协议。iSCSI 通过 IP 层使用 SCSI 指令连接到目标(存储服务器)。
使用基于 iSCSI 的设备存储客户机虚拟机允许更灵活的存储选项,比如将 iSCSI 用作块存储设备。iSCSI 设备使用 Linux-IO(LIO)目标。这是 Linux 的多协议 SCSI 目标。除了 iSCSI 外,LIO 还支持通过以太网光纤通道和光纤通道(FCoE)。
先决条件
在创建基于 iSCSI 的存储池前,必须创建 iSCSI 目标。iSCSI 目标使用 targetcli 软件包创建,该软件包提供了用于创建软件支持的 iSCSI 目标的命令集。

过程 13.5. 创建 iSCSI 目标

  1. 安装 targetcli 软件包

    # yum install targetcli
  2. 启动 targetcli 命令集

    # targetcli
  3. 创建存储对象

    使用存储池创建三个存储对象。
    1. 创建块存储对象
      1. 导航到 /backstores/block 目录。
      2. 运行 create 命令。
        # create [block-name][filepath]
        例如:
        # create block1 dev=/dev/sdb1
    2. 创建 fileio 对象
      1. 进入 /fileio 目录。
      2. 运行 create 命令。
        # create [fileio-name][image-name] [image-size]
        例如:
        # create fileio1 /foo.img 50M
    3. 创建 ramdisk 对象
      1. 导航到 /ramdisk 目录。
      2. 运行 create 命令。
        # create [ramdisk-name] [ramdisk-size]
        例如:
        # create ramdisk1 1M
    4. 记录这一步中创建的磁盘名称。稍后将使用它们。
  4. 创建 iSCSI 目标

    1. 导航到 /iscsi 目录。
    2. 以两种方式之一创建目标:
      • 运行 create 命令(不带参数)。
        iSCSI 限定名称( IQN)会自动生成。
      • 运行 create 命令并指定 IQN 和服务器。例如:
        # create iqn.2010-05.com.example.server1:iscsirhel7guest
  5. 定义门户 IP 地址

    要通过 iSCSI 导出块存储,必须先配置门户、LUN 和 访问控制列表 ACL。
    该门户包括目标监控器的 IP 地址和 TCP,以及它连接到的启动器。iSCSI 使用端口 3260。默认配置了这个端口。
    连接到端口 3260:
    1. 进入 /tpg 目录。
    2. 运行以下命令:
      # portals/ create
      此命令提供侦听端口 3260 的所有可用 IP 地址。
      如果只使用单个 IP 地址侦听端口 3260,请将 IP 地址添加到 命令的末尾。例如:
      # portals/ create 143.22.16.33
  6. 配置 LUN,并将存储对象分配到光纤

    此步骤使用创建存储对象 中创建的 存储对象
    1. 导航到 定义门户 IP 地址 中创建的 TPG 的 lun 目录。例如:
      # iscsi>iqn.iqn.2010-05.com.example.server1:iscsirhel7guest
    2. 将第一个 LUN 分配给 ramdisk。例如:
      # create /backstores/ramdisk/ramdisk1
    3. 将第二个 LUN 分配给块磁盘。例如:
      # create /backstores/block/block1
    4. 将第三个 LUN 分配给 fileio 磁盘。例如:
      # create /backstores/fileio/fileio1
    5. 列出生成的 LUN。
      /iscsi/iqn.20...csirhel7guest ls
      
      o- tgp1 ............................................................[enabled, auth]
        o- acls...................................................................[0 ACL]
        o- luns..................................................................[3 LUNs]
        | o- lun0......................................................[ramdisk/ramdisk1]
        | o- lun1...............................................[block/block1 (dev/vdb1)]
        | o- lun2................................................[fileio/file1 (foo.img)]
        o- portals.............................................................[1 Portal]
          o- IP-ADDRESS:3260.........................................................[OK]
      
  7. 为每个启动器创建 ACL

    在启动器连接时启用身份验证。您还可以将指定的 LUN 重新变为指定的非联网器。目标和启动器具有唯一名称。iSCSI 启动器使用 IQN。
    1. 使用启动器名称查找 iSCSI initiator 的 IQN。例如:
      # cat /etc/iscsi/initiator2.iscsi
      InitiatorName=create iqn.2010-05.com.example.server1:iscsirhel7guest
      此 IQN 用于创建 ACL。
    2. 进入 acls 目录。
    3. 通过执行以下操作之一创建 ACL:
      • 通过运行 create 命令(不带参数)为所有 LUN 和启动器创建 ACLS。
        # create
      • 为特定 LUN 和启动器创建 ACL,运行指定 iSCSI intiator 的 IQN 的 create 命令。例如:
        # create iqn.2010-05.com.example.server1:888
      • 配置内核目标,以为所有启动器使用单个用户 ID 和密码。
        # set auth userid=user_ID
        # set auth password=password
        # set attribute authentication=1
        # set attribute generate_node_acls=1
    完成此步骤后,通过 保护存储池来继续
  8. 保存配置

    通过覆盖之前的引导设置使配置持久。
    # saveconfig
  9. 启用服务

    要在下一次启动时应用保存的设置,请启用该服务。
    # systemctl enable target.service
可选流程
在创建基于 iSCSI 的存储池前,您可以使用 iSCSI 目标执行多个可选步骤。

过程 13.6. 在 RAID 阵列中配置逻辑卷

  1. 创建 RAID5 阵列

    有关创建 RAID5 阵列的详情,请参考 Red Hat Enterprise Linux 7 存储管理指南
  2. 在 RAID5 阵列中创建 LVM 逻辑卷

    有关在 RAID5 阵列中创建 LVM 逻辑卷的详情,请参考 Red Hat Enterprise Linux 7 逻辑卷管理器管理指南

过程 13.7. 测试发现性

  • 确保新的 iSCSI 设备可被发现。

    # iscsiadm --mode discovery --type sendtargets --portal server1.example.com
    143.22.16.33:3260,1 iqn.2010-05.com.example.server1:iscsirhel7guest

过程 13.8. 测试设备附加

  1. 附加新的 iSCSI 设备

    连接新设备(iqn.2010-05.com.example.server1:iscsirhel7guest),以确定是否可以附加该设备。
    # iscsiadm -d2 -m node --login
    scsiadm: Max file limits 1024 1024
    
    Logging in to [iface: default, target: iqn.2010-05.com.example.server1:iscsirhel7guest, portal: 143.22.16.33,3260]
    Login to [iface: default, target: iqn.2010-05.com.example.server1:iscsirhel7guest, portal: 143.22.16.33,3260] successful.
    
  2. 分离设备

    # iscsiadm -d2 -m node --logout
    scsiadm: Max file limits 1024 1024
    
    Logging out of session [sid: 2, target: iqn.2010-05.com.example.server1:iscsirhel7guest, portal: 143.22.16.33,3260
    Logout of [sid: 2, target: iqn.2010-05.com.example.server1:iscsirhel7guest, portal: 143.22.16.33,3260] successful.

过程 13.9. 为 iSCSI 存储池使用 libvirt secret

注意
如果在创建 iSCSI 目标时定义了 user_ID 和密码 则需要这个过程。
可以使用 virsh 配置用户名和密码参数来保护 iSCSI 存储池的安全。这可以在定义池之前或之后配置,但必须启动池才能使身份验证设置生效。
  1. 创建 libvirt secret 文件

    创建一个带有质询身份验证协议(CHAP)用户名的 libvirt secret 文件。例如:
    <secret ephemeral='no' private='yes'>
        <description>Passphrase for the iSCSI example.com server</description>
        <usage type='iscsi'>
            <target>iscsirhel7secret</target>
        </usage>
    </secret>
  2. 定义 secret

    # virsh secret-define secret.xml
  3. 验证 UUID

    # virsh secret-list
    UUID                                  Usage
    --------------------------------------------------------------------------------
    2d7891af-20be-4e5e-af83-190e8a922360  iscsi iscsirhel7secret
  4. 为 UID 分配 secret

    使用以下命令,将密码分配给上一步输出中的 UUID。这样可保证 CHAP 用户名和密码位于由 libvirt 控制的 secret 列表中。
    # MYSECRET=`printf %s "password123" | base64`
    # virsh secret-set-value 2d7891af-20be-4e5e-af83-190e8a922360 $MYSECRET
  5. 在存储池中添加身份验证条目

    使用 virsh edit 修改存储池 XML 文件中的 <source> 条目,再添加一个 <auth> 元素,指定 验证类型用户名secret 使用
    例如:
    <pool type='iscsi'>
      <name>iscsirhel7pool</name>
        <source>
           <host name='192.168.122.1'/>
           <device path='iqn.2010-05.com.example.server1:iscsirhel7guest'/>
           <auth type='chap' username='redhat'>
              <secret usage='iscsirhel7secret'/>
           </auth>
        </source>
      <target>
        <path>/dev/disk/by-path</path>
      </target>
    </pool>
    注意
    <auth> 子元素存在于客户机 XML 的 <pool><disk> 元素的不同位置。对于 <pool><auth><source> 元素中指定,这描述了查找池源的位置,因为身份验证是某些池源(iSCSI 和 RBD)的属性。对于 <disk>,这是域的子元素,对 iSCSI 或 RBD 磁盘的身份验证是磁盘的属性。
    另外,磁盘的 <auth> 子元素与存储池的不同。
    <auth username='redhat'>
      <secret type='iscsi' usage='iscsirhel7secret'/>
    </auth>
  6. 激活更改

    必须启动存储池才能激活这些更改。
参数
下表提供了 XML 文件、virsh pool-define-as 命令和 Virtual Machine Manager 应用程序所需的参数列表,用于创建基于 iSCSI 的存储池。
表 13.5. 基于 iSCSI 的存储池参数
描述XMLpool-define-as虚拟机管理器
存储池的类型 <pool type='iscsi'> [type] iscsi iSCSI:iSCSI 目标
存储池的名称 <name>name</name> [name] name Name
主机的名称。

<source>
  <host name='hostname' />

source-host hostname 主机名
iSCSI IQN。

  device path="iSCSI_IQN" />
</source>

source-dev iSCSI_IQN 源 IQN
指定目标的路径。这将是用于存储池的路径。

<target>
  <path>/dev/disk/by-path</path>
</target>

目标 path_to_pool 目标路径
(可选)iSCSI initiator 的 IQN。只有 ACL 将 LUN 限制为特定发起方时才需要。

<initiator>
  <iqn name='initiator0' />
</initiator>

请参见以下注释。 启动器 IQN
注意
iSCSI initiator 的 IQN 可使用 virsh find-storage-pool-sources-as iscsi 命令确定。
如果您使用 virsh 创建存储池,请继续 验证存储池是否已创建
示例
以下是基于 iSCSI 的存储池的 XML 文件示例:
<pool type='iscsi'>
  <name>iSCSI_pool</name>
  <source>
    <host name='server1.example.com'/>
    <device path='iqn.2010-05.com.example.server1:iscsirhel7guest'/>
  </source>
  <target>
    <path>/dev/disk/by-path</path>
  </target>
</pool>

以下是创建基于 iSCSI 的存储池的命令示例:
# virsh pool-define-as --name iSCSI_pool --type iscsi --source-host server1.example.com --source-dev iqn.2010-05.com.example.server1:iscsirhel7guest --target /dev/disk/by-path
Pool iSCSI_pool defined
下图显示了虚拟机 XML 配置虚拟机管理器 来添加 New Storage Pool 对话框的例子,用于创建基于 iSCSI 的存储池:

图 13.8. 添加新的基于 iSCSI 的存储池示例

添加新的基于 iSCSI 的存储池示例
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.