Linux文件系统-ISCSI存储和Multipathd

1. iscsi和多路径基础概念

1.1 scsi&iscsi

iscsi是由scsi协议发展而来,简单来讲,iscsi是对scsi的封装,并通过以太网来进行scsi指令的传输. 传统的scsi存储设备,通过总线连接到主机,供主机使用. 通过iscsi,主机可以直接通过以太网(TCP/IP)连接使用scsi存储设备,这也是通常所说的NAS存储的一种,它提供的是块级存储服务.

1.2 多路径的形成

通过iscsi连接的存储设备,由于中间经过了交换机等网络设备,从主机到同一个存储设备,可能会存在多条路径. 每条路径在linux系统上都会被识别成一个设备,如果把每条路径都当成独立设备去处理的话,不同路径之间的读写操作就可能会造成数据的紊乱.

1.3 multipathd

multipathd可以解决上述的多路径问题,其主要原理包括:
a. 每一个scsi设备都有唯一的scsi_id,multipathd通过探测scsi_id来判断不同路径后面是不是同一个存储设备.
b. 通过内核device-mapper功能,将多条路径映射为单一的块设备,提供给文件系统使用.
c. 由于多路径的存在,multipathd可以提供负载均衡和高可用的服务.

2. iscsi存储和multipathd实例演示

整个环境通过两台虚拟机搭建,一台虚拟机作为iscsi存储服务器,另一台作为客户端. 两台虚拟机都配置了两张网卡,从客户端到iscsi服务器,可以形成两条路径.

实例环境架构

2.1 iscsi存储服务器搭建

通过openfiler搭建iscsi存储服务器,openfiler镜像包及部署手册,具体参考openfiler官网.
https://www.openfiler.com/community/download

部署完成后,创建了2个iscsi target:

target 01

itarget 02

2.2 iscsi&multipath使用

需要安装如下软件包:
iscsi-initiator-utils:提供iscsid服务,及iscsi管理工具iscsiadm
device-mapper-multipath&device-mapper-multipath-libs:提供multipathd服务及multipath管理工具

2.2.1 探测iscsi target

通过iscsiadm命令探测openfiler服务器上的iscsi target,具体如下:

[root@localhost iscsi]# iscsiadm -m discovery -t sendtargets -p 192.168.122.168:3260
192.168.122.168:3260,1 iqn.2006-01.com.openfiler:disk02
172.16.10.78:3260,1 iqn.2006-01.com.openfiler:disk02
192.168.122.168:3260,1 iqn.2006-01.com.openfiler:disk01
172.16.10.78:3260,1 iqn.2006-01.com.openfiler:disk01

可以看到,openfiler返回了2个target,每个target 2条路径. 执行命令后,在/var/lib/iscsi/目录生成了如下文件:

[root@localhost ~]# ll /var/lib/iscsi/send_targets/
总用量 0
drw------- 2 root root 301 Apr  6 21:49 192.168.122.168,3260
[root@localhost ~]# ll /var/lib/iscsi/nodes/
总用量 0
drw------- 4 root root 63 Apr  6 21:49 iqn.2006-01.com.openfiler:disk01
drw------- 4 root root 63 Apr  6 21:49 iqn.2006-01.com.openfiler:disk02

2.2.2 Login to target

对iscsi target执行login操作后,系统才能识别到设备并使用,login命令如下:

