存储概述以及Multipath多路径环境部署

存储概述

  • 存储是根据不同的应用环境采取合理、安全、有效的方式将数据保存到某些介质上并能保证有效的访问
  • 一方面它是数据临时或长期驻留的物理媒介
  • 另一方面,它是保证数据完整安全存放的方式或者行为
  • 存储就是把这两个方面结合起来,向客户端提供一套数据存放解决方案
存储技术分类:
  • SCSI小型计算机系统接口
  • DSA直连式存储
  • NAS网络技术存储
  • SAN存储区域网络
  • FC光纤通道
常见的存储技术
  1. SCSI技术
  • Small Computer System Interface 的简称
  • 作为输入/输出接口
  • 主要用于硬盘、光盘、磁带机等设备
  1. DAS技术
  • Direct-Attached Storage的简称
  • 将存储设备通过SCSI接口或光纤通道直接连接到计算机上
  • 不能实现数据与其他主机的共享
  • 占用服务器操作系统资源,如CPU,IO等
  • 数据量越大,性能越差
  1. NAS技术(共享文件系统)
  • Network-Attached Storage 的简称
  • 一种专门用于数据存储服务器,以数据为中心,将存储设备与服务器彻底分离,集中管理数据, 从而释放带宽、提高性能,降低总拥有成本,保护投资
  • 用户通过TCP/IP协议访问数据
  • 采用标准的NFS/HTTP/CIFS等
  1. SAN技术(共享块设备)
  • Storage Area Network的简称
  • 通过光纤交换机、光纤路由器、光纤集线器等设备将磁盘阵列、磁带等存储设备与相关服务器连接起来,形成高速专网网络
    组成部分
  • 如路由器、光纤交换机
  • 接口:如SCSI,FC
  • 通信协议:如IP,SCSI
  1. Fibre Channel
  • 一种适合于千兆数据传输的、成熟而安全的解决方案
  • 与传统的SCSI相比,FC提供更高的数据传输速率、更远的传输距离、更多的设备连接支持以及更稳定的性能、更简易的安装

FC主要组件

  • 光纤
  • HBA(主机总线适配置器)
  • FC交换机

FC交换机交换拓扑

  • 点到点:point-to-point 简单将两个设备互连
  • 已裁定的环路:arbitrated loop 可多达126个设备共享一段信道或者环路
  • 交互式拓扑:switched fabric 所有设备通过光纤交换机互连

iSCSI技术

Internet SCSI

  • IETF制定的标准,将SCSI数据块映射为以太网数据包
  • 是一种基于IP Storage 理论的新型存储技术
  • 将存储行业广泛应用的SCSI接口技术与IP网络相结合
  • 可以在IP网络上构建SAN
  • 最初由Cisco和IBM开发

优势

  • 基于IP协议技术的标准
  • 允许网络在TCP/IP协议上传输SCSI命令
  • 相对FC SAN,iSCSI实现的IP SAN投资更低
  • 解决了传输效率、存储容量、兼容性、开放性、安全性等方面的问题
  • 没有距离限制

iSCSI技术
客户端

  • iSCSI Initiator:软件实现,成本低、性能较低
  • iSCSI HBA :硬件实现,性能好,成本较高
    存储设备端
  • iSCSI Target
    以太网交换机

配置iSCSI服务
本案例要求先搭建好一台iSCSI服务器,并将整个磁盘共享给客户端:
服务器上要额外配置一块硬盘
服务端安装target,并将新加的硬盘配置为iSCSI 的共享磁盘
在客户端上安装initiator,挂在服务器iSCSI,要求实现开机自动挂载

存储概述以及Multipath多路径环境部署_第1张图片
在这里插入图片描述

存储概述以及Multipath多路径环境部署_第2张图片

步骤

实现此案例需要按照如下步骤进行。

一:安装iSCSI服务器软件

(1)使用yum安装targetcli软件包

