本方案涵盖了从存储服务端(Target)提供存储空间,到业务客户端(Initiator)挂载存储,再到配置多路径(Multipath)高可用的完整端到端实施流程。

一、 角色定义与物理拓扑拓扑

在实施前,必须明确两台机器的角色和网络规划。为了实现多路径高可用,必须规划两个独立的存储网段。

1. 机器角色分配

  • 【机器 A】存储服务器 (iSCSI Target 端)

    • 作用: 充当存储阵列,提供物理磁盘空间,划分 LUN 并通过网络共享。

    • 网络: 存储网卡 1 (192.168.113.66);存储网卡 2 (192.168.113.67)。

  • 【机器 B】业务服务器 (iSCSI Initiator + Multipath 客户端)

    • 作用: 运行核心业务(如数据库),连接存储服务器,配置多路径并格式化使用磁盘。

    • 网络: 存储网卡 1 (192.168.113.11);存储网卡 2 (192.168.113.12)。

复制网卡
[root@localhost network-scripts]# cp ifcfg-ens160 ifcfg-ens224
修改网卡
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=eui64
NAME=ens224
DEVICE=ens224
ONBOOT=yes
IPADDR=192.168.113.67
PREFIX=24
GATEWAY=192.168.113.2
DNS1=192.168.113.2

切记:NAME与DEVICE与UUID信息一定不能和ens33信息一样

重启网卡

[root@localhost network-scripts]# systemctl restart NetworkManager

二、存储服务器 (Target服务端) 详细部署

操作节点: 仅在【机器 A】上执行。

目标: 使用 targetcli 将本地的一块磁盘(或逻辑卷)通过两条网络路径共享出去,并只允许【机器 B】访问。

1、安装并启动 Target 服务

sudo dnf install targetcli -y
systemctl enable --now target

2、准备底层存储

进入targetcli交互命令行

3、配置后端存储

/> /backstores/block create name=disk01 dev=/dev/sda

4、创建 Target IQN 与 LUN(唯一)

/> iscsi/ create iqn.2025-05.com.example:storage.target01

5、进入刚刚创建的 Target 目录(TPG1),将后备存储 disk01 映射为 LUN 0:

/> cd iscsi/iqn.2025-05.com.example:storage.target01/tpg1/luns
create /backstores/block/disk01

6、配置 ACL (访问控制)

定义谁可以连接这个存储。

此处填写【机器 B】(客户端)未来要使用的 IQN 名称(例如 iqn.2025-05.com.example:app.client01):

/iscsi/iqn.20...t01/tpg1/luns> cd ../acls
/iscsi/iqn.20...t01/tpg1/acls> create iqn.2025-05.com.example:app.client01

7、 配置 Network Portals (网络入口)

为了实现多路径,需要监听【机器 A】的两个存储网卡 IP:

/iscsi/iqn.20...t01/tpg1/acls> cd ../portals/
/iscsi/iqn.20.../tpg1/portals> delete 0.0.0.0 3260
/iscsi/iqn.20.../tpg1/portals> create 192.168.113.66 3260
/iscsi/iqn.20.../tpg1/portals> create 192.168.113.67 3260

8、保存

/iscsi/iqn.20...target01/tpg1> cd /
/> saveconfig
/> exit

三、 业务服务器 (Initiator客户端) 详细部署

操作节点: 仅在【机器 B】上执行。

目标: 配置与 Target 端 ACL 匹配的 IQN,通过两条网络链路发现并登录存储

1、安装客户端组件

sudo dnf install iscsi-initiator-utils -y

2、配置 Initiator IQN

修改客户端的 IQN,必须与【机器 A】第 5 步 ACL 中配置的名称完全一致

sudo vi /etc/iscsi/initiatorname.iscsi

3、修改为

InitiatorName=iqn.2025-05.com.example:app.client01

4、启动服务并发现 Target

