6 安装 iSCSI 网关 #
iSCSI 是一种存储区域网络 (SAN) 协议,可让客户端(称作发起程序)将 SCSI
命令发送到远程服务器上的 SCSI 存储设备(目标)。SUSE Enterprise Storage 7
包含一个可通过 iSCSI 协议向异构客户端(例如 Microsoft Windows* 和 VMware* vSphere)开放 Ceph
存储管理的工具。多路径 iSCSI 访问可让这些客户端实现可用性与可伸缩性,此外,该标准化 iSCSI 协议在客户端与 SUSE Enterprise
Storage 7 集群之间提供了一层额外的安全隔离。该配置工具名为
ceph-iscsi
。使用
ceph-iscsi
,Ceph
存储管理员可以定义精简配置的高可用性复制卷,该卷支持只读快照、读写克隆,以及 Ceph RADOS 块设备 (RBD)
的自动大小调整。然后,管理员可以通过单个 ceph-iscsi
网关主机或支持多路径故障转移的多个网关主机来导出卷。Linux、Microsoft Windows 和 VMware 主机可以使用 iSCSI
协议连接到卷,因此可像任何其他 SCSI 块设备一样供您使用。这意味着,SUSE Enterprise Storage 7 客户实际上可在 Ceph
上运行具有传统 SAN 所有功能和优势的完整块存储基础架构子系统,从而在未来实现蓬勃发展。
本章详细介绍如何设置 Ceph 集群基础架构和 iSCSI 网关,使客户端主机能够通过 iSCSI 协议,像在本地存储设备上一样使用远程存储的数据。
6.1 iSCSI 块存储 #
iSCSI 是 RFC 3720 中指定的、使用因特网协议 (IP) 的小型计算机系统接口 (SCSI) 命令集的一种实施。iSCSI 以服务形式实施,其中,客户端(发起程序)在 TCP 端口 3260 上通过会话来与服务器(目标)通讯。iSCSI 目标的 IP 地址和端口称为 iSCSI 门户,其中,一个目标可通过一个或多个端口公开。一个目标与一个或多个端口的组合称为目标门户组 (TPG)。
iSCSI 的底层数据链路层协议通常为以太网。更具体地说,现代 iSCSI 基础架构使用 10 GigE 以太网或更快的网络实现最佳吞吐量。强烈建议在 iSCSI 网关与后端 Ceph 集群之间建立 10 Gb 以太网连接。
6.1.1 Linux 内核 iSCSI 目标 #
Linux 内核 iSCSI 目标最初称作 linux-iscsi.or
的
LIO,它是项目的原始域和网站。在过去一段时间,适用于 Linux 平台的 iSCSI 目标实施竞争产品不少于四个,但 LIO 作为单一 iSCSI
参照目标最终获得了压倒性优势。LIO 的主流内核代码使用简单但有点含糊的名称“目标”,旨在区分“目标核心”与各种前端和后端目标扩展模块。
可以说,最常用的前端扩展模块就是 iSCSI。但是,LIO 也支持光纤通道 (FC)、基于以太网的光纤通道 (FCoE) 和其他多种前端协议。目前,SUSE Enterprise Storage 仅支持 iSCSI 协议。
最常用的目标后端扩展模块是能够方便地在目标主机上重新导出任何可用块设备的扩展模块。此模块名为 iblock。但是,LIO 还有一个 RBD 特定的后端扩展模块,该扩展模块支持对 RBD 映像进行并行化多路径 I/O 访问。
6.1.2 iSCSI 发起程序 #
本节简要介绍 Linux、Microsoft Windows 和 VMware 平台上使用的 iSCSI 发起程序。
6.1.2.1 Linux #
Linux 平台的标准发起程序是
open-iscsi
。open-iscsi
会起动守护进程 iscsid
,然后,用户可以使用该守护进程来发现任何给定端口上的 iSCSI
目标、登录到目标,以及映射 iSCSI 卷。iscsid
会与 SCSI
中间层通讯以创建内核中块设备,然后,内核便可像对待系统中任何其他的 SCSI 块设备一样来处理这些设备。可以结合设备映射程序多路径
(dm-multipath
) 工具一起部署
open-iscsi
发起程序,以提供高度可用的 iSCSI 块设备。
6.1.2.2 Microsoft Windows 和 Hyper-V #
Microsoft Windows 操作系统的默认 iSCSI 发起程序是 Microsoft iSCSI 发起程序。iSCSI 服务可通过图形用户界面 (GUI) 进行配置,并支持使用多路径 I/O 实现高可用性。
6.1.2.3 VMware #
VMware vSphere 和 ESX 的默认 iSCSI 发起程序是 VMware ESX 软件 iSCSI 发起程序
vmkiscsi
。启用该发起程序后,可通过 vSphere 客户端或使用
vmkiscsi-tool
命令对其进行配置。然后,可以使用 VMFS 来格式化通过 vSphere
iSCSI 存储适配器连接的存储卷,并像使用任何其他 VM 存储设备一样使用它们。VMware 发起程序也支持使用多路径 I/O 实现高可用性。
6.2 有关 ceph-iscsi
的一般信息 #
ceph-iscsi
兼具 RADOS 块设备的优势与 iSCSI
无所不在的通用性。通过在 iSCSI 目标主机(称为 iSCSI 网关)上应用
ceph-iscsi
,任何需要利用块存储的应用都可受益于
Ceph,即使不支持任何 Ceph 客户端协议的应用也不例外。而用户可以使用 iSCSI 或任何其他目标前端协议连接到 LIO 目标,从而可以转换针对
RBD 存储的所有目标 I/O。
ceph-iscsi
先天就具有高可用性,并支持多路径操作。因此,下游发起程序主机可以使用多个 iSCSI 网关实现高可用性和可伸缩性。与包含多个网关的 iSCSI
配置通讯时,发起程序可在多个网关之间实现 iSCSI
请求的负载平衡。如果某个网关发生故障(暂时不可访问,或因为维护已被禁用),将通过另一个网关以透明方式继续处理 I/O。
6.3 部署考虑事项 #
包含 ceph-iscsi
的最低 SUSE Enterprise
Storage 7 配置由以下组件组成:
一个 Ceph 存储集群。该 Ceph 集群至少包括四台物理服务器,其中每台服务器至少托管八个对象存储守护进程 (OSD)。在此类配置中,有三个 OSD 节点额外充当 Monitor (MON) 主机。
一台通过
ceph-iscsi
配置且运行 LIO iSCSI 目标的 iSCSI 目标服务器。一台 iSCSI 发起程序主机,它运行
open-iscsi
(Linux)、Microsoft iSCSI 发起程序 (Microsoft Windows) 或任何其他兼容的 iSCSI 发起程序实施。
包含 ceph-iscsi
的建议 SUSE Enterprise
Storage 7 生产配置由以下组件组成:
一个 Ceph 存储集群。一个 Ceph 生产集群,它由任意数量(通常是 10 个以上)的 OSD 节点组成,其中每个节点通常运行 10-12 个对象存储守护进程 (OSD),以及至少三台专用 MON 主机。
多台通过
ceph-iscsi
配置且运行 LIO iSCSI 目标的 iSCSI 目标服务器。为实现 iSCSI 故障转移和负载平衡,这些服务器必须运行支持target_core_rbd
模块的内核。可通过 SUSE Linux Enterprise Server 维护渠道获取更新包。任意数量的 iSCSI 发起程序主机,这些主机运行
open-iscsi
(Linux)、Microsoft iSCSI 发起程序 (Microsoft Windows) 或任何其他兼容的 iSCSI 发起程序实施。
6.4 安装和配置 #
本节介绍在 SUSE Enterprise Storage 的基础上安装和配置 iSCSI 网关的步骤。
6.4.1 将 iSCSI 网关部署到 Ceph 集群 #
Ceph iSCSI 网关采用与其他 Ceph 服务相同的过程进行部署,即使用 cephadm。有关细节,请参见第 5.4.3.5 节 “部署 iSCSI 网关”。
6.4.2 创建 RBD 映像 #
RBD 映像创建于 Ceph 存储区中,随后会导出到 iSCSI。建议为此使用专用的 RADOS 存储池。您可以在能使用 Ceph
rbd
命令行实用程序连接到存储集群的任何主机上创建卷。这需要客户端至少有一个精简的
ceph.conf
配置文件,以及相应的 CephX 身份验证身份凭证。
要通过 iSCSI 创建一个随后可供导出的新卷,请使用 rbd create
命令并指定卷大小(以 MB
为单位)。例如,要在名为 iscsi-images
的存储池中创建名为
testvol
的 100 GB 卷,请运行以下命令:
cephuser@adm >
rbd --pool iscsi-images create --size=102400 testvol
6.4.3 通过 iSCSI 导出 RBD 映像 #
要通过 iSCSI 导出 RBD 映像,您可以使用 Ceph Dashboard Web 界面或
ceph-iscsi
gwcli 实用程序。在本节中,我们只重点介绍
gwcli,演示如何使用命令行创建导出 RBD 映像的 iSCSI 目标。
无法通过 iSCSI 导出具有以下属性的 RBD 映像:
启用
journaling
功能的映像stripe unit
小于 4096 字节的映像
以 root
身份进入 iSCSI 网关容器:
root #
cephadm enter --name CONTAINER_NAME
以 root
身份启动 iSCSI 网关命令行界面:
root #
gwcli
转到 iscsi-targets
,然后创建名为
iqn.2003-01.org.linux-iscsi.iscsi.SYSTEM-ARCH:testvol
的目标:
gwcli >
/> cd /iscsi-targetsgwcli >
/iscsi-targets> create iqn.2003-01.org.linux-iscsi.iscsi.SYSTEM-ARCH:testvol
通过指定网关名称
和 IP
地址创建 iSCSI 网关:
gwcli >
/iscsi-targets> cd iqn.2003-01.org.linux-iscsi.iscsi.SYSTEM-ARCH:testvol/gatewaysgwcli >
/iscsi-target...tvol/gateways> create iscsi1 192.168.124.104gwcli >
/iscsi-target...tvol/gateways> create iscsi2 192.168.124.105
使用 help
命令可显示当前配置节点中的可用命令列表。
在存储池 iscsi-images
中添加名为 testvol
的 RBD
映像:
gwcli >
/iscsi-target...tvol/gateways> cd /disksgwcli >
/disks> attach iscsi-images/testvol
将 RBD 映像映射到目标:
gwcli >
/disks> cd /iscsi-targets/iqn.2003-01.org.linux-iscsi.iscsi.SYSTEM-ARCH:testvol/disksgwcli >
/iscsi-target...testvol/disks> add iscsi-images/testvol
您可以使用级别较低的工具(例如 targetcli
)来查询本地配置,但无法修改配置。
您可以使用 ls
命令查看配置。有些配置节点还支持 info
命令,该命令可用于显示更多详细信息。
请注意,系统默认会启用 ACL 身份验证,因此目前尚不可访问此目标。有关身份验证和访问控制的详细信息,请参见第 6.4.4 节 “身份验证和访问控制”。
6.4.4 身份验证和访问控制 #
iSCSI 身份验证十分灵活,涵盖了许多身份验证可能性。
6.4.4.1 禁用 ACL 身份验证 #
无身份验证意味着任何发起程序均能访问相应目标上的任何 LUN。您可以通过禁用 ACL 身份验证来启用无身份验证:
gwcli >
/> cd /iscsi-targets/iqn.2003-01.org.linux-iscsi.iscsi.SYSTEM-ARCH:testvol/hostsgwcli >
/iscsi-target...testvol/hosts> auth disable_acl
6.4.4.2 使用 ACL 身份验证 #
使用基于发起程序名称的 ACL 身份验证时,只允许定义的发起程序进行连接。您可以通过运行以下命令来定义发起程序:
gwcli >
/> cd /iscsi-targets/iqn.2003-01.org.linux-iscsi.iscsi.SYSTEM-ARCH:testvol/hostsgwcli >
/iscsi-target...testvol/hosts> create iqn.1996-04.de.suse:01:e6ca28cc9f20
定义的发起程序虽然能够连接,但只能访问已明确添加到该发起程序的 RBD 映像:
gwcli >
/iscsi-target...:e6ca28cc9f20> disk add rbd/testvol
6.4.4.3 启用 CHAP 身份验证 #
除了 ACL 以外,您还可以通过为每个发起程序指定用户名和密码来启用 CHAP 身份验证:
gwcli >
/> cd /iscsi-targets/iqn.2003-01.org.linux-iscsi.iscsi.SYSTEM-ARCH:testvol/hosts/iqn.1996-04.de.suse:01:e6ca28cc9f20gwcli >
/iscsi-target...:e6ca28cc9f20> auth username=common12 password=pass12345678
用户名长度必须为 8 至 64
个字符,可以包含字母数字字符、.
、@
、-
、_
或 :
。
密码长度必须为 12 至 16
个字符,可以包含字母数字字符、@
、-
、_
或 /
。
(可选)您也可以在 auth
命令中指定 mutual_username
和
mutual_password
参数,以启用 CHAP 相互身份验证。
6.4.4.4 配置发现和相互身份验证 #
发现身份验证独立于之前的身份验证方法。该身份验证需要身份凭证才能进行浏览,它是可选设置,可通过运行以下命令配置:
gwcli >
/> cd /iscsi-targetsgwcli >
/iscsi-targets> discovery_auth username=du123456 password=dp1234567890
用户名长度必须为 8 至 64
个字符,并且只能包含字母、.
、@
、-
、_
或 :
。
密码的长度必须为 12 至 16
个字符,并且只能包含字母、@
、-
、_
或 /
。
(可选)您也可以在 discovery_auth
命令中指定
mutual_username
和 mutual_password
参数。
可以使用以下命令来禁用发现身份验证:
gwcli >
/iscsi-targets> discovery_auth nochap
6.4.5 配置高级设置 #
可以为 ceph-iscsi
配置随后将传递给 LIO I/O
目标的高级参数。参数分为 target
和 disk
参数。
除非另有说明,否则不建议将这些参数更改为使用非默认设置。
6.4.5.1 查看目标设置 #
您可以使用 info
命令查看这些设置的值:
gwcli >
/> cd /iscsi-targets/iqn.2003-01.org.linux-iscsi.iscsi.SYSTEM-ARCH:testvolgwcli >
/iscsi-target...i.SYSTEM-ARCH:testvol> info
还可以使用 reconfigure
命令更改设置:
gwcli >
/iscsi-target...i.SYSTEM-ARCH:testvol> reconfigure login_timeout 20
可用的 target
设置包括:
- default_cmdsn_depth
默认的 CmdSN(命令顺序号)深度。限制 iSCSI 发起程序在任意时刻可拥有的未处理请求数量。
- default_erl
默认的错误恢复级别。
- login_timeout
登录超时值(以秒为单位)。
- netif_timeout
NIC 故障超时(以秒为单位)。
- prod_mode_write_protect
如果设置为
1
,则阻止写入到 LUN。
6.4.5.2 查看磁盘设置 #
您可以使用 info
命令查看这些设置的值:
gwcli >
/> cd /disks/rbd/testvolgwcli >
/disks/rbd/testvol> info
还可以使用 reconfigure
命令更改设置:
gwcli >
/disks/rbd/testvol> reconfigure rbd/testvol emulate_pr 0
可用的 disk
设置包括:
- block_size
底层设备的块大小。
- emulate_3pc
如果设置为
1
,则启用“第三方复制”。- emulate_caw
如果设置为
1
,则启用“比较并写入”。- emulate_dpo
如果设置为 1,则打开“禁用页面写出”。
- emulate_fua_read
如果设置为
1
,则启用“强制单元读取访问”。- emulate_fua_write
如果设置为
1
,则启用“强制单元写入访问”。- emulate_model_alias
如果设置为
1
,则使用后端设备名称作为模型别名。- emulate_pr
如果设置为 0,将禁用 SCSI 预留(包括永久组预留)支持。禁用该支持后,SES iSCSI 网关可能会忽略预留状态,导致请求延迟情况得到改进。
提示如果 iSCSI 发起程序不需要 SCSI 预留支持,建议将
backstore_emulate_pr
设置为0
。- emulate_rest_reord
如果设置为
0
,则队列算法修饰符的重新排序受限。- emulate_tas
如果设置为
1
,则启用“任务已中止状态”。- emulate_tpu
如果设置为
1
,则启用“精简配置 - 取消映射”。- emulate_tpws
如果设置为
1
,则启用“精简配置 - 写入相同内容”。- emulate_ua_intlck_ctrl
如果设置为
1
,则启用“单元警告联锁”。- emulate_write_cache
如果设置为
1
,则打开“启用写入缓存”。- enforce_pr_isids
如果设置为
1
,则强制永久性预留 ISID。- is_nonrot
如果设置为
1
,则后备存储为非旋转设备。- max_unmap_block_desc_count
UNMAP 的最大块描述符数。
- max_unmap_lba_count:
UNMAP 的最大 LBA 数。
- max_write_same_len
WRITE_SAME 的最大长度。
- optimal_sectors
扇区中的最佳请求大小。
- pi_prot_type
DIF 保护类型。
- queue_depth
队列深度。
- unmap_granularity
UNMAP 粒度。
- unmap_granularity_alignment
UNMAP 粒度对齐。
- force_pr_aptpl
如果启用该设置,无论客户端是否通过 aptpl=1 发出了相应请求,LIO 都始终会将
永久预留
状态写出到永久存储区。这对 LIO 的内核 RBD 后端不会产生任何影响,该后端始终会保留 PR 状态。理论上,如果有人尝试通过配置禁用该设置,target_core_rbd
选项应该会强制将其设置为“1”并抛出错误。- unmap_zeroes_data
影响 LIO 是否会向 SCSI 发起程序公布 LBPRZ,表示将在执行包含取消映射位的 UNMAP 或 WRITE SAME 命令后从某个区域回读零。
6.5 使用 tcmu-runner
导出 RADOS 块设备映像 #
ceph-iscsi
支持
rbd
(基于内核)和 user:rbd
(tcmu-runner)
后备存储,这使整个管理过程变得透明,并且独立于后备存储。
基于 tcmu-runner
的 iSCSI 网关部署目前以技术预览的方式提供。
与基于内核的 iSCSI 网关部署不同,基于 tcmu-runner
的 iSCSI 网关不支持多路径
I/O 或 SCSI 永久性预留。
要使用 tcmu-runner
导出 RADOS 块设备映像,您只需在挂接磁盘时指定
user:rbd
后备存储即可:
gwcli >
/disks> attach rbd/testvol backstore=user:rbd
使用 tcmu-runner
时,导出的 RBD 映像必须启用
exclusive-lock
特性。