[root@proxy ~]# yum  -y  install  targetcli
.. ..
[root@proxy ~]# yum info targetcli
.. ..

二:通过命令行配置iSCSI服务

(1)真实主机准备底层存储磁盘
真实主机使用virt-manager工具为proxy虚拟机添加磁盘
双击打开虚拟机后添加磁盘设备。
登陆到192.168.2.5主机,为新添加的磁盘准备分区:

[root@proxy ~]# parted /dev/vdb mklabel gpt
[root@proxy ~]# parted /dev/vdb mkpart primary 1 100%

(2)使用targetcli定义后端存储
设置需要将哪个设备共享给其他主机,这里将/dev/vdb1设置为后端共享磁盘。

[root@proxy ~]# targetcli
/> ls
/> backstores/block create store /dev/vdb1
备注:store为任意名称

(3)创建iqn对象

给iSCSI共享设置一个共享名称,客户端访问时需要使用该共享名称。
/> /iscsi create iqn.2018-01.cn.tedu:server1

(4)授权客户机访问

类似于一个密码,设置ACL访问控制,拥有iqn.2018-01.cn.tedu:client1这个字符串的客户端才有权限访问服务器。
/> iscsi/iqn.2018-01.cn.tedu:server1/tpg1/acls create iqn.2018-01.cn.tedu:client1

(5) 绑定存储
将iqn共享名称(iqn.2018-01.cn.tedu:server1)与后端实际的存储设备(vdb)绑定。
/>iscsi/iqn.2018-01.cn.tedu:server1/tpg1/luns create /backstores/block/store
注意:block后面的store必须与前面步骤2定义后端存储create创建的名称一致。
(6) 存储绑定服务监听的地址,并保存配置

/> iscsi/iqn.2018-01.cn.tedu:server1/tpg1/portals/ create 0.0.0.0
/> saveconfig 
/> exit

三:服务管理

(1)启动服务

[root@proxy ~]# systemctl  {start|restart|stop|status} target
[root@proxy ~]# systemctl enable target

(2)查看端口信息

[root@proxy ~]# ss -utlnp | grep :3260

(3)关闭防火墙与SELinux

[root@proxy ~]# systemctl stop firewalld
[root@proxy ~]# setenforce 0

四:客户端访问(web1作为客户端的角色)

(1)客户端安装软件并启动服务

[root@web1 ~]# yum -y install iscsi-initiator-utils

(2)设置本机的iqn名称

[root@web1 ~]# vim /etc/iscsi/initiatorname.iscsi 
InitiatorName=iqn.2018-01.cn.tedu:client1

注意:必须跟服务器上配置的ACL一致!
(3)发现远程target存储
提示:参考man iscsiadm!

[root@web1 ~]# iscsiadm --mode discoverydb --type sendtargets --portal 192.168.2.5 --discover
[root@web1 ~]# iscsiadm --mode node --targetname iqn.2018-01.cn.tedu:server1 --portal 192.168.2.5:3260 --login

(3)客户端挂载iSCSI共享

