###############################
SCSI
SAN
ISCSI
SAN和NAS的对比
ISCSI+gfs2+cLVM的实现
###############################
SCSI
计算机体系结构
-
CPU:核心组件,负责从memory中读取数据并进行处理。
-
Memory:核心组件,通过北桥与外围存储设备进行交换,作为易失性存储有极高的存储效率,但断电后数据会丢失。
-
IDE:有限的接口上,能够连接的设备有限,IDE的控制器在数据传输过程中的协议封装能力很差,整个传输过程需要大量CPU时钟周期的参与,这就意味着CPU要花费大量的时候完成数据的读入和写出,在业务处理比较繁忙和CPU资源极尤为重要的场合下是无法忍受的。
-
SCSI:是一种I/O技术,SCSI规范了一种并行的I/O总线和相关的协议,除了硬盘转速上的提升外,总线的适配器HBA(HostBusAdapter)卡中内置了控制芯片,此控制芯片可以完成协议的封装,可以大量降低CPU的参与,此外由于SCSI的数据传输是以块的方式进行的,因此它具有以下特点:设备无关性、多设备并行、高带宽、低系统开销。
SCSI使用体系结构
-
窄SCSI总线:最多允许8个SCSI设备和它进行连接。
-
宽SCSI总线:最多允许16个不同的SCSI设备和它进行连接
-
SCSI ID:一个独立的SCSI总线按照规格不同可以支持8或16个SCSI设备,设备的编号需要通过SCSI ID(Target)来进行控制,系统中每个SCSI设备都必须有自己唯一的SCSI ID,SCSI ID实际上就是这些设备的地址。
SCSI的局限性
-
传输距离:由于SCSI线缆的长度有限,限制了SCSI的延展性。
-
服务主机:Target数量限制了可服务的主机数。
SAN
-
能够通过非SCSI线缆传输SCSI协议报文,并且能将其路由至目标存储设备的网络成为Storage Area Network(区域存储网络)。
SCSI协议报文
-
Physical Interconnects and Transport Protocols:定义物理传输介质和传输报文格式,通过光信道传输就成为FCSAN,通过IP网络传输就成为IPSAN。
-
Shared Command Set:SCSI共享(公共)命令集,定义存储或读取等相关命令。
-
SCSI Device-Type Specific Command Sets:不同SCSI设备类型特有的命令。
-
Common Access Method:公共访问方法。
ISCSI
IPSAN和FCSAN的对比
-
FCSAN:需要FC的HBA,存储端互相也需要FC的交换机或者SCSI线缆,应用程序存储数据由Adapter Driver向存储网络发起请求并完成数据存取。
-
IPSAN:应用程序的请求先交由SCSI驱动封装(协议报文各种指令),再由ISCSI驱动封装(用于联系ISCSI服务器端),借助于TCP/IP网络发送至ISCSI服务器端。
IPSAN的传输过程
-
ISCSI服务端:通过安装一款成熟的存储管理软件ISCSI Target,也称为Target。
-
ISCSI客户端:可以是硬件,也可以是安装iscsi客户端软,称为Initiator。客户端的连接方式有以下三种:
-
以太网卡+initiator软件:成本低,但需要占用客户端主机部分资源用于ISCSI和TCP/IP协议之间的解析, 适用于低I/O带宽的环境下。
-
硬件TOE网卡+initiator:TOE(TCP Offload Engine)功能的智能以太网卡可以完成ISCSI的封装,但SCSI封装仍以软件方式运作,使得客户端主机可以从繁忙的协议中解脱出来,大幅度提高数据传输速率,降低了客户端主机资源消耗。但TOE功能的网卡,成本较高。
-
ISCSI HBA卡连接:不需要安装客户端软件,全部靠硬件,数据传输性能最好,但成本很高,客户端数量和性价比成反比。
SAN和NAS的对比
注释:由于SAN是在DAS的基础之上增加了延展性,因此下图以DAS作比较:
结论:从图中可以看出NAS的文件系统在服务器端,而SAN的文件系统在客户端,因为SAN的客户端可以实现对分区的创建格式化等操作,而NAS不可以。因此SAN经常配合集群文件系统(gfs2、ocfs)一起使用,为的就是避免多个Initiator对Target的同一资源在同一时刻进行征用带来的脑裂。
ISCSI+gfs2+cLVM的实现
架构图如下:
部署Target端
安装软件包
|
1
|
yum install scsi-target-utils
|
查看当前磁盘状况(将/dev/sdb2发布出去3GB)
|
1
2
3
4
5
6
7
|
[[email protected] yum.repos.d]# fdisk -l
Disk /dev/sdb: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System
/dev/sdb1 1 1217 9775521 83 Linux
/dev/sdb2 1218 1583 2939895 83 Linux
|
常用配置
|
1
2
3
4
|
/etc/tgt/targets.conf 配置文件的方式来管理target
/etc/sbin/tgt-admin 通过配置文件定义
/usr/sbin/tgtadm 通过命令行的方式管来target
service tgtd start 启动服务 |
编辑配置文件vim /etc/tgt/targets.conf
|
1
2
3
4
|
<target iqn.2013-08.com.soulboy:sdb1> backing-store /dev/sdb2
initator-address 192.168.1.0/24
</target>
|
启动服务
|
1
|
service tgtd start |
命令行方式配置
|
1
2
|
tgtadm --lld iscsi --mode logicalunit --op new --tid 2 --lun 1 --backing-store /dev/sdb2
tgtadm --lld iscsi --mode target --op bind --tid 2 --initiator-address 192.168.1.0/24
|
部署各节点
安装软件包
|
1
|
yum install -y cman rgmanager gfs2-utils vm2-cluster
|
确保个节点hosts文件和hostname为如下
|
1
2
3
4
|
[[email protected] ~]# cat /etc/hosts
192.168.1.21 node1.soulboy.com node1192.168.1.22 node2.soulboy.com node2192.168.1.23 node3.soulboy.com node3 |
各节点时间同步
|
1
|
ntpdate 192.168.1.101 |
集群逻辑卷 cLVM共享存储做成LVM,借用HA的机制,让多个节点可以同时对一个卷发起管理操作。
|
1
2
|
vim /etc/lvm/lvm.conf
locking_type = 3 |
定义集群名称
|
1
|
ccs_tool create tcluster |
添加fence设备
|
1
|
ccs_tool addfence meatware fence_manual |
添加集群成员
|
1
2
3
|
ccs_tool addnode -v 1 -n 1 -f meatware node1.soulboy.com
ccs_tool addnode -v 1 -n 2 -f meatware node2.soulboy.com
ccs_tool addnode -v 1 -n 3 -f meatware node3.soulboy.com
|
在各节点依次启动服务
|
1
2
|
service cman start service rgmanager start |
查看各节点信息
|
1
2
3
4
5
6
|
[[email protected] ~]# ccs_tool lsnode
Cluster name: tcluster, config_version: 7Nodename Votes Nodeid Fencetypenode1.soulboy.com 1 1node2.soulboy.com 1 2node3.soulboy.com |
各节点安装initator配置并启动服务
|
1
2
|
yum --nogpgcheck localinstall iscsi-initiator-utils-6.2.0.872-16.el5.i386.rpmservice iscsi start 启动服务 |
各节点客户端执行发现和登陆操作
|
1
2
3
4
|
[[email protected] mydata]# iscsiadm -m discovery -t sendtargets -p 192.168.1.50
192.168.1.50:3260,1 iqn.2013-08.com.soulboy:sdb1192.168.1.50:3260,1 iqn.2013-08.com.soulboy:sdb2[[email protected] mydata]# iscsiadm -m node -T iqn.2013-08.com.soulboy:sdb2 -p 192.168.1.50 -l
|
在任意initator上对共享设备创建分区(各节点在本地识别成sdc)
|
1
|
fdisk /dev/sdc
|
在其他节点上执行
|
1
|
partprobe /dev/sdb
|
在节点三创建物理卷
|
1
|
[[email protected] ~]# pvcreate /dev/sdc
|
在节点二使用pvs命令查看
|
1
2
3
4
|
[[email protected] ~]# pvs
PV VG Fmt Attr PSize PFree/dev/sda2 VolGroup00 lvm2 a-- 19.88G 0
/dev/sdc lvm2 a-- 2.80G 2.80G
|
在节点三创建创建卷组
|
1
|
[[email protected] ~]# vgcreate clustervg /dev/sdc
|
在节点二使用vgs命令查看
|
1
2
3
4
|
[[email protected]]# vgs
VG #PV #LV #SN Attr VSize VFree
VolGroup00 1 2 0 wz--n- 19.88G 0
clustervg 1 1 0 wz--nc 2.80G 2.80G
|
在节点二创建逻辑卷
|
1
|
[[email protected]]# lvcreate -L 1G -n clusterlv clustervg
|
在节点三使用lvs命令查看
|
1
2
3
4
5
|
[[email protected] ~]# lvs
LV VG Attr LSize Origin Snap% Move Log Copy% ConvertLogVol00 VolGroup00 -wi-ao 17.88G LogVol01 VolGroup00 -wi-ao 2.00G clusterlv clustervg -wi-a- 1.00G |
在集群逻辑上使用集群文件系统(暂时先创建2个日志区域,加入两个节点)
|
1
|
mkfs.gfs2 -j 2 -p lock_dlm -t tcluster:lktb1 /dev/clustervg/clusterlv
|
各节点创建/mydata目录
|
1
|
mkdir /mydata
|
各节点挂载逻辑卷clustervg至本地/mydata目录中
|
1
|
mount -t gfs2 /dev/clustervg/clusterlv /mydata
|
查看信息
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
[[email protected] ~]# gfs2_tool df /mydata
/mydata:
SB lock proto = "lock_dlm"
SB lock table = "tcluster:lktb1"
SB ondisk format = 1801
SB multihost format = 1900
Block size = 4096
Journals = 2
Resource Groups = 8
Mounted lock proto = "lock_dlm"
Mounted lock table = "tcluster:lktb1"
Mounted host data = "jid=1:id=196610:first=0"
Journal number = 1
Lock module flags = 0
Local flocks = FALSE
Local caching = FALSE
Type Total Blocks Used Blocks Free Blocks use%
------------------------------------------------------------------------
data 524196 66195 458001 13%
inodes 458018 17 458001 0%
|
补充
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#####立刻同步到磁盘gfs2_tool settune /mydata new_files_directio 1
#####默认是60秒,日志刷新次数log_flush_secs = 60 #####扩展逻辑卷物理边界至2GB(可以指定选项,不指默认就是扩展全部)lvextend -L 2G /dev/clustervg/clusterlv
mount -t gfs2 /dev/clustervg/clusterlv /mnt
#####扩展逻辑卷逻辑编辑至2GBgfs2_grow /dev/clustervg/clusterlv
#####磁盘检测命令fsck.gfs2
#####冻结gfs文件系统(只能读,不能写)gfs2_tool freeze /mydata
#####解冻,备份数据的时候可以用到。gfs2_tool unfreeze /mydata
注释:扩展卷组需要iSCSI添加新的设备,和使用LVM一样创建PV,添加入卷组即可不在演示过程。 |
测试
节点二
|
1
2
3
4
5
6
|
[[email protected] mydata]# pwd
/mydata[[email protected] mydata]# ls
[[email protected] mydata]# touch node2
[[email protected] mydata]# ls
node2 |
节点三
|
1
2
3
4
5
|
[[email protected] mydata]# pwd
/mydata[[email protected] mydata]# ls
node2[[email protected] mydata]# rm -rf node2
|
节点二
|
1
2
3
|