当前位置: 首页 > news >正文

linux下多路径dm不一致,DM多路径存储

什么是 multipath?

普通的电脑主机都是一个硬盘挂接到一个总线上,这里是一对一的关系。而到了有光纤组成的SAN 环境,由于主机和存储通过了光纤交换机连接,这样的话,就构成了多对多的关系。也就是说,主机到存储可以有多条路径可以选择。主机到存储之间的IO 由多条路径可以选择。既 然,每个主机到所对应的存储可以经过几条不同的路径,如果是同时使用的话,I/O 流量如何分配?其中一条路径坏掉了,如何处理?还有在操作系统的角度来 看,每条路径,操作系统会认为是一个实际存在的物理盘,但实际上只是通向同一个物理盘的不同路径而已,这样是在使用的时候,就给用户带来了困惑。多路径软件就是为了解决上面的问题应运而生的。

多路径的主要功能就是和存储设备一起配合实现如下功能:

1) 故障的切换和恢复

2) IO 流量的负载均衡

3) 磁盘的虚拟化

DM 多路径存储

系统环境: RHEL6 x86_64 small install selinux and iptables disabled

主机规划:

主机

网卡

软件

station133

eth0: 192.168.0.133

eth1: 192.168.0.132

scsi-target-utils

station28

eth0: 192.168.0.28

Iscsi-initiator-utils

device-mapper

device-mapper-multipath

可使用 DM-Multipath 提供:

•冗余

DM-Multipath 可在主动/被动配置中提供出错冗余。在主动/被动配置中,只有一半的路径在每次 I/O 时都使用。如果 I/O 路径的任意元素(电缆、交换机或者控制器)出现故障,就会将 DM-Multipath 切换到备用路径。

•改进性能

可将 DM-Multipath 配置为主动/主动模式,其中将 I/O 以轮叫调度算法方式分布到所有路径中。在有些配置中,DM-Multipath 可在 I/O 路径中检测负载并动态重新平衡负载。

DM-Multipath 组件

组件

描述

dm-multipath内核模式

为路径和路径组群重新指定I/O并支持出错冗余

mpathconf命令

配置并启用设备器多路径

multipath命令

列出并配置多路径设备。通常从/etc/rc.sysinit开始,还可以使用udev程序随时添加块设备,或者可用initramfs文件系统运行。

multipathd守护进程

监视器路径,如果路径故障并返回,它可能会启动路径族群切换。可为多路径设备提供互动修改。对/etc/multipathd.conf文件的任何修改都必须启动它。

kpartx命令

为设备中的分区生成设备映射器设备。这个命令对带DM-MP的DOS分区是很必要的,kpart在其自身软件包中就存在,但device-mapper-multipath软件包要依赖它。

1. 软件安装

station133:

yum install scsi-target-utils -y

station28:

yum install Iscsi-initiator-utils ccs device-mapper device-mapper-multipath -y

2. ISCSI 配置

station133:

service tgtd start

tgtadm --lld iscsi --mode target --op new --tid 1 -T storage1

tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 1 -b /dev/xvdb1

tgtadm --lld iscsi --mode target --op bind --tid 1 -I ALL

station28:

service iscsid start

iscsiadm -m discovery -t st -p 192.168.0.133

iscsiadm -m node -T storage1 -p 192.168.0.133 -l

iscsiadm -m discovery -t st -p 192.168.0.132

iscsiadm -m node -T storage1 -p 192.168.0.132 -l

3. DM 配置

配置文件模板:

#/usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf

你也可以使用: “mpathconf --enable ”指令生成主配置文件,并且会自动启用 multipathd.

vi /etc/multipath.conf

blacklist {

devnode "vda"    #禁止使用/dev/vda 设备

}

defaults {

user_friendly_names    yes

udev_dir                        /dev            #生成 udev 设备节点的目录,默认值为 /dev。

path_grouping_policy    failover    #failover 为主备模式; multibus 为负载均衡模式

failback        immediate #指定立即恢复到包含活跃路径的最高级别路径组群

no_path_retry        fail        #这个属性的数字值指定系统在禁用队列前应该试图使用失败的路径的次数.fail 值表明立即失败,无需排队。

}

#service multipathd start

当将 user_friendly_names 配置设定为 yes,会将该多路径设备的名称设定为 mpathn。

当在 DM-Multipath 中添加新设备时,这些新设备会位于 /dev 目录的两个不同位置:

/dev/mapper/mpathn 和 /dev/dm-n。

