ISCSI 客户端远程挂载块设备卡住
1. 问题描述阿里公有云启动了一台ECS虚拟机用来作为ISCSI Server服务端,通过iscsi服务共享了一个20G的块设备给公司内部的一台CentOS7机器,但是在执行块设备发现挂载的时候发现一直卡住,日志也没有具体的输出,很是奇怪。环境信息# iscsi client# CentOS7 系统内部安装了docker服务,其实是docker容器内部的服务去发起连接iscsi server的请求
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时如果出现相同卡住的问题,需要排查下宿主机与容器内部的版本,如果不一致,按照以上操作方法让其保持一致基本可以解决卡住的问题。
更多推荐
所有评论(0)