sudo systemctl enable --now iscsid
sudo iscsiadm -m discovery -t st -p 192.168.113.66
sudo iscsiadm -m discovery -t st -p 192.168.113.67

5、登录并设置开机自启动

# 登录发现的所有 Target
sudo iscsiadm -m node -l
# 设置开机自动登录
sudo iscsiadm -m node -o update -n node.startup -v automatic

6、确认链路连通

lsblk

此时你应该看到两个大小相同的新磁盘(如 sdbsdc),它们实际上是同一个物理 LUN 的两条路径。

四、多路径 (DM-Multipath) 详细部署

操作节点: 继续在【机器 B】上执行。

目标: 将刚才看到的 sdbsdc 聚合成一个高可用的逻辑设备。

1、安装与初始化多路径(kylin系统与openEuler系统可能自带multipath)

sudo dnf install device-mapper-multipath -y
# 生成默认配置并启动服务
sudo mpathconf --enable --with_multipathd y

2、获取磁盘 WWID

[root@zabbix-manager network-scripts]# sudo multipath -v2
[root@zabbix-manager network-scripts]# lsblk
NAME                                MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda                                   8:0    0  100G  0 disk
├─sda1                                8:1    0    1G  0 part  /boot
└─sda2                                8:2    0   99G  0 part
  ├─klas-root                       253:0    0 63.9G  0 lvm   /
  ├─klas-swap                       253:1    0  3.9G  0 lvm   [SWAP]
  └─klas-backup                     253:2    0 31.2G  0 lvm
sdb                                   8:16   0  200G  0 disk
└─360014050a30281fbc4043f8a6747b369 253:3    0  200G  0 mpath
sdc                                   8:32   0  200G  0 disk
└─360014050a30281fbc4043f8a6747b369 253:3    0  200G  0 mpath
sr0                                  11:0    1 1024M  0 rom
​

3、配置 multipath.conf

编辑配置文件,为其指定别名和高可用策略:

sudo vim /etc/multipath.conf
​
multipaths {
    multipath {
        wwid                    "36001405xxxxxxxxxxxxxxxxxxxxxx"  # 替换为实际查到的 WWID
        alias                   "mpath_data"                      # 自定义别名
        path_grouping_policy    "multibus"                        # 负载均衡策略,所有路径处于活跃状态
        path_selector           "round-robin 0"                   # I/O 轮询算法
        failback                "immediate"                       # 链路恢复后立即切回
        no_path_retry           "fail"
    }
}

4、重启生效与验证

输出应显示 mpath_data 状态为 active,下方包含两条 active ready running 的路径(对应 sdbsdc

[root@zabbix-manager network-scripts]# sudo systemctl restart multipathd
[root@zabbix-manager network-scripts]# sudo multipath -ll
mpath_data (360014050a30281fbc4043f8a6747b369) dm-3 LIO-ORG,disk01
size=200G features='2 queue_mode mq' hwhandler='1 alua' wp=rw
|-+- policy='service-time 0' prio=50 status=active
| `- 33:0:0:0 sdc 8:32 active ready running
`-+- policy='service-time 0' prio=50 status=enabled
  `- 34:0:0:0 sdb 8:16 active ready running

五、 【机器 B】业务使用:格式化与持久化挂载

警告: 绝对不能直接格式化 /dev/sdb/dev/sdc,必须操作多路径别名设备。

sudo mkfs.xfs /dev/mapper/mpath_data

配置网络存储开机挂载 (_netdev)

创建挂载点:

sudo mkdir -p /data

编辑/etc/fstab

/dev/mapper/mpath_data    /data    xfs    defaults,_netdev    0 0

挂载测试

sudo mount -a
df -h | grep mpath_data

至此,端到端的 iSCSI 服务端提供、客户端挂载、以及多路径容灾部署已全部实施完毕。可以尝试断开【机器 B】的 10.0.1.10 网卡进行高可用故障演练,业务不会中断。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