怎样创建块存储 iSCSI 门户

本文介绍怎样在 Debian 服务器上创建 iSCSI 网关以通过 iSCSI 托管块存储。

本指南中使用的术语:

  • 目标: 服务器 托管 iSCSI 网关和块存储
  • 发起者: 服务器 使用 基于 iSCSI 的块存储
  • IQN: iSCSI 限定名称。 这是定义怎样识别 iSCSI 目标和启动器的标准格式。

最佳实践

  • 我们强烈建议使用 CPU 优化 为您要挂载的每个块存储卷计划至少一个 vCPU,或使用裸机服务器。
  • 为了安全和节省成本,您应该为所有 iSCSI 连接使用 Vultr VPC。 公共互联网上的连接将计入您的带宽配额。 Vultr VPC 上的流量是安全的,不计入带宽配额。

安装目标服务器

  1. 部署一个新的 Debian 11 服务器作为 目标.
  2. 创建一个 块存储订阅 并将其附加到目标服务器。
  3. 以 root 身份通过 SSH 连接到目标服务器。
  4. 安装 targetcliopen-iscsi

    # apt install targetcli-fb open-iscsi
    
  5. 启用 iSCSI 守护程序并启动它。

    # systemctl enable iscsid.service --now
    
  6. targetcli 进入 iSCSI 配置的命令行界面。 提示变为 /> 命令运行后。

    # targetcli
    />
    
  7. 导航到块存储后备库。

    /> cd backstores/block
    
  8. 对于每个挂载的块存储卷,创建一个后台存储。 这是一个 example 为订阅创建一个后台存储 /dev/vdb命名 vdb.

    /backstores/block> create vdb /dev/vdb
    
  9. 创建目标 IQN。 IQN 名称格式为 iqn.YEAR-MONTH.domain:targetname. 作为惯例,域是颠倒的,所以域 example.com 表示为 com.example. 目标名称可以是您想要的任何名称。 这 example 用途 target.

    /backstores/block> cd /iscsi
    /iscsi> create iqn.2022-05.com.example:target
    
  10. 创建到块设备的 LUN 映射。

    /iscsi> cd iqn.2022-05.com.example:target/tpg1/luns
    /iscsi/iqn.20..et/tpg1/luns> create /backstores/block/vdb
    
  11. 设置 ACL 以启用双向 CHAP 身份验证。

    • 启动器名称可以是您想要的任何名称。 本指南使用 initiator 作为 example 姓名。
    • 你应该使用 强大的,随机生成的 用户名和密码。 本指南仅使用弱名称和密码作为示例。

    这 example 发起人用户名是 initiator_user 密码是 initiator_password. 这 example 目标用户名是 target_user 密码是 target_password.

    /iscsi/iqn.20..et/tpg1/luns> cd ../acls
    /iscsi/iqn.20..et/tpg1/acls> create iqn.2022-05.com.example:initiator
    /iscsi/iqn.20..et/tpg1/acls> cd iqn.2022-05.com.example:initiator/
    /iscsi/iqn.20..om:initiator> set auth userid=initiator_user
    /iscsi/iqn.20..om:initiator> set auth password=initiator_password
    /iscsi/iqn.20..om:initiator> set auth mutual_userid=target_user
    /iscsi/iqn.20..om:initiator> set auth mutual_password=target_password
    
  12. 切换到根目录,保存 targetcli 配置,然后退出。

    /iscsi/iqn.20.../tpg1/portals> cd /
    /> saveconfig
    /> exit
    
  13. 启用 targetclid 服务。 当目标服务器重新启动时,需要此步骤来重新加载配置。

    # systemctl enable targetclid.service --now
    
  14. 使用以下命令验证 iSCSI 服务是否正在侦听端口 3260。 IP地址 0.0.0.0 表示服务正在侦听所有接口。

    # ss -napt | grep 3260
    LISTEN 0      256    0.0.0.0:3260      0.0.0.0:*
    
  15. 将防火墙配置为向 Initiator 开放端口 3260。 Debian 11 使用 ufw 作为其默认防火墙。 将启动器的 IP 地址替换为 10.10.10.123 用在这个 example. 我们强烈建议您仅启用连接到 Vultr VPC 的专用网络接口。

    # ufw allow from 10.10.10.123 to any port 3260
    

配置启动器

  1. 以 root 身份通过 SSH 连接到您的 Initiator 服务器,该服务器可以是任何支持 APT 或 RPM 的服务器 open-iscsi.
  2. 在启动器上,安装 open-iscsi 并开始 iscsid 服务。

    • 基于 APT 的 Linux

      # apt install -y open-iscsi
      # systemctl enable iscsid.service --now
      
    • 基于 RPM 的 Linux

      # yum -y install iscsi-initiator-utils
      # systemctl enable iscsid.service --now
      
  3. 打开 /etc/iscsi/initiatorname.iscsi 在文本编辑器中。

    # nano /etc/iscsi/initiatorname.iscsi
    
  4. 设置 iSCSI Initiator 名称以匹配您在 iSCSI Target 服务器上设置的名称。 为了 example本指南使用 iqn.2022-05.com.example:initiator.

    InitiatorName=iqn.2022-05.com.example:initiator
    
  5. Save 并退出文件。

  6. 打开 /etc/iscsi/iscsid.conf 在文本编辑器中。

    # nano /etc/iscsi/iscsid.conf
    
  7. 如图所示编辑文件以配置身份验证。

    # Uncomment the following line to enable CHAP
    node.session.auth.authmethod = CHAP
    
    # Uncomment the following line to enable strong authentication algorithms
    node.session.auth.chap_algs = SHA3-256,SHA256,SHA1,MD5
    
    # Uncomment and specify the username and password you set on the target server
    node.session.auth.username = initiator_user
    node.session.auth.password = initiator_password
    
    # Uncomment and specify the mutual username and password you set earlier
    node.session.auth.username_in = target_user 
    node.session.auth.password_in = target_password
    
    # Optional: Setup automatic reconnect after a reboot by changing `node.startup` from `manual` to `automatic`
    node.startup = automatic
    
  8. 重新启动 iscsid 服务来设置新的配置。

    # systemctl restart iscsid.service
    
  9. 发现 Initiator 上的目标。

    # iscsiadm -m discovery -t st -p 10.10.10.123
    10.10.10.123:3260,1 iqn.2022-05.com.example:target
    
  10. 登录到目标服务器。 这只需要一次; 这 iscsid.service 您之前创建的将在机器重新启动时重新启动连接。

    # iscsiadm -m node --login
    Logging in to [iface: default, target: iqn.2022-05.com.example:target, portal: 10.10.10.123,3260]
    Login to [iface: default, target: iqn.2022-05.com.example:target, portal: 10.10.10.123,3260] successful.
    
  11. 该磁盘现在应该通过 iSCSI 安装在 Initiator 上。 你可以检查这个 lsblk. 在这 example, sda 是目标。

    # lsblk
    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda      8:0    0  100G  0 disk
    sr0     11:0    1 1024M  0 rom
    vda    254:0    0   55G  0 disk
    └─vda1 254:1    0   55G  0 part /
    

块存储卷现在可通过 iSCSI 供 Initiator 使用,您可以像任何其他块设备一样将其挂载到 Linux 文件系统。 有关详细信息,请参阅“装载块存储”主题。

更多信息

要了解有关 iSCSI 的更多信息和 targetcli, 看:

注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com