•/dev/mapper 中的设备是在引导过程中生成的。可使用这些设备访问多路径设备,例如在生成逻辑卷时。

•所有 /dev/dm-n 格式的设备都只能是作为内部使用,请不要使用它们。

# multipath -ll

mpatha (1IET00010001) dm-0 IET,VIRTUAL-DISK

size=2.0G features='0' hwhandler='0' wp=rw

|-+- policy='round-robin 0' prio=1 status=active

| `- 2:0:0:1 sda 8:0 active ready running

`-+- policy='round-robin 0' prio=1 status=enabled

`- 3:0:0:1 sdb 8:16 active ready running

注:可以看到 sda 和 sdb 两条链路复合成一条链路 mpatha,此为 Failover(主备)情况,当你对 mpatha 设备读写时,处于 active 状态的 sda 链路有数据流,而处于 enabled 状态的sdb 链路无数据流;当 sda 链路出现问题时,才会切换到 sdb 链路上。

4. 测试

用 dd 往磁盘读写数据,然后用 iostat 观察各通道的流量和状态,以判断 Failover 或负载均衡方式是否正常:

# dd if=/dev/zero of=/dev/mapper/mpatha

# iostat -k 2

如果成功你会发现,当断开链路 sda 时,等待片刻,会自动切换到链路 sdb 上,并不会造成写入失败。

手动切换模式:(如果需要永久生效直接修改 multipath.conf,并重新 reload)

# multipath -F        # 刷新所有的多路径设备映射

# multipath -p multibus -v0 # 切换成负载均衡模式

# multipath -ll

mpatha (1IET

00010001) dm-0 IET,VIRTUAL-DISK

size=2.0G features='0' hwhandler='0' wp=rw

`-+- policy='round-robin 0' prio=1 status=active

|- 2:0:0:1 sda 8:0 active ready running

`- 3:0:0:1 sdb 8:16 active ready running

如果成功你会发现它会根据轮叫方式调度链路 sda 和 sdb,从而实现负载均衡。

0b1331709591d260c1c78e86d0c51c18.png

相关文章:

  • linux虚拟主机管理平台,8 款顶级的虚拟主机管理系统
  • linux安装无线电软件,Uhd+GNUradio软件无线电平台在Linux系统上安装过程
  • linux主机健康检查,Zabbix监控Tengine 后端服务器健康检查
  • linux邮件查收,Linux mail命令:发送和接收电子邮件
  • 空间坐标转屏幕坐标c语言算法,线性代数——坐标系空间转换
  • openmv4可以c语言开发吗,OpenMV4开发笔记1-感光元件初始化
  • 西安邮电大学c语言期末考试题,西安邮电大学操作系统期末试卷(含答案)
  • android 本地文件读写,Android 读写文件方法汇总
  • android h 游戏下载地址,Android h游戏_如何在Android手机上玩游戏
  • android+捕获google账户+cancel按钮,MVVM: 这是一个android MVVM 框架,基于谷歌dataBinding技术实现...
  • android:stretchcolumns=0,1,2,3,android:stretchColumns用法
  • 鸿蒙os荣耀hdc大会,华为HDC2020开发者大会官宣,EMUI 11、鸿蒙OS 2.0将亮相
  • html模块不因为缩小页面错位,网页缩小放大后错位的解决方法(IE6有待解决)...
  • html5 消除浮动,css如何去掉浮动?
  • HTML实现简单的四则运算,JavaScript实现简单的四则运算计算器完整实例
  • [译]Python中的类属性与实例属性的区别
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • CentOS 7 防火墙操作
  • ES2017异步函数现已正式可用
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • java正则表式的使用
  • Js基础知识(一) - 变量
  • react 代码优化(一) ——事件处理
  • Vue组件定义
  • 工作手记之html2canvas使用概述
  • 观察者模式实现非直接耦合
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 离散点最小(凸)包围边界查找
  • 深度学习中的信息论知识详解
  • 实习面试笔记
  • 我的面试准备过程--容器(更新中)
  • PostgreSQL之连接数修改
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #在 README.md 中生成项目目录结构
  • (31)对象的克隆
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (solr系列:一)使用tomcat部署solr服务
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (十八)三元表达式和列表解析
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (正则)提取页面里的img标签
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .Net Redis的秒杀Dome和异步执行
  • .NET Remoting学习笔记(三)信道
  • .net 后台导出excel ,word
  • .net2005怎么读string形的xml,不是xml文件。
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • /3GB和/USERVA开关
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell
  • [].shift.call( arguments ) 和 [].slice.call( arguments )
  • []常用AT命令解释()