Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1284942
  • 博文数量: 161
  • 博客积分: 10192
  • 博客等级: 上将
  • 技术积分: 2165
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-27 17:09
文章分类

全部博文(161)

文章存档

2012年(2)

2011年(13)

2010年(137)

2009年(5)

2008年(4)

我的朋友

分类: LINUX

2010-07-21 00:35:02

案例一:    
运行在 Xen 的虚拟机(domainU)有多种存储方式可以选择,可以是普通的文件(file)、逻辑卷(LVM)、物理硬盘分区(partition)等,也可以是网络存储 NFS、NAS、GNBD、SAN、AoE、iSCSI 等。在企业、高校等机构里,我们一般有充足的硬件资源来部署基于 Xen 的虚拟化环境,比如我们最近拿到的一台 SUN Fire V880,可以容下12个硬盘,就非常适合来做网络存储,为了虚拟环境达到高可靠、高性能的要求,采用一些更高级、更昂贵的网络存储方式会让后续的管理、容错、备份、迁移、灾难恢复等工作更容易一些。

NFS 是文件级别的存储(Network File Storage),提供文件、目录级别的共享和访问,而 iSCSI 之类的网络存储则是块级别的存储(Block Storage)。他们的工作方式不一样,缓存机制也不一样,NFS 自己有文件缓存系统,而 iSCSI 的缓存依赖相应的文件系统的缓存。经测试表明,在大数据繁重(Data-intensive)的应用中 NFS 的性能稍好一些,在小数据(Meta-data)频繁、面向操作的应用中 iSCSI,因为虚拟化环境大部分传输的是命令之类的 meta-data,所以 iSCSI 非常适合部署在虚拟化环境。

为了描述方便,VPSee 用 A 机器代表运行 domain0 的 Xen 服务器,用 B 机器代表存储多个 domainU 的 iSCSI 服务器。他们的关系是这样的,A(iSCSI 客户端)通过 iSCSI 协议来启动和运行 B(iSCSI 服务端)上的 Xen 虚拟机镜像(可以是文件、LVM、物理分区等)。下面的操作在 CentOS 5.5 上执行:

安装必要软件包
# yum install kernel-devel openssl-devel gcc rpm-build
安装和配置 iSCSI target 服务器
到 下载最新的 iscsitarget 源代码、解压、编译并安装:
# mv iscsitarget-1.4.20.1.tar.gz /usr/src
# cd /usr/src
# tar xvf iscsitarget-1.4.20.1.tar.gz
# cd iscsitarget-1.4.20.1
# make
# make install
关闭防火墙或者打开 iSCSI 需要的 3260 端口,否则客户端会连接不上:
# system-config-securitylevel-tui
配置 iSCSI target  服务器,设置客户端可以访问的用户名和密码,本来为了达到好的稳定性和性能这里是应该分一个 LVM 逻辑分区出来当作 Xen 虚拟机的块设备,然后在上面安装 domainU 的,这里为了简便 VPSee 直接拿一个已经装好的虚拟机镜像文件 vpsee.img 来充当 LVM 分区:
# vi /etc/iet/ietd.conf
...
Target iqn.2010-06.xen-sanhead:xen-vpsee
        IncomingUser vpsee 123456
        OutgoingUser vpsee 123456
        Lun 0 Path=/iSCSI/vpsee.img,Type=fileio,IOMode=wb
       Alias iSCSI for diskname
        ImmediateData Yes
        MaxConnections 1
        InitialR2T Yes