[root@web1 ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             8:0    0  20G  0 disk    
#多了一个sda设备
sr0            11:0    1 1024M  0 rom 
vda           252:0    0   20G  0 disk
[root@web1 ~]# systemctl restart iscsi 

(4)分区、格式化、挂载

[root@web1 ~]# parted /dev/sda mklabel gpt
[root@web1 ~]# parted /dev/sda mkpart primary 1 800
[root@web1 ~]# mkfs.xfs /dev/sda1
[root@web1 ~]# mount /dev/sda1  /mnt
[root@web1 ~]# umount  /mnt

四:多台FTP或者http主机使用共享存储。

这里以FTP为例,web1和web2主机都安装vsftpd软件,使用统一的后端共享存储设备。

(1) web1操作(延续前面步骤三的实验):

[root@web1 ~]# mkdir /var/ftp/
[root@web1 ~]# mount /dev/sda1  /var/ftp/
[root@web1 ~]# yum -y install vsftpd
[root@web1 ~]# sed -i 's/^#anon/anon/' /etc/vsftpd/vsftpd.conf

备注:修改vsftpd配置文件,开启匿名上传功能。将下面2行默认的注释行打开。

#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
[root@web1 ~]# chmod 777  /var/ftp/pub
[root@web1 ~]# systemctl start vsftpd
[root@web1 ~]# systemctl enable vsftpd

(2) 真实主机访问web1的FTP共享,并任意上传一个文件到FTP服务器。

(3)当web1宕机后,web2主机可以继续使用iscsi提供FTP共享服务。

Web1关闭vsftpd服务,卸载iscsi挂载。
[root@web1 ~]# systemctl stop vsftpd
[root@web1 ~]# umount /var/ftp
添加iSCSI共享(web2操作)。
[root@web2 ~]# vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2018-01.cn.tedu:client1

注意:必须跟服务器上配置的ACL一致!

[root@web2 ~]# iscsiadm --mode discoverydb --type sendtargets --portal 192.168.2.5 --discover
[root@web2 ~]# iscsiadm --mode node --targetname iqn.2018-01.cn.tedu:server1 --portal 192.168.2.5:3260 --login
安装部署vsftpd软件(web2操作)。
[root@web2 ~]# yum -y install vsftpd
[root@web2 ~]# sed -i 's/^#anon/anon/' /etc/vsftpd/vsftpd.conf
[root@web2 ~]# chmod 777 /var/ftp/pub/
[root@web2 ~]# systemctl start vsftpd
[root@web2 ~]# systemctl enable vsftpd

(4)真实主机访问web2的FTP共享,查看共享里现有的数据,并任意上传一个新文件到FTP服务器

部署Multipath多路径环境

多路径概述

  • 当服务器到某一存储设备有多条路径时,每条路径都会识别为一个单独设备
  • 多路径允许你将服务器节点和储存阵列间的多个I/O
  • 这些I/O路径是可包含独立电缆、交换器和控制器的实体SAN链接
  • 多路径集合了I/O路径,并生成由这些集合路径组成的新设备

多路径设备识别符

  • 每个多路径设备都有一个WWID(全球识别符),它是全球唯一的、无法更改的号码
  • 默认情况下会将多路径设备的名称设定为它的WWID
  • 可以在多路径配置文件中设置user_friendly_names选项,该选项可将别名设为格式为mpathn的节点唯一名称
  • 也可以自定义存储设备的名称

多路径主要功能

  • 冗余
  • 主备模式,高可用
  • 改进的性能
  • 主主模式,负载均衡

多路径设备

  • 若没有DM Multipath,从服务器节点到存储控制器的每一条路径都会被系统视为独立的设备,即使I/O路径连接的是相同的服务器节点到相同的存储控制器也是如此
  • DM Multipath 提供了有逻辑的管理I/O路径的方法,即在基础设备顶端生成单一多路径设备

通过Multipath,实现以下目标:
在共享存储服务器上配置iSCSI,为应用服务器共享存储空间
应用服务器上配置iSCSI,发现远程共享存储
应用服务器上配置Multipath,将相同的共享存储映射为同一个名称

配置2台虚拟机,每台虚拟机均为两块网卡:
eth0和eth1都可用于iSCSI存储通讯
具体配置如表-

节点及网卡 地址应用
proxy(iSCSI服务器) eth0:192.168.4.5/24
eth1:192.168.2.5/24
web1(iSCSI客户端) eth0:192.168.4.100/24
eth1:192.168.2.100/24

存储概述以及Multipath多路径环境部署_第3张图片

实现此案例需要按照如下步骤进行。

一:存储服务器上添加额外的磁盘(如果已经完成案例1,此步骤可以忽略)

使用KVM软件新建(或修改)虚拟机,为虚拟机额外添加一块硬盘。

二:存储服务器上安装并配置共享存储(如果已经完成案例1,此步骤可用忽略)

(1)定义后端存储

[root@proxy ~]# targetcli
/> ls
/> backstores/block create store /dev/vdb1

(2)创建iqn对象

/> /iscsi create iqn.2018-01.cn.tedu:server1

(3)授权客户机访问

/> iscsi/iqn.2018-01.cn.tedu:server1/tpg1/acls create iqn.2018-01.cn.tedu:client1

(4)绑定存储

/>iscsi/iqn.2018-01.cn.tedu:server1/tpg1/luns create /backstores/block/store 

(5)绑定存储绑定监听地址,并保存配置

/> iscsi/iqn.2018-01.cn.tedu:server1/tpg1/portals/ create 0.0.0.0
/> saveconfig 
/> exit

三:在client服务器上安装并配置iSCSI客户端

(1)安装客户端软件(前面的案例1已经完成的情况下,可以忽略此步骤)

[root@web1 ~]# yum list | grep iscsi
iscsi-initiator-utils.x86_64           6.2.0.873-14.el6
[root@web1 ~]#  yum install -y iscsi-initiator-utils

(2)发现存储服务器的共享磁盘
因为有两条链路都可以连接到共享存储,所以需要在两条链路上都发现它。
注意:两次发现使用的IP地址不同!

[root@web1 ~]# iscsiadm --mode discoverydb --type sendtargets --portal 192.168.2.5 --discover
192.168.2.5:3260,1 iqn.2018-01.cn.tedu:client1
[root@web1 ~]# iscsiadm --mode discoverydb --type sendtargets --portal 192.168.4.5 --discover
192.168.4.5:3260,1 iqn.2018-01.cn.tedu:client1

(3)登陆共享存储
只需要将iscsi服务重启就可以自动登陆(就不需要再login了)。
在login之前,只能看到本地的存储,登陆之后,将会多出两块新的硬盘。

… …
[root@web1 ~]# service iscsi restart
停止 iscsi:                                               [确定]
正在启动 iscsi:                                           [确定]
[root@web1 ~]# lsblk 
NAME                        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                           8:0    0   20G   0 disk 
├─sda1                        8:1    0   20G  0 part
sdb                           8:0    0   20G   0 disk 
├─sdb1                        8:1    0   20G  0 part
vda                           252:0   0   20G  0 disk
├─vda1                       252:1   0    1G  0 part  /boot

提示:登陆的是同一个服务器的同一个iSCSI,但客户端看到的是两个独立的设备,sda和sdb。其实,这两个设备是同一个设备。
(4)设置开机自启动
iscsi用于自动login远程存储,iscsid是守护进程。

[root@web1 ~]# systemctl enable iscsid
[root@web1 ~]# systemctl enable iscsi

四:配置Multipath多路径

(1)安装多路径软件包

[root@web1 ~]# yum list | grep multipath
device-mapper-multipath.x86_64         0.4.9-111.el7                       Server
device-mapper-multipath-libs.i686      0.4.9-111.el7                       Server
device-mapper-multipath-libs.x86_64    0.4.9-111.el7                       Server
[root@web1 ~]# yum install -y device-mapper-multipath

(2)生成配置文件

[root@web1 ~]# cd /usr/share/doc/device-mapper-multipath-0.4.9/
[root@web1 ~]# ls multipath.conf
[root@web1 ~]# cp multipath.conf  /etc/multipath.conf

(3)获取wwid
登陆共享存储后,系统多了两块硬盘,这两块硬盘实际上是同一个存储设备。应用服务器使用哪个都可以,但是如果使用sdb时,sdb对应的链路出现故障,它不会自动切换到sda。
为了能够实现系统自动选择使用哪条链路,需要将这两块磁盘绑定为一个名称。
通过磁盘的wwid来判定哪些磁盘是相同的。
取得一块磁盘wwid的方法如下:

[root@web1 ~]# /usr/lib/udev/scsi_id --whitelisted --device=/dev/sdb 
360014059e8ba68638854e9093f3ba3a0

(4)修改配置文件
首先声明自动发现多路径:

[root@web1 ~]# vim /etc/multipath.conf
defaults {
        user_friendly_names yes
        find_multipaths yes
}

然后在文件的最后加入多路径声明,如果哪个存储设备的wwid和第(3)步获取的wwid一样,那么,为其取一个别名,叫mpatha。

multipaths {
    multipath {
        wwid    "360014059e8ba68638854e9093f3ba3a0"
        alias   mpatha
    }
}

五:启用Multipath多路径,并测试

注意:如果做案例1时,已经挂载了iSCSI设备,一定要先umount卸载掉再启动多路径。

(1)启动Multipath,并设置为开机启动

[root@web1 ~]# systemctl start multipathd
[root@web1 ~]# systemctl enable multipathd

(2)检查多路径设备文件
如果多路径设置成功,那么将在/dev/mapper下面生成名为mpatha的设备文件:

[root@web1 ~]# ls /dev/mapper/
control  mpatha  mpatha1

(3)对多路径设备文件执行分区、格式化、挂载操作
提示:如果前面已经对iscsi做过分区操作,则这里可以直接识别到mpatha1(就不需要再次分区了)。

[root@web1 ~]# fdisk -cu /dev/mapper/mpatha 
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x205c887e.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
Command (m for help): n      #创建分区
Command action
   e   extended
   p   primary partition (1-4)
p                      #分区类型为主分区
Partition number (1-4): 1      #分区编号为1
First sector (2048-4194303, default 2048):   #起始扇区回车
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-4194303, default 4194303):  #回车
Using default value 4194303
Command (m for help): w       #保存并退出
The partition table has been altered!
Calling ioctl() to re-read partition table.

