文章目录
- 场景2:DM-Multipath 多路径存储路由(SAN存储,重点)
- 完整部署(Ubuntu/CentOS通用)
- 1. 安装multipath工具
- 2. 生成multipath主配置文件
- 3. 加载内核模块,启动服务
- 4. 扫描存储LUN,生成多路径虚拟设备
- 5. 查看存储路由信息
- 场景3:纯dmsetup手动自定义DM映射(原生底层,不推荐生产,适合学习)
- 存储路由常用排查命令汇总
# 场景1:LVM(dm-linear,最常用本地存储路由) LVM底层就是`dm-linear`,把多个物理磁盘PV组织成VG卷组,再划分LV逻辑卷(DM虚拟设备 `/dev/mapper/vgname-lvname`)。 IO路由:应用→文件系统→LV(dm) →映射到多个PV磁盘。 ### 步骤 1. 准备裸磁盘,例如 `/dev/sdb /dev/sdc`(无分区、无文件系统) ```bash # 创建PV(物理卷) pvcreate /dev/sdb pvcreate /dev/sdc # 创建VG卷组,把2块盘加入 vgcreate vg_data /dev/sdb /dev/sdc # 创建LV逻辑卷(例如20G) lvcreate -L 20G -n lv_data vg_data生成虚拟块设备:
/dev/mapper/vg_data-lv_data
- 查看DM底层存储路由映射表
dmsetup table vg_data-lv_data输出示例:
0 41943040 linear 8:16 0含义:从逻辑块0开始,总41943040块,线性映射到设备主从号8:16(/dev/sdb),偏移0。如果跨多块盘,会有多条映射条目。
- 格式化+挂载使用
mkfs.ext4 /dev/mapper/vg_data-lv_datamkdir/datamount/dev/mapper/vg_data-lv_data /data- 开机自动挂载(写入/etc/fstab)
/dev/mapper/vg_data-lv_data /data ext4 defaults 0 0扩容场景:新增磁盘做成PV,
vgextend加到VG,lvextend扩容LV,DM会自动更新存储路由映射表。
场景2:DM-Multipath 多路径存储路由(SAN存储,重点)
适用:服务器HBA卡连SAN,同一个存储LUN,多条光纤链路,系统识别出多个sd设备(/dev/sdb /dev/sdc),实际是同一个LUN。
multipath内核模块dm-multipath:多条物理路径合并为1个虚拟设备 /dev/mapper/mpathX,配置路径调度策略(轮询/主备)实现存储路由负载均衡、链路故障自动切换。
完整部署(Ubuntu/CentOS通用)
1. 安装multipath工具
# Ubuntuaptinstallmultipath-tools-y# CentOS/RHELdnfinstalldevice-mapper-multipath-y2. 生成multipath主配置文件
# CentOSmpathconf--enable# Ubuntu默认自带 /etc/multipath.conf,如不存在手动新建编辑配置文件/etc/multipath.conf
defaults { user_friendly_names yes # 使用mpathX友好命名 path_selector "round-robin 0" # 路由策略:round-robin轮询;failover主备 path_grouping_policy multibus failback immediate no_path_retry fail } # 识别你的存储厂商LUN,可添加blacklist屏蔽本地磁盘,防止本地盘被误纳入multipath blacklist { devnode "^(sr|hd|vd|nvme)" }path_selector存储路由策略:round-robin 0:轮询,IO请求轮流分发所有可用链路,存储负载均衡;failover:主备,只用优先级最高主路径,主链路断,自动切备用链路(数据库SAN常用)。
3. 加载内核模块,启动服务
modprobe dm-multipath modprobe dm-round-robin systemctlenable--nowmultipathd4. 扫描存储LUN,生成多路径虚拟设备
multipath-v25. 查看存储路由信息
# 查看多路径拓扑(重点,查看每条路径状态)multipath-ll# 查看dm-multipath底层映射表dmsetup table mpath0输出可以看到:虚拟设备mpath0,后端多条路径,IO按照path_selector策略路由分发。
之后,使用/dev/mapper/mpath0作为存储设备,不要直接使用底层/dev/sdb、/dev/sdc。
可以在mpath之上继续做LVM:pvcreate /dev/mapper/mpath0,叠加多层存储路由。
场景3:纯dmsetup手动自定义DM映射(原生底层,不推荐生产,适合学习)
直接用dmsetup手动编写存储路由映射表,不依赖LVM工具。
示例:把/dev/sdb前10G映射为虚拟设备myvol
# 创建映射:起始块0,块数量20971520,linear映射 /dev/sdb,偏移0echo"0 20971520 linear /dev/sdb 0"|dmsetup create myvol# 查看路由表dmsetup table myvol# 删除映射dmsetup remove myvol这种方式配置不会持久化,重启失效;生产用LVM/multipath,自动管理dm映射。
存储路由常用排查命令汇总
lsblk# 查看块设备拓扑,识别dm虚拟设备dmsetupls# 列出所有dm设备dmsetup table[设备名]# 查看底层IO映射路由(最重要)multipath-ll# 查看SAN多路径路由状态cat/proc/dmstats# DM IO统计iostat /dev/mapper/xxx# 查看虚拟设备IO负载blktrace# 抓底层bio请求,追踪IO路由链路