http://www.tuicool.com/articles/RNnyYb
http://www.cnblogs.com/mchina/p/centos-iscsi-network-storage.html
CentOS 6.3下配置iSCSI网络存储
http://dngood.blog.51cto.com/446195/842658/iscsi Target (TGT)
最近一直在调研如何将基于glusterfs文件系统创建的文件,利用iscsi协议挂载到局域网内的物理机上,终于有了一点收获,总结一下。首先介绍一下iscsi协议。
1 iscsi
1.1 iscsi 简介
iSCSI利用了TCP/IP的port 860 和 3260 作为沟通的渠道。透过两部计算机之间利用iSCSI的协议来交换 SCSI 命令,让计算机可以透过高速的局域网集线来把存储局域网(SAN)模拟成为本地的储存装置。
1.2 iscsi用途
使用iSCSI SAN 的目的通常有以下两个:
存储整合 公司希望将不同的存储资源从分散在网络上的服务器移动到统一的位置(常常是数据中心); 这可以让存储的分配变得更为有效。 SAN 环境中的服务器无需任何更改硬件或电缆连接就可以得到新分配的磁盘卷。
灾难恢复 公司希望把存储资源从一个数据中心镜像到另一个远程的数据中心上,后者在出现长时间停电的情况下可以用作热备份。 特别是,iSCSI SAN 使我们只需要用最小的配置更改就可以在 WAN 上面迁移整个磁盘阵列,实质上就是,把存储变成了“可路由的”,就像普通的网络通信一样。
1.3 iscsi协议
如图1所示,iscsi分为target和initiator两部分。它利用TCP/IP技术,将存储设备端通过iscsi target功能,做成可以提供磁盘的服务器端;通过iscsi initiator功能,做成能够挂载使用iscsi target的用户端。
2 glusterfs+iscsi解决方案
iscsi target可以是一个文件,也可以是一块磁盘或者一个分区。如果普通文件可以作为target, gluster volume中创建的文件是不是也可以作为target来被挂载呢?带着这个疑问,我做了如下尝试,如图2所示。
首先部署gluster,创建卷cinder-volume并启动,将该卷 mount到提供target的服务器的某个目录下。利用truncate命令在该卷下创建一个文件,然后以iscsi方式暴露target。最后物理机安装iscsi initiator,登录到target。
实验结果证明是可以的,接下来我一步步详细说明。
2.1 gluster
2.1.1 部署gluster
关于gluster部署,网上有很多资料,在此不再赘述。具体可以参考如下连接:
http://blog.csdn.net/dysj4099/article/details/17099161
http://navyaijm.blog.51cto.com/4647068/1258250
2.1.2 创建volumes
假设gluster peer为192.168.64.229 和 192.168.64.239, 在任意一台机器上执行(例子为229)
root@192.168.64.229:~# gluster volume create cinder-volume replica 2 192.168.64.229:/data/gluster/ 192.168.64.239:/data/gluster/
root@192.168.64.229:~# gluster volume start cinder-volume
root@192.168.64.229:~# gluster volume info
2.1.3 mount
假设提供target的服务器ip地址为 192.168.64.219 ,则在改机器上执行以下命令:
root@192.168.64.219:~# mkdir –p /opt/cinder-volume
root@192.168.64.219:~# mount –t glusterfs 192.168.64.229:cinder-volume /opt/cinder-volume
这时,glusterfs上的卷cinder-volume 成功mount到提供target的服务器的/opt/cinder-volume文件夹下
2.1.4 创建文件夹
在提供target 的服务器上(192.168.64.219) 执行以下操作:
root@192.168.64.219:~# cd /opt/cinder-volume
root@192.168.64.219:~# truncate –s 2G iscsi_target
进入该文件夹,利用truncate命令(dd也可以,但是创建大文件会非常慢)创建一个大小为2G的文件“iscsi_target”,作为iscsi的 target。
接下来,用iscsi协议将该文件“iscsi_target”暴露出来,供用户挂载使用。
2.2暴露target
管理Iscsi target的工具有两种: iet 和 tgt 。两种方式会同时抢占3260端口,所以大家在使用iscsi时,一定要注意该端口是被谁占用了,因为两种方式所用的配置文件和启动脚本均不同。本文利用tgt进行详细说明。
iet:配置文件(/etc/iet/ietd.conf)启动(/etc/init.d/iscsitarget start)
tgt: 配置文件(/etc/tgt/targets.conf)启动(/etc/init.d/tgtd start)
在提供target 的服务器上(192.168.64.219) 执行以下操作:
root@192.168.64.219:~# apt-get install tgt
root@192.168.64.219:~# /etc/init.d/tgtd start
root@192.168.64.219:~# vi /etc/tgt/ targets.conf
<target iqn.2010-10.org.openstack:iscsi-target >
backing-store /opt/cinder-volume/iscsi_target
incominguser judy 123456
write-cache off
</target>
root@192.168.64.219:~# tgt-admin –update iqn.2010-10.org.openstack:iscsi-target
新增target需要在/etc/init.d/targets.conf添加相应XML。其中target后接target name(可自己定义),backing-store 表示该target 的实际位置,incominguser 表示用户端登录该target时需要提供的验证信息,write-cache 表示再写入target时是否启用写cache。关于targets.conf文件的配置,/usr/share/doc/tgt/examples/ targets.conf.example.gz 里面有详细的介绍。
添加完target后,一定要执行最后一条命令,否则用户端无法发现该target。
2.3连接target
Target暴露之后,我们要在用户端查看(假设用户端ip地址为192.168.64.209),是否能够发现该target。
在用户端(192.168.64.209 )执行如下操作:
root@192.168.64.209:~# apt-get install open-iscis
root@192.168.64.209:~# iscsiadm –m discovery –t st –p 192.168.64.219
192.168.64.219:3260,1 iqn.2010-10.org.openstack:iscsi-target
root@192.168.64.209:~# iscsiadm –m node –T iqn.2010-10.org.openstack:iscsi-target –p 192.168.64.219:3260–login
此时无法登陆,因为该target( iqn.2010-10.org.openstack:iscsi-target ) 设置了登陆权限,必须要执行如下操作,设置登录的用户名和密码才能登录。
root@192.168.64.209:~# iscsiadm –m node –T iqn.2010-10.org.openstack:iscsi-target –p 192.168.64.219:3260 –o update –name=node.session.auth.authmethod=CHAP
root@192.168.64.209:~# iscsiadm –m node –T iqn.2010-10.org.openstack:iscsi-target –p 192.168.64.219:3260 –o update –name=node.session.auth.username= judy
root@192.168.64.209:~# iscsiadm –m node –T iqn.2010-10.org.openstack:iscsi-target –p 192.168.64.219:3260 –o update –name=node.session.auth.password= 123456
最后执行登录操作即可
root@192.168.64.209:~# iscsiadm –m node –T iqn.2010-10.org.openstack:iscsi-target –p 192.168.64.219:3260–login
Logging in to [iface: default, target: iqn.2010-10.org.openstack:iscsi-target, portal: 192.168.99.54,3260]
Login to [iface: default, target: iqn.2010-10.org.openstack:iscsi-target, portal: 192.168.99.54,3260]: successful
登录成功后,就能查到相应磁盘,可以分区格式化,mount到本地一个目录就可以使用啦!
root@192.168.64.209:~# fdisk –l
root@192.168.64.209:~# mkfs.ext4 /dev/sdb
root@192.168.64.209:~# mkdir –p iscsi_device
root@192.168.64.209:~# mount /dev/sdb iscsi_device
2.4问题
在调研过程中遇到了一些问题,供大家参考
- 用户A,B同时登录到target,由于cache的缘故,A所做修改,B不能实时刷新。必须在A上执行sync,将数据写入磁盘;在B上,umount,再mount才能生效
- 查阅资料,如果想做成共享target,必须用分布式文件系统,如GFS