新的分区名称应该是/dev/mapper/mpathap1,如果该文件不存在,则执行以下命令进行配置的重新载入:

[root@web1 ~]# ls /dev/mapper/    #再次查看,将会看到新的分区
control  mpatha  mpatha1  

创建目录并挂载(如果已经格式化,这里就不需要再次格式化,直接挂载即可):

[root@web1 ~]# mkfs.xfs /dev/mapper/mpatha1
[root@web1 ~]# mkdir /data
[root@web1 ~]# mount /dev/mapper/mpatha1 /data/
[root@web1 ~]# df -h /data/
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/mpatha1   20G  3.0M  19G   1%   /data

(4)验证多路径
查看多路径,sda和sdb都是running状态。

[root@web1 ~]# multipath -rr
reload: mpatha (360014059e8ba68638854e9093f3ba3a0) undef LIO-ORG ,store           
size=9.3G features='0' hwhandler='0' wp=undef
|-+- policy='service-time 0' prio=1 status=undef
| `- 2:0:0:0 sda 8:0  active ready running
`-+- policy='service-time 0' prio=1 status=undef
  `- 3:0:0:0 sdb 8:16 active ready running

关闭某个链路后,再次查看效果,此时会发现sdb为运行失败状态。

[root@web1 ~]# nmcli connection down eth1
[root@web1 ~]# multipath -rr
reject: mpatha (360014059e8ba68638854e9093f3ba3a0) undef LIO-ORG ,store           
size=9.3G features='0' hwhandler='0' wp=undef
|-+- policy='service-time 0' prio=0 status=undef
| `- 2:0:0:0 sda 8:0  active undef running
`-+- policy='service-time 0' prio=0 status=undef
  `- 3:0:0:0 sdb 8:16 active faulty running

使用-ll选项查看,仅sda为有效运行状态。

[root@web1 ~]# multipath -ll
reject: mpatha (360014059e8ba68638854e9093f3ba3a0) undef LIO-ORG ,store           
size=9.3G features='0' hwhandler='0' wp=undef
`-+- policy='service-time 0' prio=0 status=undef
  `- 2:0:0:0 sda 8:0  active undef running

你可能感兴趣的:(云计算,Linux云计算)