[root@localhost ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0            11:0    1 1024M  0 rom  
vda           252:0    0   30G  0 disk 
├─vda1        252:1    0    1G  0 part /boot
└─vda2        252:2    0   29G  0 part 
  ├─nlas-root 253:0    0   26G  0 lvm  /
  └─nlas-swap 253:1    0    3G  0 lvm  [SWAP]
vdb           252:16   0    1G  0 disk 
├─vdb1        252:17   0  200M  0 part 
│ └─wan-lv01  253:2    0  300M  0 lvm  
├─vdb2        252:18   0  200M  0 part 
│ └─wan-lv01  253:2    0  300M  0 lvm  
├─vdb3        252:19   0  200M  0 part 
└─vdb4        252:20   0  423M  0 part 
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]# iscsiadm -m node -T iqn.2006-01.com.openfiler:disk01 -p 192.168.122.168 -l
Logging in to [iface: default, target: iqn.2006-01.com.openfiler:disk01, portal: 192.168.122.168,3260] (multiple)
Login to [iface: default, target: iqn.2006-01.com.openfiler:disk01, portal: 192.168.122.168,3260] successful.
[root@localhost ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             8:0    0    4G  0 disk 
sr0            11:0    1 1024M  0 rom  
vda           252:0    0   30G  0 disk 
├─vda1        252:1    0    1G  0 part /boot
└─vda2        252:2    0   29G  0 part 
  ├─nlas-root 253:0    0   26G  0 lvm  /
  └─nlas-swap 253:1    0    3G  0 lvm  [SWAP]
vdb           252:16   0    1G  0 disk 
├─vdb1        252:17   0  200M  0 part 
│ └─wan-lv01  253:2    0  300M  0 lvm  
├─vdb2        252:18   0  200M  0 part 
│ └─wan-lv01  253:2    0  300M  0 lvm  
├─vdb3        252:19   0  200M  0 part 
└─vdb4        252:20   0  423M  0 part 
[root@localhost ~]# iscsiadm -m node -T iqn.2006-01.com.openfiler:disk02 -p 192.168.122.168 -l
Logging in to [iface: default, target: iqn.2006-01.com.openfiler:disk02, portal: 192.168.122.168,3260] (multiple)
Login to [iface: default, target: iqn.2006-01.com.openfiler:disk02, portal: 192.168.122.168,3260] successful.
[root@localhost ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             8:0    0    4G  0 disk 
sdb             8:16   0    4G  0 disk 
sr0            11:0    1 1024M  0 rom  
vda           252:0    0   30G  0 disk 
├─vda1        252:1    0    1G  0 part /boot
└─vda2        252:2    0   29G  0 part 
  ├─nlas-root 253:0    0   26G  0 lvm  /
  └─nlas-swap 253:1    0    3G  0 lvm  [SWAP]
vdb           252:16   0    1G  0 disk 
├─vdb1        252:17   0  200M  0 part 
│ └─wan-lv01  253:2    0  300M  0 lvm  
├─vdb2        252:18   0  200M  0 part 
│ └─wan-lv01  253:2    0  300M  0 lvm  
├─vdb3        252:19   0  200M  0 part 
└─vdb4        252:20   0  423M  0 part 
[root@localhost ~]# iscsiadm -m node -T iqn.2006-01.com.openfiler:disk01 -p 172.16.10.78 -l
Logging in to [iface: default, target: iqn.2006-01.com.openfiler:disk01, portal: 172.16.10.78,3260] (multiple)
Login to [iface: default, target: iqn.2006-01.com.openfiler:disk01, portal: 172.16.10.78,3260] successful.
[root@localhost ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             8:0    0    4G  0 disk 
sdb             8:16   0    4G  0 disk 
sdc             8:32   0    4G  0 disk 
sr0            11:0    1 1024M  0 rom  
vda           252:0    0   30G  0 disk 
├─vda1        252:1    0    1G  0 part /boot
└─vda2        252:2    0   29G  0 part 
  ├─nlas-root 253:0    0   26G  0 lvm  /
  └─nlas-swap 253:1    0    3G  0 lvm  [SWAP]
vdb           252:16   0    1G  0 disk 
├─vdb1        252:17   0  200M  0 part 
│ └─wan-lv01  253:2    0  300M  0 lvm  
├─vdb2        252:18   0  200M  0 part 
│ └─wan-lv01  253:2    0  300M  0 lvm  
├─vdb3        252:19   0  200M  0 part 
└─vdb4        252:20   0  423M  0 part 
[root@localhost ~]# iscsiadm -m node -T iqn.2006-01.com.openfiler:disk02 -p 172.16.10.78 -l
Logging in to [iface: default, target: iqn.2006-01.com.openfiler:disk02, portal: 172.16.10.78,3260] (multiple)
Login to [iface: default, target: iqn.2006-01.com.openfiler:disk02, portal: 172.16.10.78,3260] successful.
[root@localhost ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             8:0    0    4G  0 disk 
sdb             8:16   0    4G  0 disk 
sdc             8:32   0    4G  0 disk 
sdd             8:48   0    4G  0 disk 
sr0            11:0    1 1024M  0 rom  
vda           252:0    0   30G  0 disk 
├─vda1        252:1    0    1G  0 part /boot
└─vda2        252:2    0   29G  0 part 
  ├─nlas-root 253:0    0   26G  0 lvm  /
  └─nlas-swap 253:1    0    3G  0 lvm  [SWAP]
vdb           252:16   0    1G  0 disk 
├─vdb1        252:17   0  200M  0 part 
│ └─wan-lv01  253:2    0  300M  0 lvm  
├─vdb2        252:18   0  200M  0 part 
│ └─wan-lv01  253:2    0  300M  0 lvm  
├─vdb3        252:19   0  200M  0 part 
└─vdb4        252:20   0  423M  0 part 

执行login命令后,识别到了sda、sdb、sdc、sdd 4个设备,查看它们的scsi_id;可以看到sda、sdc是同一设备的不同路径,sdb、sdd是同一设备的不同路径.

[root@localhost ~]# udevadm info /sys/class/block/sda |grep SCSI
E: ID_SCSI=1
E: ID_SCSI_SERIAL=H2QdDr-iEIo-5mYB
[root@localhost ~]# udevadm info /sys/class/block/sdb |grep SCSI
E: ID_SCSI=1
E: ID_SCSI_SERIAL=IkmR3y-ATBf-4QW6
[root@localhost ~]# udevadm info /sys/class/block/sdc |grep SCSI
E: ID_SCSI=1
E: ID_SCSI_SERIAL=H2QdDr-iEIo-5mYB
[root@localhost ~]# udevadm info /sys/class/block/sdd |grep SCSI
E: ID_SCSI=1
E: ID_SCSI_SERIAL=IkmR3y-ATBf-4QW6

2.2.3 启动multipathd

启动multipathd服务后,multipathd会自动识别多路径,并自动在/dev/mapper/目录下创建多路径映射后的设备.

[root@localhost ~]# systemctl start multipathd.service 
[root@localhost ~]# systemctl status  multipathd.service 
● multipathd.service - Device-Mapper Multipath Device Controller
   Loaded: loaded (/usr/lib/systemd/system/multipathd.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2022-04-06 22:28:10 CST; 7s ago
  Process: 28350 ExecStart=/sbin/multipathd (code=exited, status=0/SUCCESS)
  Process: 28347 ExecStartPre=/sbin/multipath -A (code=exited, status=0/SUCCESS)
  Process: 28344 ExecStartPre=/sbin/modprobe dm-multipath (code=exited, status=0/SUCCESS)
 Main PID: 28355 (multipathd)
    Tasks: 8
   CGroup: /system.slice/multipathd.service
           └─28355 /sbin/multipathd

Apr 06 22:28:10 192.168.122.82 systemd[1]: Starting Device-Mapper Multipath Device Controller...
Apr 06 22:28:10 192.168.122.82 systemd[1]: Started Device-Mapper Multipath Device Controller.
Apr 06 22:28:10 192.168.122.82 multipathd[28355]: mpathb: load table [0 8388608 multipath 0 0 2 1 service-time 0 1 1 8:0 1 service-time 0 1 1 8:32 1]
Apr 06 22:28:10 192.168.122.82 multipathd[28355]: mpatha: load table [0 8388608 multipath 0 0 2 1 service-time 0 1 1 8:16 1 service-time 0 1 1 8:48 1]
Apr 06 22:28:10 192.168.122.82 multipathd[28355]: mpathb: event checker started
Apr 06 22:28:10 192.168.122.82 multipathd[28355]: mpatha: event checker started
Apr 06 22:28:10 192.168.122.82 multipathd[28355]: path checkers start up
[root@localhost ~]# ll /dev/mapper/
总用量 0
crw------- 1 root root 10, 236 Apr  6 13:39 control
lrwxrwxrwx 1 root root       7 Apr  6 22:28 mpatha -> ../dm-4
lrwxrwxrwx 1 root root       7 Apr  6 22:28 mpathb -> ../dm-3
lrwxrwxrwx 1 root root       7 Apr  6 13:39 nlas-root -> ../dm-0
lrwxrwxrwx 1 root root       7 Apr  6 13:39 nlas-swap -> ../dm-1
lrwxrwxrwx 1 root root       7 Apr  6 13:39 wan-lv01 -> ../dm-2
[root@localhost ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda             8:0    0    4G  0 disk  
└─mpathb      253:3    0    4G  0 mpath 
sdb             8:16   0    4G  0 disk  
└─mpatha      253:4    0    4G  0 mpath 
sdc             8:32   0    4G  0 disk  
└─mpathb      253:3    0    4G  0 mpath 
sdd             8:48   0    4G  0 disk  
└─mpatha      253:4    0    4G  0 mpath 
sr0            11:0    1 1024M  0 rom   
vda           252:0    0   30G  0 disk  
├─vda1        252:1    0    1G  0 part  /boot
└─vda2        252:2    0   29G  0 part  
  ├─nlas-root 253:0    0   26G  0 lvm   /
  └─nlas-swap 253:1    0    3G  0 lvm   [SWAP]
vdb           252:16   0    1G  0 disk  
├─vdb1        252:17   0  200M  0 part  
│ └─wan-lv01  253:2    0  300M  0 lvm   
├─vdb2        252:18   0  200M  0 part  
│ └─wan-lv01  253:2    0  300M  0 lvm   
├─vdb3        252:19   0  200M  0 part  
└─vdb4        252:20   0  423M  0 part  

查看multipathd工作模式,命令multipath -ll

[root@localhost ~]# multipath -ll
mpathb (14f504e46494c45524832516444722d6945496f2d356d5942) dm-3 OPNFILER,VIRTUAL-DISK    
size=4.0G features='0' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=1 status=active
| `- 11:0:0:0 sda 8:0  active ready running
`-+- policy='service-time 0' prio=1 status=enabled
  `- 13:0:0:0 sdc 8:32 active ready running
mpatha (14f504e46494c4552496b6d5233792d415442662d34515736) dm-4 OPNFILER,VIRTUAL-DISK    
size=4.0G features='0' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=1 status=active
| `- 12:0:0:0 sdb 8:16 active ready running
`-+- policy='service-time 0' prio=1 status=enabled
  `- 14:0:0:0 sdd 8:48 active ready running

从上面输出可以看到,multipathd默认的策略是两条路径一主一备.

2.2.4 multipathd 主/备模式测试

使用dd往/dev/mapper/mpathb中写入数据,数据从sda写入,sdc处于备用状态

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda            1505.50      6022.00         0.00      12044          0
sdc               0.00         0.00         0.00          0          0
dm-3           1505.50      6022.00         0.00      12044          0

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.77   23.30    0.51   75.42

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda            1018.50      4074.00         0.00       8148          0
sdc               0.00         0.00         0.00          0          0
dm-3           1018.50      4074.00         0.00       8148          0

将sda网络断开,过几秒后,切换到sdc写数据

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.00         0.00         0.00          0          0
sdc            1175.50      4702.00         0.00       9404          0
dm-3           1175.50      4702.00         0.00       9404          0

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.52    0.00    1.30   22.41    1.42   74.35

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.00         0.00         0.00          0          0
sdc            1327.50      5310.00         0.00      10620          0
dm-3           1327.50      5310.00         0.00      10620          0

再查看sda、sdc主备情况如下:

mpathb (14f504e46494c45524832516444722d6945496f2d356d5942) dm-3 OPNFILER,VIRTUAL-DISK    
size=4.0G features='0' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=0 status=enabled
| `- 11:0:0:0 sda 8:0  failed faulty running
`-+- policy='service-time 0' prio=1 status=active
  `- 13:0:0:0 sdc 8:32 active ready running

2.2.5 multipathd 轮询模式测试

修改multipathd path_grouping_policy、path_selector(路径选择策略),在/etc/multipath.conf配置文件中,加入如下配置修改mpathb的工作模式.

multipaths {
        multipath {
                wwid                    14f504e46494c45524832516444722d6945496f2d356d5942
                alias                   mpathb
                path_grouping_policy    multibus
                path_selector           "round-robin 0"     #路径轮询
                failback                manual
                rr_weight               priorities
                no_path_retry           5
}

重启multipathd服务后,查看multipathd工作模式,可以看到sda sdc都处于active状态:

[root@192 ~]# multipath -ll
mpathb (14f504e46494c45524832516444722d6945496f2d356d5942) dm-3 OPNFILER,VIRTUAL-DISK    
size=4.0G features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
  |- 11:0:0:0 sda 8:0  active ready running
  `- 13:0:0:0 sdc 8:32 active ready running
mpatha (14f504e46494c4552496b6d5233792d415442662d34515736) dm-4 OPNFILER,VIRTUAL-DISK    
size=4.0G features='0' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=1 status=active
| `- 12:0:0:0 sdb 8:16 active ready running
`-+- policy='service-time 0' prio=1 status=enabled
  `- 14:0:0:0 sdd 8:48 active ready running

dd测试mpathb写入数据时的情况如下,sda sdc轮询写入,所以吞吐量一样:

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda             646.00      2584.00         0.00       5168          0
sdc             646.00      2584.00         0.00       5168          0
dm-3           1291.50      5168.00         0.00      10336          0

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.13    0.00    1.43   22.29    1.30   74.84

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda             812.50      3250.00         0.00       6500          0
sdc             812.00      3248.00         0.00       6496          0
dm-3           1625.00      6498.00         0.00      12996          0

3. 常用命令

3.1 清除iscsi记录

iscsiadm -m node --logoutall=all   #sessison logout
iscsiadm -m node -o delete -T iqn.2006-01.com.openfiler:disk02 -p 192.168.122.168  #删除target记录
iscsiadm -m node -o delete -T iqn.2006-01.com.openfiler:disk01 -p 192.168.122.168
iscsiadm -m node -o delete -T iqn.2006-01.com.openfiler:disk01 -p 172.16.10.78
iscsiadm -m node -o delete -T iqn.2006-01.com.openfiler:disk02 -p 172.16.10.78
rm -rf  /var/lib/iscsi/send_targets/*

3.2 target容量调整后,客户端更新

iscsiadm -m session -R
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,386评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,142评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,704评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,702评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,716评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,573评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,314评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,230评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,680评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,873评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,991评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,706评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,329评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,910评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,038评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,158评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,941评论 2 355

推荐阅读更多精彩内容