3-7-iscsi
ISCSI存储
Internet 小型计算机系统接口 (iSCSI:Internet Small Computer System Interface)
IBM公司研发,一个供硬件设备使用的可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够在诸如高速千兆以太网上进行路由选择。iSCSI技术是一种新储存技术,该技术是将现有SCSI接口与以太网络(Ethernet)技术结合,使服务器可与使用IP网络的储存装置互相交换资料。
iSCSI是一种基于 TCP/IP的协议,用来建立和管理 IP 存储设备、主机和客户机等之间的相互连接,并创建存储区域网络(SAN)。SAN 使得 SCSI 协议应用于高速数据传输网络成为可能,这种传输以数据块级别(block-level)在多个数据存储网络间进行。
iSCSI是用于将SCSI数据块映射成以太网数据包,iSCSI协议是一种利用IP网络来传输潜伏时间短的SCSI数据块的方法,ISCSI使用以太网协议传送SCSI命令、响应和数据。通过这种方法,ISCSI克服了直接连接存储的局限性,使我们可以跨不同服务器共享存储资源,并可以在不停机状态下扩充存储容量。
iSCSI的优势:
件成本低:构建iSCSI存储网络,除了存储设备外,交换机、线缆、接口卡都是标准的以太网配件,价格相对来说比较低廉。同时,iSCSI还可以在现有的网络上直接安装,并不需要更改企业的网络体系,这样可以最大程度地节约投入。
操作简单,维护方便:对iSCSI存储网络的管理,实际上就是对以太网设备的管理,只需花费少量的资金去培训iSCSI存储网络管理员。当iSCSI存储网络出现故障时,问题定位及解决也会因为以太网的普及而变得容易。
扩充性强:对于已经构建的iSCSI存储网络来说,增加iSCSI存储设备和服务器都将变得简单且无需改变网络的体系结构。
带宽和性能:iSCSI存储网络的访问带宽依赖以太网带宽。随着千兆以太网的普及和万兆以太网的应用,iSCSI存储网络会达到甚至超过FC(FiberChannel,光纤通道)存储网络的带宽和性能。
突破距离限制:iSCSI存储网络使用的是以太网,因而在服务器和存储设备的空间布局上的限制就会少了很多,甚至可以跨越地区和国家。
前段时间最热门的技术就是iSCSI存储技术,各存储设备厂商都纷纷推出iSCSI设备(企业级别或家用级别),iSCSI存储设备的销量也在快速增长。
存储设备
数据存储:硬盘
硬盘存放:存储柜
存储柜
常见品牌:Dell,IBM,Lenovo,HP,SUN……
存储盘
存储盘接口SAS,容量小,价格贵,常见容量300G,600G
存储盘接口SATA:容量大,价格低,不支持热插拔
假SAS盘:容量大,支持热插拔,价格低,也就是SAS接口的SATA盘,但是速度慢
区分真假:容量-SAS(2.5”)一般是72G、146G、300G、450G、500G、600G、900G、1T
3.5” 一般是300、450、600、750、1T、2T
然后就是价格:同等容量的存储盘,价格会差上好几倍,
不过对于速度来说,我们有通过其他办法来解决,那么就可以使用假SAS盘替代(假SAS硬盘不是假硬盘)
SAS和SATA接口的区分
上图是SAS接口,下图是SATA接口
http://detail.zol.com.cn/serverhd/s1950/ //中关村SAS硬盘价格比对
普通SATA磁盘
以西部数据
2015年上半年参考京东参考价:
西部数据(WD)蓝盘 1TB SATA6Gb/s 7200转64M 台式机硬盘 ¥339.90
西部数据(WD)黑盘 2TB SATA6Gb/s 7200转64MB 台式机硬盘¥999.00
西部数据(WD)红盘 2TB SATA6Gb/s 64M 台式机硬盘¥849.00
西部数据(WD)紫盘 2TB SATA6Gb/s 64M 监控硬盘 ¥589.00
西部数据(WD)绿盘 2TB SATA6Gb/s 64M 台式机硬盘¥499.00
西部数据(WD)绿盘 6TB SATA6Gb/s 64MB台式机硬盘¥1899.00
硬盘搁置盒
方便热插拔使用的,免螺丝安装,又称硬盘托架
存储方式
存储方式分为直连式和非直连式
直连式存储
服务器本身自带硬盘(不讲解)
优点: 1. 使用方便
2. 直接识别为一个块设备。然后,制作分区、文件系统、挂载访问
缺点: 1. 消耗本服务器的资源I/O、CPU
非直连式存储
NAS网络附属存储和SAN存储区域网络
网络很重要1000mbps、10000mbps (万兆网卡,10G)、100G网卡
以太网(RJ45+以太网交换机+路由器……)/光纤网(下图是光纤网卡):
下图是一张光纤路由:
NAS
NAS(Network Attached Storage 网络附属存储),NAS服务器是连接在网络上,具备资料存储功能的服务器,一种专用数据存储服务器。网络附属存储基于标准网络协议(Tcp/IP)实现数据传输,为网络中的Windows / Linux / Mac OS 等各种不同操作系统的计算机提供文件共享和数据备份,做的好的NAS也会附带很多功能,诸如FTP,HTTP,数据库等等,甚至通过插件的方式实现很多企业级功能如ERP,OA!NAS一般通过网页进行管理!
目前国际著名的NAS企业有:Netapp,EMC,OUO
常见的NAS企业除开上述三个国际知名的外,还有:QNAP(威联通),Synology(群晖),Seagate(希捷),ONE SPACE,Western Digital(西数),TerraMaster(铁威马),Buffalo(巴法络)
DIY NAS系统有:freenas,nas4free,OPenMediaVault,U-NAS
DIY 家用NAS可以使用:黑群晖的GSM(插件多,功能强)
【去IOE计划(alibaba打造的概念,政府也有意……):IBM,Oracle,EMC】
【美国八大金刚:思科、IBM、谷歌、高通、英特尔、苹果、甲骨文、微软】
NAS的优点
1. I/O消耗由前端服务器转移到后端存储设备上
2. 扩展方便
NAS缺点
1. 以前网络会成为瓶颈。 但是现在使用10G光纤卡,就可以解决这个问题。
NAS用到最常见的两个技术
NAS采用了NFS技术实现类Unix系统之前存储共享。使用CIFS实现Windows与类Unix系统之前数据共享。samba 服务器就是使用CIFS计术。
SAN
存储区域网络(Storage Area Network and SAN Protocols,简写SAN,即存储区域网络,是一种高速网络,提供在计算机与存储系统之间的数据传输。存储设备是指一台或多台用以存储计算机数据的磁盘设备,通常指磁盘阵列。
SAN存储,采用网状通道(Fibre Channel ,简称FC)技术,通过FC交换机连接存储阵列和服务器主机,建立专用于数据存储的区域网络。
SAN由于其基础是一个专用网络,因此扩展性很强,不管是在一个SAN系统中增加一定的存储空间还是增加几台使用存储空间的服务器都非常方便。
目前常见的SAN有FC-SAN和IP-SAN,其中FC-SAN为通过光纤通道协议转发SCSI协议,IP-SAN通过TCP协议转发SCSI协议(拓展:SAS盘是使用串行的SCSI协议。 SCSI盘使用的是并行的SCSI协议)
SAN分类
FC SAN-->都是通过通过scsi协议:通过wwwn、wwwp来定位的,光纤有一个全球唯一的编号!使用FC来做,不需要我们运维工作人员来做,厂商来的话必做。
IP SAN-->是通过iscsi协议:通过IP地址来定位的
既然我们通过专网网络,将我们的计算机和我们的存储区域连接起来,那么我们的存储区域网络的数据量肯定特别大,通过HBA卡来缓解这种瓶颈,提高服务器性能!
HBA卡
HBA卡,即主机总线适配器英文“Host Bus Adapter”缩写。是一个在服务器和存储装置间提供输入/输出(I/O)处理和物理连接的电路板或集成电路适配器。
HBA卡可以减轻服务器主处理器在数据存储和检索任务的负担,它能够提高服务器的性能。
若是FC-HBA卡,那么俗称光纤网卡
NAS和SAN的区别
第一,从网络架构来说,本质区别在于:
NAS,直接使用TCP/IP传输数据。SAN使用SCSI或iSCSI协议传输数据。
第二,从文件读写实现方法上来说,本质区别在于:
NAS采用了NFS和 CIFS技术实现文件共享。说明NAS是基于操作系统的“文件级”读写操作。SAN中计算机和存储间的接口是底层的块协议,它按照协议头的“块地址+偏移地址”来定位。共享的存储和前端的操作系统类型没有关系。任务服务器操作系统,都可以正常实别。所以SAN配置完成之后,我们的操作系统会把它认为就是本地的一块磁盘,也就被认识为块设备!
SAN存储架构拓扑
FC-SAN的存储架构拓扑
IP-SAN
实战:配置IPSAN存储
IP-SAN的运行模式:C/S模式,工作端口3260
服务端:服务名-target XueGod63.cn(目标)
客户端:服务名-initator XueGod61.cn XueGod64.cn(发起人).
服务端软件安装
[root@xuegod63 ~]# yum install -y scsi-target-utils
[root@xuegod63 ~]# ll /etc/tgt/targets.conf //主配置文件位置
-rw------- 1 root root 6945 Sep 4 2013 /etc/tgt/targets.conf
[root@xuegod63 ~]# /etc/init.d/tgtd restart //服务启动
[root@xuegod63 ~]# chkconfig tgtd on
[root@xuegod63 ~]# grep 3260 /etc/services
iscsi-target 3260/tcp # iSCSI port
iscsi-target 3260/udp # iSCSI port
[root@xuegod63 ~]# netstat -antup | grep 3260
tcp 0 0 0.0.0.0:3260 0.0.0.0:* LISTEN 2992/tgtd
tcp 0 0 :::3260 :::* LISTEN 2992/tgtd
存储服务新建存储区
XueGod63作为我们的存储服务器,配置成IP-SAN,将XueGod63上的sda4分区通过ipsan共享出去!
[root@xuegod63 ~]# fdisk /dev/sda
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): p
Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00092896
Device Boot Start End Blocks Id System
/dev/sda1 * 1 26 204800 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 26 1332 10485760 83 Linux
/dev/sda3 1332 1462 1048576 82 Linux swap / Solaris
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Selected partition 4
First cylinder (1462-2610, default 1462):
Using default value 1462
Last cylinder, +cylinders or +size{K,M,G} (1462-2610, default 2610): +5G
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
[root@xuegod63 ~]# partx -a /dev/sda //系统盘,新加分区不能马上识别
BLKPG: Device or resource busy
error adding partition 1
BLKPG: Device or resource busy
error adding partition 2
BLKPG: Device or resource busy
error adding partition 3
[root@xuegod63 ~]# partx -a /dev/sda //多执行一次即可
BLKPG: Device or resource busy
error adding partition 1
BLKPG: Device or resource busy
error adding partition 2
BLKPG: Device or resource busy
error adding partition 3
BLKPG: Device or resource busy
error adding partition 4
共享存储区
[root@xuegod63 ~]# vim /etc/tgt/targets.conf //修改住配置文件,新加
<target iqn.2015-01.cn.xuegod.www:target_san1>
backing-store /dev/sda4
initiator-address 192.168.1.61
vendor_id xuegod
product_id target1
</target>
上面这段内容添加在下面模板下面
75 #<target iqn.2008-09.com.example:server.target4>
76 # direct-store /dev/sdb # Becomes LUN 1
77 # direct-store /dev/sdc # Becomes LUN 2
78 # direct-store /dev/sdd # Becomes LUN 3
79 # write-cache off
80 # vendor_id MyCompany Inc.
81 #</target>
注释:
default-driver iscsi #默认此配置文件默认全部注释,次使用iscsi驱动
<tarrget iqn.2015-1.cn.xuegod.www:target_san1> # iscsi正规名字格式 : iqn.年-月.主机名倒着写: target端名字
backing-store /dev/hda4 # 可以是具体的分区,也可以是DD出来的文件。不能小于5G。 (后面的文件系统是GFS,光日志空间就128M)
initiator-address 192.168.1.64 #指定允许访问的此存储主机
initiator-address 192.168.1.61 #指定允许访问的此存储主机
vendor_id “xuegod” #vendor (vendər 供应商 ) 。 供应厂商编号 标识这个设备(字符不要过长)
product_id "TARGET1" # 产品编号
</target>
[root@xuegod63 ~]# service tgtd restart
[root@xuegod63 ~]# tgt-admin --show //查看状态
Target 1: iqn.2015-01.cn.xuegod.www:target_san1
System information:
Driver: iscsi
State: ready
I_T nexus information:
LUN information:
LUN: 0
Type: controller
SCSI ID: IET 00010000
SCSI SN: beaf10
Size: 0 MB, Block size: 1
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
Backing store type: null
Backing store path: None
Backing store flags:
LUN: 1
Type: disk
SCSI ID: IET 00010001
SCSI SN: beaf11
Size: 5375 MB, Block size: 512
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
Backing store type: rdwr
Backing store path: /dev/sda4
Backing store flags:
Account information:
ACL information:
192.168.1.61
客户端配置
[root@xuegod61 ~]# yum install -y iscsi-initiator-utils //客户端,发起者
[root@xuegod61 ~]# /etc/init.d/iscsid start //直接启用没有任何反应
这里首先要发现target存储,再启动客户端服务,才有效
[root@xuegod61 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.1.63:3260
Starting iscsid: [ OK ]
192.168.1.63:3260,1 iqn.2015-01.cn.xuegod.www:target_san1 #发现的信息会写入/var/lib/iscsi/目录下
[root@xuegod61 ~]# /etc/init.d/iscsid status
iscsid (pid 3109) is running...
[root@xuegod61 ~]# yum install -y tree //安装tree命令,用于查询树
[root@xuegod61 ~]# tree /var/lib/iscsi/ //发现target后,会在此目录先生成树结构
/var/lib/iscsi/
├── ifaces
├── isns
├── nodes
│ └── iqn.2015-01.cn.xuegod.www:target_san1
│ └── 192.168.1.63,3260,1
│ └── default
├── send_targets
│ └── 192.168.1.63,3260
│ ├── iqn.2015-01.cn.xuegod.www:target_san1,192.168.1.63,3260,1,default -> /var/lib/iscsi/nodes/iqn.2015-01.cn.xuegod.www:target_san1/192.168.1.63,3260,1
│ └── st_config
├── slp
└── static
客户端服务启动关系
[root@xuegod61 ~]# /etc/init.d/iscsid start
[root@xuegod61 ~]# /etc/init.d/iscsi restart //先启动iscsid,再启动iscsi,启动iscsi是根据/var/lib/iscsi/ 中发现的信息,识别设备
关闭:
[root@xuegod61 ~]# /etc/init.d/iscsi stop
[root@xuegod61 ~]# /etc/init.d/iscsid stop
开机自动启动:
[root@xuegod61 ~]# chkconfig iscsi on
[root@xuegod61 ~]# chkconfig iscsid on
查看默认开机两个服务的先后顺序:
[root@xuegod64 ~]# grep chkconfig: /etc/init.d/iscsid
# chkconfig: 345 7 89
[root@xuegod64 ~]# grep chkconfig: /etc/init.d/iscsi
# chkconfig: 345 13 89
查看是否发现硬盘
[root@xuegod61 ~]# ll /dev/sdb
brw-rw---- 1 root disk 8, 16 Dec 22 10:28 /dev/sdb
[root@xuegod61 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 200M 0 part /boot
├─sda2 8:2 0 10G 0 part /
└─sda3 8:3 0 1G 0 part [SWAP]
sr0 11:0 1 3.6G 0 rom /media
sdb 8:16 0 5G 0 disk
卸载与登陆scsi设备
[root@xuegod61 ~]# iscsiadm -m node -T iqn.2015-01.cn.xuegod.www:target_san1 -u
Logging out of session [sid: 1, target: iqn.2015-01.cn.xuegod.www:target_san1, portal: 192.168.1.63,3260]
Logout of [sid: 1, target: iqn.2015-01.cn.xuegod.www:target_san1, portal: 192.168.1.63,3260] successful.
[root@xuegod61 ~]# lsblk //已没有了sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 200M 0 part /boot
├─sda2 8:2 0 10G 0 part /
└─sda3 8:3 0 1G 0 part [SWAP]
sr0 11:0 1 3.6G 0 rom /media
[root@xuegod61 ~]# iscsiadm -m node -T iqn.2015-01.cn.xuegod.www:target_san1 –l
//重新登陆设备
Logging in to [iface: default, target: iqn.2015-01.cn.xuegod.www:target_san1, portal: 192.168.1.63,3260] (multiple)
Login to [iface: default, target: iqn.2015-01.cn.xuegod.www:target_san1, portal: 192.168.1.63,3260] successful.
上面的方法看起来比较复杂,命令比较长,简单的通过服务卸载与登陆
[root@xuegod61 ~]# /etc/init.d/iscsi stop //卸载
[root@xuegod61 ~]# ll /dev/sdb
ls: cannot access /dev/sdb: No such file or directory
[root@xuegod61 ~]# /etc/init.d/iscsi start //登陆
[root@xuegod61 ~]# ll /dev/sdb
brw-rw---- 1 root disk 8, 16 Dec 22 10:37 /dev/sdb
[root@xuegod61 ~]# ll /var/lib/iscsi/
drwxr-xr-x 2 root root 4096 Oct 8 2013 ifaces
drwxr-xr-x 2 root root 4096 Oct 8 2013 isns
drwxr-xr-x 3 root root 4096 Dec 22 10:22 nodes
drwxr-xr-x 3 root root 4096 Dec 22 10:21 send_targets
drwxr-xr-x 2 root root 4096 Oct 8 2013 slp
drwxr-xr-x 2 root root 4096 Oct 8 2013 static
[root@xuegod61 ~]# /etc/init.d/iscsi stop
[root@xuegod61 ~]# rm -rf /var/lib/iscsi/* //彻底退出
使用scsi设备
[root@xuegod61 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.1.63:3260
//发现存储
[root@xuegod61 ~]# /etc/init.d/iscsid restart
[root@xuegod61 ~]# /etc/init.d/iscsi restart
[root@xuegod61 ~]# ls /dev/sdb //发现/dev/sdb硬盘
[root@xuegod61 ~]# fdisk /dev/sdb //当本地盘用即可
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x6d23a932.
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)
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1019, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-1019, default 1019): #直接回车使用所有可以使用的空间。
Using default value 1019
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@xuegod61 ~]# lsblk //若没有,安装util-linux-ng包
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 200M 0 part /boot
├─sda2 8:2 0 10G 0 part /
└─sda3 8:3 0 1G 0 part [SWAP]
sr0 11:0 1 3.6G 0 rom /media
sdb 8:16 0 5G 0 disk
└─sdb1 8:17 0 5G 0 part
[root@xuegod61 ~]# mkfs.ext4 /dev/sdb1 //格式化
[root@xuegod61 ~]# mount /dev/sdb1 /opt/ //挂载,生产要写入fstab
[root@xuegod61 ~]# cp /etc/passwd /opt/ //测试文件写入
[root@xuegod61 ~]# df -h /opt/ //看看大小
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 5.0G 138M 4.6G 3% /opt
再添加一台客户端
[root@xuegod63 ~]# vim /etc/tgt/targets.conf
<target iqn.2015-01.cn.xuegod.www:target_san1>
backing-store /dev/sda4
initiator-address 192.168.1.61
initiator-address 192.168.1.64 #添加一个客户端
vendor_id xuegod
product_id target1
</target>
[root@xuegod61 ~]# umount /opt/ //客户端卸载
[root@xuegod61 ~]# /etc/init.d/iscsi stop //客户端停止服务,做了这两个,再启动服务器端,否则,数据损失丢弃清空的情况发生
[root@xuegod63 ~]# /etc/init.d/tgtd restart
[root@xuegod63 ~]# tgt-admin –show
……
Account information:
ACL information:
192.168.1.61
192.168.1.64
测试
[root@xuegod61 ~]# /etc/init.d/iscsi start
[root@xuegod61 ~]# mount /dev/sdb1 /opt/ //挂载
XueGod64上的测试
[root@xuegod64 ~]# rpm -ivh /media/Packages/iscsi-initiator-utils-6.2.0.873-10.el6.x86_64.rpm
[root@xuegod64 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.1.63:3260
//有时候环境和你操作的顺序问题,可能无法发现,重启一下SAN Server,然后两台客户端重新sendtargets一下,重新启动服务和挂载
[root@xuegod64 ~]# /etc/init.d/iscsid start
[root@xuegod64 ~]# /etc/init.d/iscsi start
[root@xuegod64 ~]# lsblk //已经能看到设备了
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 200M 0 part /boot
├─sda2 8:2 0 10G 0 part /
└─sda3 8:3 0 1G 0 part [SWAP]
sr0 11:0 1 3.6G 0 rom /media
sdb 8:16 0 5G 0 disk
└─sdb1 8:17 0 5G 0 part
[root@xuegod64 ~]# mount /dev/sdb1 /opt/
[root@xuegod64 ~]# ll /opt/ //数据已经拿到
drwx------ 2 root root 16384 Dec 22 10:45 lost+found
-rw-r--r-- 1 root root 1578 Dec 22 10:46 passwd
[root@xuegod64 ~]# cp /etc/hosts /opt/ //64添加数据测试
t@xuegod61 ~]# ll /opt/ //而61没有数据
drwx------ 2 root root 16384 Dec 22 10:45 lost+found
-rw-r--r-- 1 root root 1578 Dec 22 10:46 passwd
没有同步,是因为我们使用的ext4 文件系统,ext4文件系统不支持多个客户端同时使用。 使用GFS文件系统就可以同步。
http://343614597.blog.51cto.com/7056394/1699563 //SAN+GFS 配置
ISCSI多路径应用
如果存储服务器到交换机只有一条线路的时候,那么一条线路出线故障,整个就没法使用了,所以多路径可以解决这个问题,避免单点故障
如上图,如果SAN服务器与客户端交换机只有一条线路相连,那么如果交换机或者线路出现故障,那么整个通讯中断,如图二,SAN服务器与我们的客户端有两条以上的线路相连,当然或许是一台交换机,也或许是两天交换机用冗余,那么其中一条交换机或者线路中断,我们的整个通讯任然正常,这就是多路径的作用!也就是实用多路径,避免了单点故障带给我们的损失!
ISCSI多路径构建
通过VMware模拟多路径,使用下面的拓扑
基础环境配置
从上面的拓扑图,我们按照拓扑图结构配置好IP
将xuegod63配置成ip san,将xuegod63上的sda4分区,通过ip san 共享出去。
服务器端: target xuegod63.cn 192.168.1.63
客户端:initiator xuegod64.cn 192.168.1.64
SAN基础环境
添加一块网卡
启动之后,生成eth1
[root@xuegod63 ~]# service network restart
[root@xuegod63 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:D7:42:30
inet addr:192.168.1.63 Bcast:192.168.1.255 Mask:255.255.255.0
……
eth1 Link encap:Ethernet HWaddr 00:0C:29:D7:42:3A
inet addr:192.168.2.63 Bcast:192.168.2.255 Mask:255.255.255.0
客户端基础环境
添加一块网卡
启动VMware,生成eth1
[root@xuegod64 ~]# service network restart
[root@xuegod64 ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:77:69:EF
inet addr:192.168.1.64 Bcast:192.168.1.255 Mask:255.255.255.0
……
eth1 Link encap:Ethernet HWaddr 00:0C:29:77:69:F9
inet addr:192.168.2.64 Bcast:192.168.2.255 Mask:255.255.255.0
若有时候启动看不到eth1的IP,使用ifup eth1启动网卡
[root@xuegod64 ~]# ping 192.168.1.63 -c 1
64 bytes from 192.168.1.63: icmp_seq=1 ttl=64 time=0.376 ms
[root@xuegod64 ~]# ping 192.168.2.63 -c 1
64 bytes from 192.168.2.63: icmp_seq=1 ttl=64 time=0.951 ms
测试通讯正常,整过基础环境就OK了!
安装ISCSI服务
[root@xuegod63 ~]# yum install -y scsi-target-utils
创建共享分区
[root@xuegod63 ~]# fdisk /dev/sda
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Selected partition 4
First cylinder (1462-2610, default 1462):
Using default value 1462
Last cylinder, +cylinders or +size{K,M,G} (1462-2610, default 2610): +2G
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
[root@xuegod63 ~]# partx -a /dev/sda //执行两次,识别分区,避免重启
[root@xuegod63 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 200M 0 part /boot
├─sda2 8:2 0 10G 0 part /
├─sda3 8:3 0 1G 0 part [SWAP]
└─sda4 8:4 0 2G 0 part
配置SAN服务
[root@xuegod63 ~]# vim /etc/tgt/targets.conf
75 #<target iqn.2008-09.com.example:server.target4>
76 # direct-store /dev/sdb # Becomes LUN 1
77 # direct-store /dev/sdc # Becomes LUN 2
78 # direct-store /dev/sdd # Becomes LUN 3
79 # write-cache off
80 # vendor_id MyCompany Inc.
81 #</target>
82 #上面为参考内容,在下面手动加入下面这些行
83 <target iqn.2015-01.cn.xuegod.www:target_san1> #iscsi 正规名字栺式 : iqn.年-月.主机名倒着写: target 端名字
84 backing-store /dev/sda4 # 可以是具体的分区,也可以是 DD出来的文件。不能小于 1G。 (后面的文件系统是 GFS,光日志空间就 128M
85 initiator-address 192.168.1.64 #指定允许访问的此存储主机
86 initiator-address 192.168.2.64 #在访问控制列表中添加一个客户端
87 vendor_id xuegod #供应厂商编号 标识这个设备(字符不要过长)
88 product_id target1 #产品编号
89 </target>
[root@xuegod63 ~]# /etc/init.d/tgtd restart
[root@xuegod63 ~]# netstat -antup | grep 3260
tcp 0 0 0.0.0.0:3260 0.0.0.0:* LISTEN 3492/tgtd
tcp 0 0 :::3260 :::* LISTEN 3492/tgtd
[root@xuegod63 ~]# tgt-admin --show //查看状态
Target 1: iqn.2015-01.cn.xuegod.www:target_san1
System information:
Driver: iscsi
State: ready
I_T nexus information:
LUN information:
LUN: 0
Type: controller
SCSI ID: IET 00010000
SCSI SN: beaf10
Size: 0 MB, Block size: 1
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
Backing store type: null
Backing store path: None
Backing store flags:
LUN: 1
Type: disk
SCSI ID: IET 00010001
SCSI SN: beaf11
Size: 2150 MB, Block size: 512
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
Backing store type: rdwr
Backing store path: /dev/sda4
Backing store flags:
Account information:
ACL information:
192.168.1.64
192.168.2.64
[root@xuegod63 ~]# chkconfig tgtd on //开机启动
配置客户端线路一
[root@xuegod64 ~]# rpm -ivh /media/Packages/iscsi-initiator-utils-6.2.0.873-10.el6.x86_64.rpm
[root@xuegod64 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.1.63:3260
Starting iscsid: [ OK ] #发时,会自动把iscsid服务启动
192.168.1.63:3260,1 iqn.2015-01.cn.xuegod.www:target_san1 #发现的信息会写入/var/lib/iscsi/目录下
[root@xuegod64 ~]# /etc/init.d/iscsi start //根据/var/lib/iscsi/ 中发现的信息,识别设备,需要先发现 target 存储,再启动客户端服务,才有效
[root@xuegod64 ~]# chkconfig iscsi on
[root@xuegod64 ~]# chkconfig iscsid on
[root@xuegod64 ~]# lsblk //以及发现设备
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 200M 0 part /boot
├─sda2 8:2 0 10G 0 part /
└─sda3 8:3 0 1G 0 part [SWAP]
sr0 11:0 1 3.6G 0 rom /media
sdb 8:16 0 2G 0 disk
[root@xuegod63 ~]# netstat -antup | grep 3260 //服务端看有无客户端连接
tcp 0 0 0.0.0.0:3260 0.0.0.0:* LISTEN 3492/tgtd
tcp 0 0 192.168.1.63:3260 192.168.1.64:43165 ESTABLISHED 3492/tgtd
tcp 0 0 :::3260 :::* LISTEN 3492/tgtd
配置客户端线路二
[root@xuegod64 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.2.63:3260
192.168.2.63:3260,1 iqn.2015-01.cn.xuegod.www:target_san1
[root@xuegod64 ~]# yum install -y tree
[root@xuegod64 ~]# tree /var/lib/iscsi/
/var/lib/iscsi/
├── ifaces
├── isns
├── nodes
│ └── iqn.2015-01.cn.xuegod.www:target_san1
│ ├── 192.168.1.63,3260,1
│ │ └── default
│ └── 192.168.2.63,3260,1
│ └── default
├── send_targets
│ ├── 192.168.1.63,3260
│ │ ├── iqn.2015-01.cn.xuegod.www:target_san1,192.168.1.63,3260,1,default -> /var/lib/iscsi/nodes/iqn.2015-01.cn.xuegod.www:target_san1/192.168.1.63,3260,1
│ │ └── st_config
│ └── 192.168.2.63,3260
│ ├── iqn.2015-01.cn.xuegod.www:target_san1,192.168.2.63,3260,1,default -> /var/lib/iscsi/nodes/iqn.2015-01.cn.xuegod.www:target_san1/192.168.2.63,3260,1
│ └── st_config
├── slp
└── static
[root@xuegod64 ~]# /etc/init.d/iscsi restart
[root@xuegod64 ~]# lsblk //每条路径识别,都会识别成一块磁盘,这儿就是两块
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 200M 0 part /boot
├─sda2 8:2 0 10G 0 part /
└─sda3 8:3 0 1G 0 part [SWAP]
sr0 11:0 1 3.6G 0 rom /media
sdb 8:16 0 2G 0 disk
sdc 8:32 0 2G 0 disk
挂载数据测试
[root@xuegod64 ~]# fdisk /dev/sdb //分区全部划分(n-p-enter-w)
[root@xuegod64 ~]# mkfs.ext4 /dev/sdb1
[root@xuegod64 ~]# mount /dev/sdb1 /opt/ //挂载数据测试
[root@xuegod64 ~]# df –h //这里可以正常看到sdb1
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 9.9G 3.9G 5.6G 42% /
tmpfs 491M 224K 491M 1% /dev/shm
/dev/sda1 194M 30M 155M 16% /boot
/dev/sr0 3.6G 3.6G 0 100% /media
/dev/sdb1 2.0G 67M 1.9G 4% /opt
[root@xuegod64 ~]# ll /dev/sdc //但是没有sdc1,他们是同一块硬盘
brw-rw---- 1 root disk 8, 32 Dec 23 14:37 /dev/sdc
[root@xuegod64 ~]# umount /opt //注意卸载,否则可能不是sdc了(可能变sdd)
[root@xuegod64 ~]# /etc/init.d/iscsi restart //重启服务
[root@xuegod64 ~]# lsblk //重启了服务,就可以看到sdc1
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 200M 0 part /boot
├─sda2 8:2 0 10G 0 part /
└─sda3 8:3 0 1G 0 part [SWAP]
sr0 11:0 1 3.6G 0 rom /media
sdc 8:32 0 2G 0 disk
└─sdb1 8:33 0 2G 0 part
sdd 8:48 0 2G 0 disk
└─sdc1 8:49 0 2G 0 part
配置多路径实现冗余
[root@xuegod64 ~]# yum install -y device-mapper-multipath //多路径软件
[root@xuegod64 ~]# cp /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf /etc/ //使用默认配置文件即可
[root@xuegod64 ~]# /etc/init.d/multipathd restart //启动服务
[root@xuegod64 ~]# multipath –ll //若这里没有这信息输出,记得卸载你的挂载,重启mulitipath,然后再看
mpatha (1IET 00010001) #远程存储设备的产品信息 dm-0 xuegod #厂商,target1 #产品ID
size=2.0G features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=1 status=active #默认使用active的链路
| `- 37:0:0:1 sdb 8:32 active ready running
`-+- policy='round-robin 0' prio=1 status=enabled #有效的链路,但不是活动链路
`- 36:0:0:1 sdc 8:48 active ready running
#默认配置并不会实现负载均衡,只会实现高可用的效果。
# (1IET 00010001) 远程存储设备的产品信息,由于sda和sdb对应的都是远端同一个存储,所以产品信息是一样的,最后被多路经驱动发现,所以为他们生成了一个设备文件/dev/mapper/mpatha
[root@xuegod64 ~]# ll /dev/mapper/mpatha*
lrwxrwxrwx 1 root root 7 Dec 23 15:03 /dev/mapper/mpatha -> ../dm-0
lrwxrwxrwx 1 root root 7 Dec 23 15:03 /dev/mapper/mpathap1 -> ../dm-1
[root@xuegod64 ~]# mount -t ext4 /dev/mapper/mpathap1 /opt/ //就可以用了
配置负载均衡
修改配置文件,启动高可用负载均衡模式,并自定义多路经设备文件的名字
[root@xuegod64 ~]# vim /etc/multipath.conf
#注释掉这三行
# 25 defaults {
# 26 user_friendly_names yes
# 27 }
#在63行左右,你可以修改,也可以添加下面的内容
62 multipaths {
63 multipath {
64 wwid "1IET 00010001" #硬盘产品信息
65 alias webdata #自定义名字
66 path_grouping_policy multibus
67 path_selector "round-robin 0"
68 failback manual
69 rr_weight priorities
70 no_path_retry 5
71 }
72 }
[root@xuegod64 ~]# /etc/init.d/multipathd restart
[root@xuegod64 ~]# /etc/init.d/iscsi restart //重启启动,登陆SAN,重新识别SCSI
[root@xuegod64 ~]# multipath –ll
webdata (1IET 00010001) dm-0 xuegod,target1
size=2.0G features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active #启用负载均衡模式
|- 45:0:0:1 sdb 8:16 active ready running
`- 44:0:0:1 sdc 8:32 active ready running
#注:之前默认相当于主备,现在相当于负载均衡 。
测试
[root@xuegod64 ~]# ll /dev/mapper/webdata* //多路径配置好后,会识别成一块盘,这里的webdata配置的alias中的名字,webdata表示sdb或者adc,webdata1就是分区1
lrwxrwxrwx 1 root root 7 Dec 23 15:21 /dev/mapper/webdata -> ../dm-0
lrwxrwxrwx 1 root root 7 Dec 23 15:21 /dev/mapper/webdatap1 -> ../dm-1
[root@xuegod64 ~]# mount /dev/mapper/webdatap1 /opt/
[root@xuegod64 ~]# cp /boot/vmlinuz-2.6.32-431.el6.x86_64 /opt/
[root@xuegod64 ~]# ll /opt
drwx------ 2 root root 16384 Dec 23 14:39 lost+found
-rwxr-xr-x 1 root root 4128944 Dec 23 15:27 vmlinuz-2.6.32-431.el6.x86_64
模拟故障冗余
模拟故障: 断开一条链路。测试链路高可用,关闭其中一个网卡,多路经驱动需要约1分钟的时间,去识别链路故障
[root@xuegod63 ~]# ifdown eth1 //SANserver上关闭eth1,模拟网路断开
[root@xuegod64 ~]# multipath –ll //多路经驱动需要约1分钟的时间,去识别链路故障,卡在这个地方,大约一分钟后,检测故障结束
webdata (1IET 00010001) dm-0 xuegod,target1
size=2.0G features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
|- 45:0:0:1 sdb 8:16 active ready running
`- 44:0:0:1 sdc 8:32 active faulty running ##1分钟后,显示链路连接失败。
继续测试数据写入
[root@xuegod64 ~]# cp /etc/passwd /opt/
[root@xuegod64 ~]# ll /opt/
drwx------ 2 root root 16384 Dec 23 14:39 lost+found
-rw-r--r-- 1 root root 1578 Dec 23 15:31 passwd
-rwxr-xr-x 1 root root 4128944 Dec 23 15:27 vmlinuz-2.6.32-431.el6.x86_64
#数据可以正常写入,说明,高可用成功。
[root@xuegod63 ~]# ifup eth1 //服务端打开链路,模拟故障恢复
[root@xuegod64 ~]# multipath –ll //客户端负载均衡正常
webdata (1IET 00010001) dm-0 xuegod,target1
size=2.0G features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
|- 45:0:0:1 sdb 8:16 active ready running
`- 44:0:0:1 sdc 8:32 active ready running
配置udev
[在应用服务器上使用udev规则为target创建固定名字的软链接,即为我的挂载的存储盘创建固定的名字]
udev概述: udev 是Linux kernel 2.6系列的设备管理器。它主要的功能是管理/dev目录底下的设备节点。udev会根据用户添加/删除硬件的行为,自处理/dev目录下所有设备文件。
主配置文件: /etc/udev/udev.conf
设备文件名字规则目录:/etc/udev/rules.d/
70-persistent-net.rules 文件命名规律:开头用数字 结尾是.rules
运行机制及注意事项
1、 udev 按照规则文件名的数字顺序来查询全部规则文件,然后为匹配规则的设备,创建其设备文件或文件链接。
2、 通 常 情 况 下 , 建 议 让 自 己 想 要 的 规 则 文 件 最 先 被 解 析 。 比 如 , 创 建 一 个 名 为 /etc/udev/rules.d/10-myrule.rules 的文件,并把你的规则写入该文件,这样 udev 就会在解析系统默认的规则文件之前解析到你的文件。
3、 在规则文件里,除了以“#”开头的行(注释),所有的非空行都被视为一条规则,但是一条规则不能扩展到多行。
4、 规则都是由多个键值对(key-valuepairs)组成,并由逗号隔开,键值对可以分为条件匹配键值对(以下简称“匹配键”)和赋值键值对(以下简称“赋值键”),一条规则可以有多条匹配键和多条赋值键。
5、 匹配键是匹配一个设备属性的条件,当一个设备的属性匹配了该规则里所有的匹配键,就认为这条规则生效,然后按照赋值键的内容,执行该规则的赋值。
配置举例
让系统把sda1识别为my_root_disk,说明:如果有一个设备被内核实别sda1,则该条件生效,执行后面的赋值:在/dev下产生一个名为my_root_disk的设备文件,并把设备文件的权限设为0666。
[root@xuegod64 ~]# cd /etc/udev/rules.d/
[root@xuegod64 rules.d]# vim 10-sda.rules
KERNEL=="sda1",NAME="my_root_disk", MODE="0666"
# KERNEL是匹配键,NAME和MODE是赋值键。
#仅当操作符是“==”或者“!=”时,其为匹配键;若为其他操作符时,都是赋值键。
#详细参数说明:
#ACTION:事件的行为,例如:add(添加设备)、remove(删除设备)。
#KERNEL:内核设备名称,例如:sda, cdrom。
#NAME:在/dev下产生的设备文件名。只有第一次对某个设备的NAME 的赋值行为生效,之后匹配的规则再对该设备的NAME 赋值行为将被忽略。如果没有任何规则对设备的NAME 赋值,udev将使用内核设备名称来产生设备文件。
#MODE是赋值键。 赋的值是权限。
[root@xuegod64 rules.d]# start_udev //运行UDEV,start_dev命令重启 udev守护进程,并对所有的设备重新查询规则目录下所有的规则文件,然后执行所匹配的规则里的行为。通常使用该命令让新的规则文件立即生效,start_udev一般没有标准输出,所有的udev 相关信息都按照配置文件(udev.conf)的参数设置,由/var/log/messages记录。
[root@xuegod64 rules.d]# ls /dev/my_root_disk
/dev/my_root_disk
[root@xuegod64 rules.d]# ll /dev/sda*
brw-rw---- 1 root disk 8, 0 Dec 23 15:51 /dev/sda
brw-rw---- 1 root disk 8, 2 Dec 23 15:51 /dev/sda2
brw-rw---- 1 root disk 8, 3 Dec 23 15:51 /dev/sda3
[root@xuegod64 rules.d]# ll /dev/my_root_disk /dev/sda2 //对比权限
brw-rw-rw- 1 root disk 8, 1 Dec 23 15:51 /dev/my_root_disk
brw-rw---- 1 root disk 8, 2 Dec 23 15:51 /dev/sda2
[root@xuegod64 rules.d]# mount /dev/my_root_disk /rootada1/ //测试挂载
[root@xuegod64 rules.d]# ll /rootada1/ //就是boot分区下的文件
-rw-r--r--. 1 root root 105195 Nov 11 2013 config-2.6.32-431.el6.x86_64
drwxr-xr-x. 3 root root 1024 Dec 7 23:39 efi
drwxr-xr-x. 2 root root 1024 Dec 7 23:44 grub
-rw-------. 1 root root 17491698 Dec 7 15:56 initramfs-2.6.32-431.el6.x86_64.img
drwx------. 2 root root 12288 Dec 7 23:25 lost+found
-rw-r--r--. 1 root root 193758 Nov 11 2013 symvers-2.6.32-431.el6.x86_64.gz
-rw-r--r--. 1 root root 2518236 Nov 11 2013 System.map-2.6.32-431.el6.x86_64
-rwxr-xr-x. 1 root root 4128944 Nov 11 2013 vmlinuz-2.6.32-431.el6.x86_64
udev应用
在应用服务器xuegod64上使用udev规则为每个target创建固定名字的软链接
对iscsi多路径共享的设备设备,让内核识别成:my_disk
注意,配置多路径之后,在是有udev有些问题,所以我们卸载多路径
[root@xuegod64 ~]# yum remove device-mapper-multipath
[root@xuegod64 ~]# service iscsi restart
[root@xuegod64 ~]# reboot
[root@xuegod64 ~]# ll /dev/sd*
brw-rw---- 1 root disk 8, 0 Dec 23 16:53 /dev/sda
brw-rw---- 1 root disk 8, 1 Dec 23 16:53 /dev/sda1
brw-rw---- 1 root disk 8, 2 Dec 23 16:53 /dev/sda2
brw-rw---- 1 root disk 8, 3 Dec 23 16:53 /dev/sda3
brw-rw---- 1 root disk 8, 16 Dec 23 16:56 /dev/sdb
brw-rw---- 1 root disk 8, 17 Dec 23 16:56 /dev/sdb1
brw-rw---- 1 root disk 8, 32 Dec 23 16:56 /dev/sdc
brw-rw---- 1 root disk 8, 33 Dec 23 16:56 /dev/sdc1
如果不重启,直接查看,发现盘符错乱,重启恢复正常后操作
[root@xuegod64 rules.d]# cat /sys/block/sdb/size //查看block数
4199675
或者:
[root@xuegod64 rules.d]# udevadm info -a -p /sys/block/sdb | egrep "mode|size"
//查看设备信息,进行筛选
ATTR{size}=="4199675" #block数
ATTRS{model}=="target1 " #产品标识
[root@xuegod64 rules.d]# vim /etc/udev/rules.d/10-sda.rules
#KERNEL=="sda1",NAME="my_root_disk", MODE="0666"
SUBSYSTEM=="block", SYSFS{size}=="4199675", SYMLINK="my_disk"
#参数:
#SUBSYSTEM:设备的子系统名称,例如:sda 的子系统为block。
#SYSFS{filename}:设备的 devpath 路径下,设备的属性文件“filename”里的内容。
#例如:SYSFS{model}==“ST936701SS”表示:如果设备的型号为ST936701SS,则该设备匹配该匹配键值。
#SYMLINK:为/dev/下的设备文件产生符号链接。由于udev 只能为某个设备产生一个设备文件,所以为了不覆盖系统默认的udev 规则所产生的文件,推荐使用符号链接。
[root@xuegod64 rules.d]# start_udev //启动udev
[root@xuegod64 rules.d]# ll /dev/my_disk
lrwxrwxrwx 1 root root 4 Dec 23 17:03 /dev/my_disk -> sdb1
[root@xuegod64 ~]# mount /dev/my_disk /opt/
[root@xuegod64 ~]# ll /opt/
drwxr-xr-x 122 root root 12288 Dec 23 16:30 etc
drwx------ 2 root root 16384 Dec 23 16:29 lost+found
-rw-r--r-- 1 root root 1578 Dec 23 16:30 passwd