###############################
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
|
[root@localhost 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
|
[root@node3 ~]
# cat /etc/hosts
192.168.1.21 node1.soulboy.com node1
192.168.1.22 node2.soulboy.com node2
192.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
|
[root@node3 ~]
# ccs_tool lsnode
Cluster name: tcluster, config_version: 7
Nodename Votes Nodeid Fencetype
node1.soulboy.com 1 1
node2.soulboy.com 1 2
node3.soulboy.com
|
各节点安装initator配置并启动服务
1
2
|
yum --nogpgcheck localinstall iscsi-initiator-utils-6.2.0.872-16.el5.i386.rpm
service iscsi start 启动服务
|
各节点客户端执行发现和登陆操作
1
2
3
4
|
[root@localhost mydata]
# iscsiadm -m discovery -t sendtargets -p 192.168.1.50
192.168.1.50:3260,1 iqn.2013-08.com.soulboy:sdb1
192.168.1.50:3260,1 iqn.2013-08.com.soulboy:sdb2
[root@localhost 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
|
[root@node3 ~]
# pvcreate /dev/sdc
|
在节点二使用pvs命令查看
1
2
3
4
|
[root@node2 ~]
# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2
VolGroup00 lvm2 a-- 19.88G 0
/dev/sdc
lvm2 a-- 2.80G 2.80G
|
在节点三创建创建卷组
1
|
[root@node3 ~]
# vgcreate clustervg /dev/sdc
|
在节点二使用vgs命令查看
1
2
3
4
|
[root@node2]
# 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
|
[root@node2]
# lvcreate -L 1G -n clusterlv clustervg
|
在节点三使用lvs命令查看
1
2
3
4
5
|
[root@node3 ~]
# lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
LogVol00 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
|
[root@node3 ~]
# 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
#####扩展逻辑卷逻辑编辑至2GB
gfs2_grow
/dev/clustervg/clusterlv
#####磁盘检测命令
fsck
.gfs2
#####冻结gfs文件系统(只能读,不能写)
gfs2_tool freeze
/mydata
#####解冻,备份数据的时候可以用到。
gfs2_tool unfreeze
/mydata
注释:扩展卷组需要iSCSI添加新的设备,和使用LVM一样创建PV,添加入卷组即可不在演示过程。
|
测试
节点二
1
2
3
4
5
6
|
[root@node2 mydata]
# pwd
/mydata
[root@node2 mydata]
# ls
[root@node2 mydata]
# touch node2
[root@node2 mydata]
# ls
node2
|
节点三
1
2
3
4
5
|
[root@node3 mydata]
# pwd
/mydata
[root@node3 mydata]
# ls
node2
[root@node3 mydata]
# rm -rf node2
|
节点二
1
2
3
|
[root@node2 mydata]
# pwd
/mydata
[root@node2 mydata]
# ls
|