一、实验说明
本文档为LVM+iSCSI配置远程磁盘的LVM镜像实验。
实验设计思路:
在VMware workstation上安装两台linux Ubuntu虚拟机,其中一台mirror server作为镜像服务器,另一台servesserver作为业务服务器。使用iSCSI将镜像服务器上的一块磁盘挂载到业务服务器上,然后配置为lvm镜像磁盘。
软件及配置:
在windows系统上安装虚拟机软件,并新建安装两台ubuntu虚拟机。使用NAT方式联网(参考:VMware下linux Ubuntu10.04使用NAT共享主机IP上网方式的设置),大致配置如下。
Vmware workstation 7.01
Mirror server:Ubuntu 11.10 IP:192.168.128.3 添加两块 8GB的虚拟iSCSI硬盘
serves server:Ubuntu 11.10 IP:192.168.128.4 添加四块 8GB的虚拟iSCSI硬盘
二、iSCSI的安装与配置
2.1.mirror server 服务器端上的操作
2.1.1安装iscsi-target
#sudo apt-get install iscsitarget
注:也可下载iscsi-target软件包,自行编译并安装,方法如下
2)编译安装
很简单,解包、编译、安装即可
#tar zxvf iscsitarget-1.4.19.tar.gz
#cd iscsitarget-1.4.19/
#make
#make install
2.1.2. 创建要输出的设备
可输出的设备有如下几种:
1)、 lvmlvmlvm卷设备;
2)、 由文件组成的块设备(经过tgtimg工具处理过的);
3)、 单一的分区;
4)、 整个磁盘;
5)、 RAID组成的卷设备;
我们使用创建lvm卷来做演示。这里使用磁盘sdb创建pv,然后创建VG卷组LVM1,并在其上创建LV逻辑卷LVM1
#pvcreate /dev/sdb
#vgcreate LVM1 /dev/sdb
#lvcreate –n data1 –L 8G vg0
2.1.3.建立target device
1)新增iqn名为iqn.2012-05.cn.lanexpert:iscsi-data1的target device [iscsi qualified name] (简称iqn),格式通常如下:
格 式
|
意 义
|
范 例
|
Yyyy-mm
|
年-月
|
2012-05
|
Reversed domain name
|
把域名反过来写
|
Cn.lanexpert
|
identifier
|
识别字,通常描述这个储存空间的用途
|
Iscsi-data1
|
新增target device:
#tgtadm –lld iscsi –op new –mode target –tid 1 -T iqn.2012-05.cn.lanexpert:iscsi-data1
执行后,可以利用以下命令查看target device:
# tgtadm –lld iscsi –op show –mode target
2)将target server 新建的LV逻辑卷data1(/dev/LVM1/data1)加入target device
#tgtadm –lld iscsi –op new –mode logicalunit –tid 1 –lun 1 -b /dev/LVM1/data1
将逻辑卷加入target device后,利用下列命令查看target device的信息:
# tgtadm –lld iscsi –op show –mode target
3)允许initiator主机services server(192.168.128.4)可以存取此target device
#tgtadm –lld iscsi –op bind –mode target –tid 1 -I 192.168.128.4
创建完毕后,再利用下面的命令查看target device:
# tgtadm –lld iscsi –op show –mode target
5、 修改/etc/rc.local,设置开机自动加载target device配置
因为以上命令的配置结果,重新开机后便会消失,而且现版本的target server,Redhat尚未修改成System V服务,如果需要系统重新启动后上述配置仍然有效,只能将以上配置写入/etc/rc.local,让系统每次开机都自动执行一次
#vi/etc/rc.local
然后编辑输入如下信息:
# ISCSI target device setting -lzw 2012/05/25
#target 1(Space 8GB)
tgtadm –lld iscsi –op new –mode target –tid 1 -T iqn.2012-05.cn.lanexpert:iscsi-data1
tgtadm –lld iscsi –op new –mode logicalunit –tid 1 –lun 1 -b /dev/LVM1/data1
tgtadm –lld iscsi –op bind –mode target –tid 1 -I 192.168.128.4
2.2.Services server客户机端上的操作
2.2.1 安装iscsi-initiator
#sudo apt-get install open-iscsi
启动iscsi-initiator
service open-iscsi start
2.2.2 查看镜像服务器(mirror server)的设备(/dev/LVM1/data1)输出
iscsiadm -m discovery -t sendtargets -p 192.168.128.3
此时即会探测到镜像服务器上的资源iqn.2012-05.cn.lanexpert:iscsi-data1
2.2.3 链接设备
得到了target名称后,使用下面命令建立连接
# iscsiadm -m node -T iqn.2012-05.cn.lanexpert:iscsi-data1 -p 192.168.128.3 –login
这时应该可以看到映射到的逻辑磁盘名号(此试验中应为/dev/sde),使用fdisk -l 可以看到有关逻辑磁盘的详细内容,可以象使用本地硬盘一样对其进行分区、创建文件系统、挂载、卸载等操作。
注:断开连接的方法
如果逻辑磁盘已经挂载,断开连接前应先卸载,然后使用下面命令
iscsiadm -m node -T target名称 -p targetIP地址:端口号 –logout
关机之前应该正确的卸载和断开逻辑磁盘,否则会在target服务器上留下僵死的进程,造成服务器资源的浪费。
三、LVM镜像创建与测试
3.1 创建LVM镜像
创建4个LV逻辑卷
#pvcreate /dev/sdb /dev/sdc /dev/sdd /dev/sde
创建卷组vg0
#vgcreate vg0 /dev/sdb /dev/sde /dev/sdc
#创建大小为1G名称为mirror的镜像。这个镜像包括三部分:nbd0和sdb5为副本和数据,#sdb6为日志。注意nbd0在服务器上,sdb5和sdb6在本地。
#lvcreate –L 8G -m1 -n mirror vg0 /dev/sde /dev/sdb /dev/sdc
格式化LVM镜像并挂载
#mkfs.ext3 /dev/vg0/mirror
#mkdir /mirror
#mount /dev/vg0/mirror /mirror
#cd /mirror
#ls
这时就可以操作这个镜像了。
可以在mirror上建立一个文件目录:
#mkdir test
#ls
3.2 LVM镜像测试
破坏本地的/dev/sdb数据磁盘,然后用本地磁盘/dev/sdd来恢复。
1)破坏/dev/sdb
# dd if=/dev/urandom of=/dev/sdb
2)查看显示设备状态
#lvs -a -o +devices
此时系统显示无法找到磁盘/dev/sdb
3)移除破坏的磁盘(/dev/sdb)
#vgreduce –removemissing –force vg0
4)将/dev/sdd加入到vg0中
#vgextend vg0 /dev/sdd
5)用/dev/sdd替代sdb恢复镜像
lvconvert -m1 /dev/vg0/mirror /dev/sdd /dev/sde /dev/sdc
这时sde和sdd为副本和数据,sdc为日志。
6)再次查看镜像目录,会发现test这个文件夹仍然存在
#ls /mirror
附表:
表一:服务器端主要命令及配置文件
位置
|
作用
|
/etc/rc.d/init.d/tgtd
|
Target服务控制脚本
|
/etc/sysconfig/tgtd
|
可以指定target的配置文件位置
|
/etc/tgt/targets.conf
|
Target的配置文件
|
/usr/sbin/tgt-admin
|
用perl语言写的脚本,主要调用tgtadm命令,简化了操作参数,使管理员用起来更为方便
|
/usr/sbin/tgt-setup-lun
|
设置iscsi逻辑单元号的程序
|
/usr/sbin/tgtadm
|
管理target的工具,通过它,可以直接修改配置文件里面的内容
|
/usr/sbin/tgtd
|
Target的服务守护程序,当服务开启时,该服务的进程由它创建及提供
|
/usr/sbin/tgtimg
|
把磁带创建成target可用的镜像文件
|
表二:服务器端命令tgt-admin用法
Tgt-admin命令语法
|
|
-e, –execute
|
读取/etc/tgt/targets.conf文件中的配置信息,根据配置内容,通过tgtadmin命令来添加或删除target,若target已存在,则不处理该记录,可以参考—update;
|
-d, –delete<value>
|
可以删除所有或指定的,不被发起者(initiator)链接的target;如果想删除被使用中的target,可以加上—force参数;
|
Example usage:
–delete ALL –删除所有targets
–delete tid=4 –删除第四个target (target with tid 4)
–delete iqn.2008-08.com.example:some.target –删除指定target
|
|
–offline
|
使所有的或指定的target处于离线状态;处于离线状态的target,在发起者端(initiator)是无法使用的;
|
Example usage:
–offline ALL –使所有target离线
–offline tid=4 –使第四个target离线(target with tid 4)
–offline iqn.2008-08.com.example:some.target –让指定target离线
|
|
–ready
|
让所有的或指定的target处于就绪状态(即在线状态),与—offline功能相反;
|
Example usage:
–ready ALL –让所有target处于在线状态
–ready tid=4 –让第四个target处于在线状态(target with tid 4)
–ready iqn.2008-08.com.example:some.target –让指定target处于在线状态
|
|
–update <value>
|
更新所有的或指定的不被链接的target配置;用法与—delete相似,若想更新被链接中的target,可以加上—force参数;
|
Example usage:
–update ALL -ready all targets
–update tid=4 -ready target 4 (target with tid 4)
–update iqn.2008-08.com.example:some.target-update this target
|
|
-s, –show
|
查看所有target当前的状态;
|
-c, –conf <configuration file>
|
指定一个备用的配置文件;
|
–ignore-errors
|
跳过所有错误,继续执行;
|
-f, –force
|
一般跟在操作动作后面,表示强制执行某操作;
|
-p,
|
只显示该操作后的结果信息,并不真的执行该操作,有点像-v选项;
|
–pretend
|
一般在执行某个不太确定的操作前,先搭配该选项看看会输出什么样的结果;
Example usage:
Tgt-admin –e –p
|
–dump
|
显示targets.conf文件中的有效配置信息;
|
|
Example usage:
Tgt-admin –dump > tgt.conf –若想转存,请使用重定向符号;
|
-v, –verbose
|
显示详细信息,可以看到tgt-admin让tgtadm命令执行了什么样的操作;
|
-h, –help
|
查看帮助信息
|
表三:客户端主要命令及配置文件
位置
|
作用
|
/etc/iscsi/iscsid.conf
|
Iscsi发起者(initiator)配置文件;
|
/etc/rc.d/init.d/iscsi
|
登录到target的服务控制程序;
|
/etc/rc.d/init.d/iscsid
|
使客户机成为发起者(initiator)的服务控制程序;
|
/sbin/brcm_iscsiuio
|
Broadcom的iscsi设备驱动监测、调试器;
|
/sbin/iscsi-iname
|
Iscsi发起者名称生成工具
|
/sbin/iscsiadm
|
发起者端的管理控制程序;
|
/sbin/iscsid
|
成为发起者的守护服务程序;
|
/sbin/iscsistart
|
Iscsi会话启动程序;
|
表四:客户端命令iscsiadm用法
iscsiadm -m discoverydb [ -hV ] [ -d debug_level ] [ -P printlevel ] [ -I iface -t type –pip:port [ -lD ] ] | [ [ -p ip:port -t type ] [ -o operation ] [ -n name ] [ -v value ] [ -lD] ]
iscsiadm -m discovery [ -hV ] [ -d debug_level ] [ -P printlevel ] [ -I iface -t type –pip:port [ -l ] ] | [ [ -p ip:port ] [ -l | -D ] ]#探测模式及可用的参数;
iscsiadm -m node [ -hV ] [ -d debug_level] [ -P printlevel ] [ -L all,manual,automatic ] [-U all,manual,automatic ] [ -S ] [ [ -T targetname -p ip:port -I iface ] [ -l | -u | -R | -s] ] [ [ -o operation ] [ -n name ] [ -v value ] [ -p ip:port ] ]#节点模式及可用参数;
iscsiadm-m session [ -hV ] [ -d debug_level ] [ -P printlevel ] [ -r sessionid | sysfsdir [-R ] [ -u | -s ] ]#会话模式及可用参数;
iscsiadm -m iface [ -hV ] [ -d debug_level ] [ -P printlevel ] [ -I ifacename ] [ [ -o operation ] [ -n name ] [ -v value ] ]#接口模式及可用参数;
iscsiadm -m fw [-l]#固件模式;
iscsiadm -m host [ -P printlevel ] [ -H hostno ]#主机模式;
iscsiadm -k priority#如同”killall iscsid”命令;
|
|
-d, –debug=debug_level
|
打印调试等级,等级可从0至8;
|
-h, –help
|
显示帮助信息;
|
-I, –interface[iface]
|
接口绑定操作;
|
-k, –killiscsid
|
如同命令"killall iscsid";
|
-D, –discover
|
只能使用在discoverydb模式下,用来探测target信息;
|
-l, –login
|
登录,该选择只能用在discovery和node模式,若在discovery模式使用,它将登录所有探测到的target;
|
-L, –loginall==[all|manual|automatic]
|
只能用在node模式;
|
-m, –mode
|
模式选择;
|
-n, –name=name
|
指定名称;
|
-o, –op=op
|
选项,可以是new新建、delete删除、update更新、show显示等;
|
-p, –portal=ip[:port]
|
Target发布地址;
|
-P, –print=printlevel
|
|
-T, –targetname=targetname
|
Target名称;
|
-r, –sid=sid | sysfsdir
|
|
-R, –rescan
|
重新扫描;
|
-s, –stats
|
显示会话状态;
|
-S, –show
|
查看信息,可用于多种模式;
|
-t, –type=type
|
指定类型,可以是st,、slp,、isns 、fw
|
-u, –logout
|
卸载或登出;
|
-U,
|
登出所有会话;
|
–logoutall==[all,manual,automatic]
|
|
探测类型
|
|
iSCSI定义了三种探测类型:SendTargets, SLP,iSNS;
SendTargets:
本地iscsi协议,当发起者端(initiator)向target端询问可用资源时,target端把本地可用的target资源信息发送给它;
SLP:
通过服务定位协议SLP(Service Location Protocol)发现可用target资源;
iSNS:
通过iSNS (Internet 存储名称服务协议)发现可用target资源;
Fw:
写在固件中的程序;
|
参考:
Iscsi简介及linux下实现.pdf
太感谢了!!! 产品上正需要这个文章介绍的过程!
太专业了
这个是新知识,学习啦