Ceph iSCSI initator客户端
配置Ceph iSCSI网关 服务端iSCSI target配置完成后,就可以配置Linux的iSCSI initator客户端。需要安装和配置2个客户端:
iscsi-initiator-utils
device-mapper-multipath
备注
按照 移动云计算部署Ceph ,访问iSCSI Gateway的 Libvirt虚拟机管理器 客户端位于物理笔记本 Apple ARM架构芯片M1 Pro MacBook Pro 2022,运行的操作系统是 Asahi Linux 。也就是,需要在 Arch Linux 上实现 iSCSI initator客户端配置。
安装
在 Arch Linux 上iSCSI客户端(initator)使用 open-iscsi
,安装:
sudo pacman -S open-iscsi multipath-tools
为方便生成配置,安装 mpathconf
工具(通过 Arch Linux AUR ):
yay -S mpathconf
配置
创建默认
/etc/multipath.conf
配置并激活multipathd
服务:
sudo mpathconf --enable --with_multipathd y
警告
这个 mpathconf
工具( Shell )已经落伍了,无法正常工作。我最初没有在意,后来发现 multipath -ll
是需要依赖这个工具生成的 find_multipaths yes
配置行。参考 Understanding mpathconf Utility to configure DM-Multipath
我的workround方法是在 Fedora 主机(因为这个工具是RedHat主推,Fedora系列一直有这个工具可使用)执行 multipath
工具生成初始配置,复制过来再做修改
实际生成的 /etc/multipath.conf
非常简单:
defaults {
user_friendly_names yes
find_multipaths yes
}
在
/etc/multipath.conf
配置文件中添加以下内容:
defaults {
user_friendly_names yes
find_multipaths yes
}
blacklist {
devnode nvme0n1
}
devices {
device {
vendor "LIO-ORG"
product "TCMU device"
hardware_handler "1 alua"
path_grouping_policy "failover"
path_selector "queue-length 0"
failback 60
path_checker tur
prio alua
prio_args exclusive_pref_bit
fast_io_fail_tmo 25
no_path_retry queue
}
}
然后重新启动 multipathd
服务:
sudo systemdctl restart multipathd
iSCSI发现和设置
在
/etc/iscsi/iscsid.conf
配置中添加 配置Ceph iSCSI网关 时在/etc/ceph/iscsi-gateway.cfg
中配置的 CHAP 用户名和密码:
node.session.auth.authmethod = CHAP
node.session.auth.username = libvirtd
node.session.auth.password = mypassword12
警告
这里的认证账号是 配置Ceph iSCSI网关 步骤中 创建一个 initator 名为 iqn.1989-06.io.cloud-atlas:libvirt-client 客户端,并且配置intiator的CHAP名字和密码 配置的,不是服务器的 /etc/ceph/iscsi-gateway.cfg
配置中的管理账号。
我最初搞错了,导致iSCSI initator无法登陆(见下文)。这里已经订正
这里有多种CHAP认证设置,对应于 配置Ceph iSCSI网关 的 /etc/ceph/iscsi-gateway.cfg
简单认证配置上述内容。详细不同认证方法参考配置文件注释或者 arch linxu: Open-iSCSI
启动并激活
iscsid
服务:
sudo systemctl start iscsid
sudo systemctl enable iscsid
向 iSCSI target节点发送请求,语法如下:
iscsiadm --mode discovery --portal target_ip --type sendtargets
实践操作如下:
sudo iscsiadm -m discovery -t st -p 192.168.8.205
输出信息就是iSCSI target,成功的关于节点和target信息会自动保存到本地的initator中:
192.168.8.205:3260,1 iqn.2022-12.io.cloud-atlas.iscsi-gw:iscsi-igw
192.168.8.206:3260,2 iqn.2022-12.io.cloud-atlas.iscsi-gw:iscsi-igw
登陆到 iSCSI target:
sudo iscsiadm -m node -T iqn.2022-12.io.cloud-atlas.iscsi-gw:iscsi-igw -l
iSCSI initator登陆失败排查
这里我遇到一个登陆报错:
Logging in to [iface: default, target: iqn.2022-12.io.cloud-atlas.iscsi-gw:iscsi-igw, portal: 192.168.8.205,3260]
Logging in to [iface: default, target: iqn.2022-12.io.cloud-atlas.iscsi-gw:iscsi-igw, portal: 192.168.8.206,3260]
iscsiadm: Could not login to [iface: default, target: iqn.2022-12.io.cloud-atlas.iscsi-gw:iscsi-igw, portal: 192.168.8.205,3260].
iscsiadm: initiator reported error (24 - iSCSI login failed due to authorization failure)
iscsiadm: Could not login to [iface: default, target: iqn.2022-12.io.cloud-atlas.iscsi-gw:iscsi-igw, portal: 192.168.8.206,3260].
iscsiadm: initiator reported error (24 - iSCSI login failed due to authorization failure)
iscsiadm: Could not log into all portals
但是我检查服务端 /etc/ceph/iscsi-gateway.cfg
和客户端 /etc/issi/iscsid.conf
,显示的认证信息是一致的
从客户端系统日志来看有:
[Tue Dec 20 14:46:42 2022] scsi host0: iSCSI Initiator over TCP/IP
[Tue Dec 20 14:46:42 2022] scsi host1: iSCSI Initiator over TCP/IP
[Tue Dec 20 14:46:42 2022] connection1:0: detected conn error (1020)
[Tue Dec 20 14:46:42 2022] connection2:0: detected conn error (1020)
我仔细核对了 配置Ceph iSCSI网关 配置步骤,发现我搞错了一个概念:
在
gwcli
交互步骤中, 创建一个 initator 名为 iqn.1989-06.io.cloud-atlas:libvirt-client 客户端,并且配置intiator的CHAP名字和密码 ,这个账号密码才是 iSCSI initator 客户端的登陆密码:username=libvirtd password=mypassword12服务器的
/etc/ceph/iscsi-gateway.cfg
配置的是Ceph的iSCSI网关的管理密码
所以修订物理主机iSCSI initator的CHAP认证配置,将错误的:
node.session.auth.username = admin
node.session.auth.password = admin
修订成:
node.session.auth.username = libvirtd
node.session.auth.password = mypassword12
然后重启 iscsid
再重复上述登陆...
还是同样报错
仔细阅读了 arch linxu: Open-iSCSI >> Troubleshooting/Client IQN 提到了服务器端(target)可能需要包含 客户端 的 /etc/iscsi/initiatorname.iscsi
配置中 IQN
。对啊,我在 配置Ceph iSCSI网关 gwcli
交互步骤中, 创建一个 initator 名为 iqn.1989-06.io.cloud-atlas:libvirt-client 客户端,并且配置intiator的CHAP名字和密码 步骤是包含了:
create iqn.1989-06.io.cloud-atlas:libvirt-client
也就是说服务器端是指定配置了客户端的 IQN
果然,在客户端 /etc/iscsi/initiatorname.iscsi
指定了客户端的IQN!!!
既然服务器端配置了 iqn.1989-06.io.cloud-atlas:libvirt-client
,那么也需要对应修订客户端的 /etc/iscsi/initiatorname.iscsi
内容改为:
InitiatorName=iqn.1989-06.io.cloud-atlas:libvirt-client
然后重启客户端 iscsid
再次重复上述登陆...
终于,终于看到了成功登陆的信息:
Logging in to [iface: default, target: iqn.2022-12.io.cloud-atlas.iscsi-gw:iscsi-igw, portal: 192.168.8.205,3260]
Logging in to [iface: default, target: iqn.2022-12.io.cloud-atlas.iscsi-gw:iscsi-igw, portal: 192.168.8.206,3260]
Login to [iface: default, target: iqn.2022-12.io.cloud-atlas.iscsi-gw:iscsi-igw, portal: 192.168.8.205,3260] successful.
Login to [iface: default, target: iqn.2022-12.io.cloud-atlas.iscsi-gw:iscsi-igw, portal: 192.168.8.206,3260] successful.
检查iSCSI initator信息
检查运行的会话:
sudo iscsiadm -m session -P 3
此时可以看到:
sda
和 sdb
iSCSI Transport Class version 2.0-870
version 2.1.8
Target: iqn.2022-12.io.cloud-atlas.iscsi-gw:iscsi-igw (non-flash)
Current Portal: 192.168.8.205:3260,1
Persistent Portal: 192.168.8.205:3260,1
**********
Interface:
**********
Iface Name: default
Iface Transport: tcp
Iface Initiatorname: iqn.1989-06.io.cloud-atlas:libvirt-client
Iface IPaddress: 192.168.8.1
Iface HWaddress: default
Iface Netdev: default
SID: 19
iSCSI Connection State: LOGGED IN
iSCSI Session State: LOGGED_IN
Internal iscsid Session State: NO CHANGE
*********
Timeouts:
*********
Recovery Timeout: 120
Target Reset Timeout: 30
LUN Reset Timeout: 30
Abort Timeout: 15
*****
CHAP:
*****
username: libvirtd
password: ********
username_in: <empty>
password_in: ********
************************
Negotiated iSCSI params:
************************
HeaderDigest: None
DataDigest: None
MaxRecvDataSegmentLength: 262144
MaxXmitDataSegmentLength: 262144
FirstBurstLength: 262144
MaxBurstLength: 524288
ImmediateData: Yes
InitialR2T: Yes
MaxOutstandingR2T: 1
************************
Attached SCSI devices:
************************
Host Number: 0 State: running
scsi0 Channel 00 Id 0 Lun: 0
Attached scsi disk sdb State: running
Current Portal: 192.168.8.206:3260,2
Persistent Portal: 192.168.8.206:3260,2
**********
Interface:
**********
Iface Name: default
Iface Transport: tcp
Iface Initiatorname: iqn.1989-06.io.cloud-atlas:libvirt-client
Iface IPaddress: 192.168.8.1
Iface HWaddress: default
Iface Netdev: default
SID: 20
iSCSI Connection State: LOGGED IN
iSCSI Session State: LOGGED_IN
Internal iscsid Session State: NO CHANGE
*********
Timeouts:
*********
Recovery Timeout: 120
Target Reset Timeout: 30
LUN Reset Timeout: 30
Abort Timeout: 15
*****
CHAP:
*****
username: libvirtd
password: ********
username_in: <empty>
password_in: ********
************************
Negotiated iSCSI params:
************************
HeaderDigest: None
DataDigest: None
MaxRecvDataSegmentLength: 262144
MaxXmitDataSegmentLength: 262144
FirstBurstLength: 262144
MaxBurstLength: 524288
ImmediateData: Yes
InitialR2T: Yes
MaxOutstandingR2T: 1
************************
Attached SCSI devices:
************************
Host Number: 1 State: running
scsi1 Channel 00 Id 0 Lun: 0
Attached scsi disk sda State: running
可以使用以下命令验证iSCSI会话:
sudo iscsiadm -m session -o show
此时可以看到:
tcp: [19] 192.168.8.205:3260,1 iqn.2022-12.io.cloud-atlas.iscsi-gw:iscsi-igw (non-flash)
tcp: [20] 192.168.8.206:3260,2 iqn.2022-12.io.cloud-atlas.iscsi-gw:iscsi-igw (non-flash)
使用
fdisk -l
也可以看到:Disk /dev/sda: 46 GiB, 49392123904 bytes, 96468992 sectors Disk model: TCMU device Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 524288 bytes Disk /dev/sdb: 46 GiB, 49392123904 bytes, 96468992 sectors Disk model: TCMU device Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 524288 bytes
Multipath IO设置
前文已经配置了 multipath.conf
来发现 LIO iSCSI
设备,所以这里执行:
multipath -ll
我这里遇到一个问题, multipaht -ll
没有任何输出,虽然前面已经正确登陆了iSCSI target,显示本地已经挂载了2个磁盘。原因是 Arch Linux 上的 mpathconf
工具初始配置失败导致(见上文),通过在 Fedora 主机生成初始配置并复制到 Arch Linux 上重新完成 /etc/multipath.conf
修复。
这样能够正常工作显示如下:
mpatha (360014050c1044fe3a1241b693a733cc1) dm-6 LIO-ORG,TCMU device
size=46G features='1 queue_if_no_path' hwhandler='1 alua' wp=rw
|-+- policy='queue-length 0' prio=50 status=active
| `- 0:0:0:0 sdb 8:16 active ready running
`-+- policy='queue-length 0' prio=10 status=enabled
`- 1:0:0:0 sda 8:0 active ready running
现在完成设置,可以退出 target :
sudo iscsiadm -m node -T iqn.2022-12.io.cloud-atlas.iscsi-gw:iscsi-igw -u
接下来,终于可以正式开始 移动云计算Libvirt集成Ceph iSCSI