简介
SCSI为小型计算机系统接口(英语:Small Computer System Interface; 简写:SCSI),一种用于计算机和智能设备之间(硬盘、软驱、光驱、打印机、扫描仪等)系统级接口的独立处理器标准。 SCSI是一种智能的通用接口标准。
iSCSI技术是一种由IBM公司研究开发的,是一个供硬件设备使用的可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够在诸如高速千兆以太网上进行路由选择。iSCSI技术是一种新储存技术,该技术是将现有SCSI接口与以太网络(Ethernet)技术结合,使服务器可与使用IP网络的储存装置互相交换资料。
ISCSI使用rbd作为后端存储 :
本文举例基于ubuntu系统12.04.5 server
ISCSI角色分为target和initiator
target端即磁盘阵列或其他装有磁盘的主机,通过iscsi target工具将磁盘空间映射到网络上,initiator端就可以寻找发现并使用该磁盘。
initiator作为ISCSI的使用者,用于寻找发现网络上的target,并使用网络上的磁盘。
角色 | IP |
target | 10.128.3.22 |
initiator | 10.128.3.21 |
一、准备工作
创建好ceph集群,创建过程详细请查看本博另一篇部署ceph。二、target结点的配置(10.128.3.22)
apt-get install tgt
ubuntu-12.04.5-server版本默认安装(version=1.0.17),如果target要支持后端为rbd存储,需要升级tgt >= 1.0.35
本例升级tgt到(version = 1.0.43)
1. 拷贝ceph集群的ceph.conf和keyring到target, 确保target能访问ceph cluster.
并关闭rbd cache,主要由于如果在不同的主机启动多个target服务,并使用同一块RBD,打开rbd cache功能可能导致数据丢失或错乱。
在/etc/ceph/ceph.conf文件中添加如下几行:
[client]
rbd_cache = false
root@server2:~# ceph -s
cluster cfd6bc98-dd50-44b8-ae8e-fbbd9420146b
health HEALTH_WARN
clock skew detected on mon.ceph4
Monitor clock skew detected
monmap e8: 4 mons at {ceph1=10.128.3.11:6789/0,ceph2=10.128.3.12:6789/0,ceph3=10.128.3.13:6789/0,ceph4=10.128.3.14:6789/0}
election epoch 28, quorum 0,1,2,3 ceph1,ceph2,ceph3,ceph4
osdmap e99: 4 osds: 4 up, 4 in
pgmap v5294: 960 pgs, 5 pools, 37812 kB data, 30 objects
4331 MB used, 61164 MB / 65496 MB avail
960 active+clean
2. 确认TGT是否支持rbd
root@server2:~# tgtadm --lld iscsi --op show --mode system | grep rbd
rbd (bsoflags sync:direct)
3. 创建一个RBD image1
root@server2:~# ceph osd pool create testpool1 128 128
pool 'testpool1' created
root@server2:~# rbd create testpool1/image1 -s 1024
root@server2:~# rbd ls testpool1
image1
4. 创建一个target配置文件
/etc/tgt/conf.d/iscsi_ceph.conf
<target iqn.2016-03.rbdstore.example.com:iscsi>
driver iscsi
bs-type rbd
backing-store testpool1/image1 # Format is <pool-name>/<image-name>
</target>
5. 重启tgt服务
service tgt reload
6. 查看当前详细的target
tgtadm --lld iscsi --mode target --op show
三、initiator结点的配置(10.128.3.21)
1、安装open-scsiroot@server1:~# apt-get install open-iscsi
2. 启动open-scsi服务
root@server1:~# service open-iscsi restart
3. 发现ISCSI target设备
root@server1:~# iscsiadm -m discovery -t st -p 10.128.3.22
10.128.3.22:3260,1 iqn.2016-03.rbdstore.example.com:iscsi
4. 接入target设备
root@server1:~# iscsiadm -m node -p 10.128.3.22 --login
Logging in to [iface: default, target: iqn.2016-03.rbdstore.example.com:iscsi, portal: 10.128.3.22,3260]
Login to [iface: default, target: iqn.2016-03.rbdstore.example.com:iscsi, portal: 10.128.3.22,3260]: successful
5. 确认target设备已经接入(示例中sdc就是iscsi设备)
root@server1:~# cat /proc/partitions
major minor #blocks name
11 0 882472 sr0
2 0 4 fd0
8 0 16777216 sda
8 1 15727616 sda1
8 2 1 sda2
8 5 1046528 sda5
8 16 16777216 sdb
252 0 1046528 dm-0
8 32 1048576 sdc
root@server1:~#
root@server1:~#
root@server1:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
fd0 2:0 1 4K 0 disk
sda 8:0 0 16G 0 disk
├─sda1 8:1 0 15G 0 part /
├─sda2 8:2 0 1K 0 part
└─sda5 8:5 0 1022M 0 part
└─cryptswap1 (dm-0) 252:0 0 1022M 0 crypt [SWAP]
sdb 8:16 0 16G 0 disk
sdc 8:32 0 1G 0 disk
sr0 11:0 1 861.8M 0 rom
6. 挂载接入的target设备使用
root@server1:~# mkfs.xfs /dev/sdc -f
meta-data=/dev/sdc isize=256 agcount=8, agsize=32768 blks
= sectsz=512 attr=2, projid32bit=0
data = bsize=4096 blocks=262144, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
root@server1:~# mount /dev/sdc /mnt/
root@server1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 15G 1.6G 13G 12% /
udev 484M 4.0K 484M 1% /dev
tmpfs 100M 388K 99M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 497M 0 497M 0% /run/shm
/dev/sdc 1014M 33M 982M 4% /mnt
7. initiator断开target
root@server1:~# umount /mnt/