Xen 部署 iSCSI 存储
2010年06月7日 | 标签: iscsi, xen | 作者:vpsee
运行在 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 服务器
到 http://sourceforge.net/projects/iscsitarget/ 下载最新的 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 # iscsiadm -m node -T iqn.2010-06.xen-sanhead:xen-vpsee --login # /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 虚拟机。
默认安装是全部连接可存取的,如何配置只有一个连接可存取。其他的只能读写。不能存取?
你好,我想知道如何解决使用iSCSI镜像的共享写问题。
假设现在有一个共享存储器,上面存放了虚拟机镜像文件。在另外两台服务器上都配置了iSCSI客户端,可以访问这个共享存储器,如何两台机器同时修改这个镜像文件,那么这个镜像文件不就被损坏了嘛。
你好,能不能详细的写下这个步骤的执行,原文如下:
配置 iSCSI target 服务器,设置客户端可以访问的用户名和密码,本来为了达到好的稳定性和性能这里是应该分一个 LVM 逻辑分区出来当作 Xen 虚拟机的块设备,然后在上面安装 domainU 的,这里为了简便 VPSee 直接拿一个已经装好的虚拟机镜像文件 vpsee.img 来充当 LVM 分区
如果不适用虚拟机镜像文件作LVM分区,具体应该如何操作你?麻烦楼主简单写下步骤吧。
一个系统镜像文件或者装有系统的分区只能被一个 Xen 服务器访问,iSCSI 存储的好处是可以让多个 Xen 服务器做前端,1个存储是后端,虚拟机还是要 load 到 node 里运行,这样一个 node 挂了可以很容易迁移到另一个 node:
node1 \
node2 – storage (os1, os2, …, osN)
node3 /
…
这样把原本分散在每台 Xen 服务器上的存储集中起来管理,更方便一些,而且一台 Xen 服务器挂了可以用另一个 Xen 服务器替代,因为不影响存储系统镜像文件的存储服务器。
vpsee还是没有回答我想知道的问题啊,比如有三个节点:
node1
node2-storage(os1,os2,…,osN)
node3
现在想在node1上启动多台虚拟机,如何虚拟机镜像文件在本地的话,那么可以在本地拷贝多份镜像,但是镜像文件在共享存储上的话又该如何做呢?请指教。
简单的说,如果 node2 运行 os1,那么 node1 就不能运行 os1 了,node1 和 node2 不能运行同一个 os 镜像。
嗯,如果使用LVM 逻辑分区出来当作 Xen 虚拟机的块设备,然后在上面安装 domainU ,应该如何操作呢?
vpsee简单写一下步骤吧,谢谢了!
Hi vpsee,
我想问一个问题,如果xen主机共享这个iscsi存储,那能不能做live migration呢?
谢谢!
@Dchampion
可以做 live migration
Hi,Vpsee
我想问下,我们现在用的存储,没有系统终端,只能从客户端登录网页上进行管理,它是直接把整个lun映射出去,而不支持将一个文件(例如你上面说的Vpsee.img)映射出去。这时,xen虚拟机要是采用文件的存储方式,该怎么解决?还要实现迁移。
谢谢!!
@vpsee
目前的生产环境有用iSCSI作为xen domU的存储吗?稳定性和性能如何?
@alife
嗯,稳定性很好,这是 xen 生产环境的推荐部署方式之一,还有一个就是本地 LVM 存储。