iSCSI target  服务器端设置完后重启服务:
# /etc/init.d/iscsi-target restart
安装和配置 iSCSI 客户端
安装 iSCSI 客户端:
# yum install iscsi-initiator-utils
配置 iSCSI 客户端:
# vi /etc/iscsi/iscsid.conf
...
node.session.auth.username = vpsee
node.session.auth.password = 123456
discovery.sendtargets.auth.username = vpsee
discovery.sendtargets.auth.password = 123456
启动服务:
# /etc/init.d/iscsi start
# iscsiadm -m discovery -t sendtargets -p 172.16.39.101
172.16.39.101:3260,1 iqn.2010-06.xen-sanhead:xen-vpsee
# /etc/init.d/iscsi restart
执行 fdisk 就会看到本机(A 机器)多出了一个块设备,那正是 B 机器上的 vpsee.img:
# fdisk -l
...
Disk /dev/sdc: 10.4 GB, 10486808576 bytes
64 heads, 32 sectors/track, 10001 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Disk /dev/sdc doesn't contain a valid partition table
最后在 A 机器上把 Xen 配置文件的 disk 一行改成:
disk = [ "phy:/dev/sdc,sda1,w" ]
启动 Xen 虚拟机后,就实际上从 A 机器的块设备 /dev/sdc 通过 iSCSI 协议启动并连到了 B 机器上的 vpsee.img 文件,虽然 domainU 运行在 A 机器上,但是所有数据和程序都在 B 机器的 vpsee.img 中。这样实现了操作和数据的分离,将更有利于以后迁移、管理和备份 Xen 虚拟机。

案例二:
服务器端:
1。安装服务器程序,同上.
2。配置 iSCSI target  服务器,设置客户端可以访问的选项。
# vi /etc/iet/ietd.conf
...
Target iqn.2010-06.xen-sanhead:isd-name  ##这个客户名字是客户端机器安装了客户端程序后自动出现的,拷贝过来即可。
#        IncomingUser vpsee 123456
#        OutgoingUser vpsee 123456
        Lun 0 Path=/iSCSI/vpsee.img,Type=fileio,IOMode=wb
       Alias iSCSI for diskname
        ImmediateData Yes
        MaxConnections 1
        InitialR2T Yes3. iSCSI target  服务器端设置完后重启服务:
# /etc/init.d/iscsi-target restart
#netstat -an|grep :3260

windows xp 客户端
1. xp没有ISCSI客户端,需下载安装(win2008有).如: Initiator-2.08-build3825-x86fre.exe
;displaylang=en
2. 安装
3. 设置客户端
双击桌面快捷方式: Microsoft iSCSI Initiator .
General页-->change里会自动生成客户端名字iqn.2010-06.xen-sanhead:isd-name,服务器端会用到.
Discovery页-->TargetPortals-->Add-->输入ISCSI服务器IP,端口默认-->OK
Targets页-->logon.  如果登录成功服务器的状态“Status”将由Inactive变为“Connected”.
登录时如果选择了“Automatically restore...”,客户机以后重启的时候会自动连接服务器。如果想取消自动连接,在“Persistent Targets”里面把服务器删除。
4.右击我的电脑,管理,硬盘管理,会发现多出块硬盘,按常规分区,建立文件系统,使用.
5.设置服务Microsoft iscsi initiator service为自动启动。以便客户机器启动就挂载ISCSI。
5.卸载iscsi.
Targets-->Details-->选中当前,log off.
===============================================
题外话:
现在我用的iscsi target的实现是 iSCSI enterprise target-0.4.14
, 现在对于单用户操作(也就是只有一个用户initiator 连接target ,并自动mount ,并进行写
操作) ,是没有问题的,performance也很好 ,速度也很快,比较稳定。
但是现在麻烦的多用户的问题: 当多个Initiator同时连接到一个target device的时候,
并且同时写同一块磁盘的一个目录的时候(分别创建子目录) ,我发现只有第一个连接的Initiator的写操作才能生效
,其他的Initiator的写操作都lost 了。

SCSI本身不能解决互斥的问题, 必须由kernel来解决。
通过google , 知道 iSCSI本身不能作share storage , 必须配合cluster file system
才能实现真正的simultaneously read and write to and from a same target device .
GFS 就是这样一个文件系统 ,由RedHat开发, 而且是open source的。

阅读(925) | 评论(0) | 转发(0) |
0

上一篇:用debugfs恢复误删的ext2文件

下一篇:freeNAS

给主人留下些什么吧!~~