Linux文件系统-ISCSI存储和Multipathd

Linux文件系统-ISCSI存储和Multipathd,第1张

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

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

multipathd可以解决上述的多路径问题,其主要原理包括:

a. 每一个scsi设备都有唯一的scsi_id,multipathd通过探测scsi_id来判断不同路径后面是不是同一个存储设备.

b. 通过内核device-mapper功能,将多条路径映射为单一的块设备,提供给文件系统使用.

c. 由于多路径的存在,multipathd可以提供负载均衡和高可用的服务.

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

通过openfiler搭建iscsi存储服务器,openfiler镜像包及部署手册,具体参考openfiler官网.

https://www.openfiler.com/community/download

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

需要安装如下软件包:

iscsi-initiator-utils:提供iscsid服务,及iscsi管理工具iscsiadm

device-mapper-multipath&device-mapper-multipath-libs:提供multipathd服务及multipath管理工具

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

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

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

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

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

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

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

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

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

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

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

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

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

      方案一:

Linux不像Windows一样,接上新硬件后可以自动识别,在Linux下无法自动识别新硬件的,需要手动去识别。USB移动存储设备通常被识别为sda1,具体可以通过fdisk -l命令查询。

在使用U盘前,我们先要为外挂点新建一个子目录,一般外挂点的子目录都是建立在/mnt里面的,我们也建在那里,当然也可以建在/目录下,名字可以自己定,我们就取名为usb,终端下的命令如下:

mkdir /mnt/usb

然后我们就可以接上我的U盘了,然后在终端下输入命令并击Enter键即可:

mount /dev/sda1 /mnt/usb

在Windows下当我们用完U盘后,在我们取下U盘前我们先要删除,同样在Linux下我们也要删除挂起点,方法是:

umount /dev/sda1 /mnt/usb 或 umount /dev/sda1

如果不把U盘给umount掉,那样很容易造成数据的丢失

方案二:

USB的支持关键在于驱动,没有驱动设备时mount执行是肯定不成的。我在Red Hat里使用U盘的通用方法如下,屡试不爽

1. 先别插U盘,/sbin/lsmod看是否有usb-storage。如果没有的话:

cd /lib/modules/2.4.20-8/kernel/drivers/usb

for v in *.o storage/*.o do /sbin/insmod $v done

2. 这里再/sbin/lsmod,应该有usbcore、usb-ohci(或usb-uhci,根据主板芯片组而不同)、usb-storage、scsi_mod等。其中usb-storage的状态应该为

(unused)。

3. 插入U盘,不停的'/sbin/lsmod,这期间usb-storage的状态应为Initializing,持续时间大约半分钟,其实就相当于Windows在右下角不停的d汽球:)

4. 初始化结束后, /sbin/fdisk -l,应该能看到/dev/sda1设备。这时,执行mount /dev/sda1 /mnt/udisk 才能成功。如果是MSDOS格式,又想看到中文,可以

mount -t vfat /dev/sda1 /mnt/udisk -o iocharset=gb2312。

(为方便可以/etc/fstab加一行,以后就可以 mount /mnt/udisk就行了)。

5. 奇怪的是有时候fdisk是看不到sda1,但是也能mount上使用以上步骤挂U盘基本上可说是万全了。台式机、笔记本、VMware都一样。

mkdir /mnt/usb

mount /dev/sda1 /mnt/usb

笔记本上安装linux用法和台式机一样

ps:

首先要检查lsmod|grep usb-storage 这是支持USB的模块。如果没有的话,是无法 *** 作USB接口的设备的。

如没有的话,可以手功modprobe usb-storage,一般查看U盘可以用fdisk -l可以很清楚的看到这个硬件的设备名,比猜测硬件名要准确多了。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8349982.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-15
下一篇2023-04-15

发表评论

登录后才能评论

评论列表(0条)

    保存