ISCSI 客户端远程挂载块设备卡住

Posted Carlton Xu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ISCSI 客户端远程挂载块设备卡住相关的知识,希望对你有一定的参考价值。

1. 问题描述

阿里公有云启动了一台ECS虚拟机用来作为ISCSI Server服务端,通过iscsi服务共享了一个20G的块设备给公司内部的一台CentOS7机器,但是在执行块设备发现挂载的时候发现一直卡住,日志也没有具体的输出,很是奇怪。

  • 环境信息
# iscsi client
# CentOS7 系统内部安装了docker服务,其实是docker容器内部的服务去发起连接iscsi server的请求,并非宿主机

# iscsi server
# CentOS7

2. 分析思路

2.1. 排查iscsi连接配置

一般出现这种情况,无非就两种情况,

第一种就是iscsi server在执行targetcli分配时配置的client端的acls错误,与iscsi 客户端不一致导致的,因为iscsi server主要是通过acls来控制client的访问挂载,可以理解为是一个连接密钥,

另一种就是iscsi server在分配client端的时候还是配置了用户名、密码的认证加密,这个时候其实就是防止iscsi client的initiatorname被其他机器获取配置使用,这样只要配置了这个initiatorname,所有的iscsi client都可以认证通过挂载使用这个块设备,不太安全,所以可以另外在iscsi server分配的时候加入用户名、密码的二次认证,就是避免出现前边的这个问题。

但是根据以上两种情况,都经过分析检查,并没有配置错误,而且这次的问题是卡住,如果是上面的问题其实会有具体的报错提示信息,而不是一直连接卡住的情况,所以排除这个问题;

2.2. 排查iscsi 服务版本

前面我们提到其实iscsi client是一台CentOS7的操作系统,系统安装了docker容器服务,其实是容器服务内部的iscsi客户端发起的连接请求,容器其实最终使用的内核的模块还是用的宿主机的,这里能想到的就是,宿主机的iscsi服务有没有启动以及版本是多少

  • 宿主机的iscsi服务及iscsi版本

    宿主机的iscsid服务是正常启动的状态,应该没什么问题

宿主机的iscsi的版本,这里查看我们先看下iscsiadm指令来自于那个安装以及它的版本

[root@vmware-proxy ~]# which iscsiadm
/usr/sbin/iscsiadm
[root@vmware-proxy ~]# rpm -qf /usr/sbin/iscsiadm
iscsi-initiator-utils-6.2.0.874-22.el7.x86_64


然后又查询了一下docker容器内部的iscsi服务的版本,这里发现宿主机和容器内部的iscsi client的版本不一致,是差了一个小release版本,这里我们试下把版本给同化,把宿主机的iscsi-initiator-utils rpm包降级一下变成iscsi-initiator-utils-6.2.0.874-17版本;

3. iscsi服务版本降级

先将宿主机的iscsi client的包卸载掉,iscsi-initiator-utils 这个是主包还依赖于其他一个包 iscsi-initiator-utils-iscsiuio,需要都卸载掉,然后在整体安装这两个包。

3.1. 卸载iscsi client包

这里要注意一点,需要记录下来/etc/iscsi/initiatorname.iscsi文件的值,因为卸载之后这个文件会被重置,新安装的iscsi client版本会重新生成,这样iscsi server端不然还需要重新修改,直接保持client不变最简单。

# yum remove iscsi-initiator-utils iscsi-initiator-utils-iscsiuio

3.2. 安装新版本iscsi client包

直接在互联网找到和docker容器内部相同版本的client包,直接执行安装即可。

还原iscsi initiatorname的配置

# cp /tmp/initiaitorname.iscsi > /etc/iscsi/initiatorname.iscsi
# rpm -ivh ftp://ftp.pbone.net/mirror/vault.centos.org/7.7.1908/cr/x86_64/Packages/iscsi-initiator-utils-6.2.0.874-17.el7.x86_64.rpm ftp://ftp.pbone.net/mirror/vault.centos.org/7.8.2003/os/x86_64/Packages/iscsi-initiator-utils-iscsiuio-6.2.0.874-17.el7.x86_64.rpm

4. 重启iscsid服务及容器服务

宿主机新的iscsi client安装完成之后,就可以重启宿主机的iscsid服务,并且将docker iscsi client的容器服务也进行重启操作,重启完成后再次进行连接发现可以正常连接iscsi server分配的块设备,并没有出现卡住的情况。

最终分析问题是因为操作系统宿主机的iscsi client版本与docker容器内部安装的iscsi client版本不一致导致的,所以大家在docker容器内部使用iscsi client时如果出现相同卡住的问题,需要排查下宿主机与容器内部的版本,如果不一致,按照以上操作方法让其保持一致基本可以解决卡住的问题。

以上是关于ISCSI 客户端远程挂载块设备卡住的主要内容,如果未能解决你的问题,请参考以下文章

ISCSI 客户端远程挂载块设备卡住

iSCSI远程块存储

linux笔记 3-5 iscsi远程块存储

Linux挂载iscsi网络存储

Linux挂载iscsi网络存储

3-unit5 ISCSI