iscsi是直接对设备进行共享的服务
iscsi是一个供硬件设备使用的、可在IP协议上层运行的SCSI指令集,是一种开放的基于IP协议的工业技术标准。该协议可以用TCP/IP对SCSI指令进行封装,使得这些指令能够通过基于P网络进行传输,从而实现SCSI和TCP/IP协议的连接。
从根本上说,iSCSI协议是一种利用IP网络来传输潜伏时间短的SCSI数据块的方法,ISCSI使用以太网协议传送SCSI命令、响应和数据。ISCSI可以用我们已经熟悉和每天都在使用的以太网来构建IP存储局域网。通过这种方法,ISCSI克服了直接连接存储的局限性,使我们可以跨不同服务器共享存储资源,并可以在不停机状态下扩充存储容量。
iSCSI的最大好处是能提供快速的网络环境,虽然其性能和带宽跟光纤网络还有一些差距,但能节省企业约30-40%的成本。
服务端:
yum install targetcli -y #安装共享磁盘服务
systemctl start target #启动服务
targetcli #打开设置
客户端:
yum install iscsi-initiator-utils.64_86 -y #安装
systemctl start iscsi #启动
服务端:
首先建立一个要共享出去的分区:这里博主已经建立好了/dev/vdb1,大小为2G
主要代码如下:
[root@server ~]# targetcli ##进入iSCSI目标交互式配置模式
/> /backstores/block create westos:storage1 /dev/vdb1
##和逻辑卷建立联系,把/dev/vdb1用westos:storage1表示
/> /iscsi create iqn.2017-12.com.example.storage1
##创建iqn服务的名称(每个发起端和目标需要唯一名称进行标识)
##格式: iqn.YYYY(年)-MM(月).域名反写:随机串
/> /iscsi/iqn.2017-12.com.example.storage1/tpg1/acls create iqn.2017-12.com.example:westoskey
##创建客户端连接服务端密钥
/> /iscsi/iqn.2017-12.com.example.storage1/tpg1/portals create 172.25.254.156
Using default IP port 3260
Created network portal 172.25.254.156:3260.
##创建目标门户
/> /iscsi/iqn.2017-12.com.example.storage1/tpg1/luns create /backstores/block/westos:storage1
##在仓库中创建逻辑单元号
建立好共享磁盘后,需要将它的共享端口加入火墙策略:
firewall-cmd --permanent --add-port=3260/tcp
firewall-cmd --reload
客户端:
vim /etc/iscsi/initiatorname.iscsi #编辑key文件
systemctl restart iscsid ##重启
systemctl restart iscsi ##重启服务
iscsiadm -m discovery -t st -p 172.25.254.156 #发现服务
## -m discovery ##侦测target
## -t sendtargets ##通过iscsi协议(sendtargets可简写为st)
## -p IP:port ##指定target的IP和port,不写port的话,默认为3260
iscsiadm -m node -T iqn.2017-12.com.example:storage1 -p 172.25.254.201 -l #登陆服务
fdisk -l ##查看磁盘分区
fdisk /dev/sda ##对sda磁盘进行分区
mkfs.xfs /dev/sda1 ##对sda磁盘的第一块分区格式化为xfs文件系统
mount /dev/sda1 /mnt ##挂载使用
touch /mnt/clientfile ##建立文件
umount /mnt ##卸载
iscsiadm -m node -T iqn.2017-12.com.example.storage1 -p 172.25.254.156 -u ##登出iSCSI目标,以暂时断开连接。
iscsiadm -m node -T iqn.2017-12.com.example.storage1 -p 172.25.254.156 -o delete ##删除iSCSI目标的本地记录,以永久断开连接。
##此时共享磁盘已经分区并且做了文件系统,当其他人使用的时候,不用再分区和格式化,直接挂载投入使用即可。
如果遇到如下问题:
1.
[root@server ~]# iscsiadm -m node -T iqn.2017-12.com.example.storage1 -p 172.25.254.156 -l
Logging in to [iface: default, target: iqn.2017-12.com.example.storage1, portal: 172.25.254.156,3260] (multiple)
iscsiadm: Could not login to [iface: default, target: iqn.2017-12.com.example.storage1, portal: 172.25.254.156,3260].
iscsiadm: initiator reported error (24 - iSCSI login failed due to authorization failure)
iscsiadm: Could not log into all portals
解决方法:
1)检查钥匙是否正确
vim /etc/iscsi/initiatorname.iscsi
若是修改了文件,需要重启服务
[root@server ~]# systemctl restart iscsid
[root@server ~]# systemctl restart iscsi
2)删除所有文件,重新发现
[root@server ~]# yum install tree
[root@server ~]# tree /var/lib/iscsi/
/var/lib/iscsi/
├── ifaces
├── isns
├── nodes
│ └── iqn.2017-12.com.example.storage1
│ └── 172.25.254.156,3260,1
│ └── default
├── send_targets
│ └── 172.25.254.156,3260
│ ├── iqn.2017-12.com.example.storage1,172.25.254.156,3260,1,default -> /var/lib/iscsi/nodes/iqn.2017-12.com.example.storage1/172.25.254.156,3260,1
│ └── st_config
├── slp
└── static
[root@server ~]# rm -rf /var/lib/iscsi/nodes/*
[root@server ~]# rm -rf /var/lib/iscsi/send_targets/*
[root@server ~]# tree /var/lib/iscsi/
/var/lib/iscsi/
├── ifaces
├── isns
├── nodes
├── send_targets
├── slp
└── static
[root@server ~]# iscsiadm -m discovery -t st -p 172.25.254.156
[root@server ~]# iscsiadm -m node -T iqn.2017-12.com.example.storage1 -p 172.25.254.156 -l
2.
[root@server ~]# systemctl restart iscsi
Job for iscsi.service failed. See 'systemctl status iscsi.service' and 'journalctl -xn' for details.
解决方法:先重启上层服务,再去重启服务
[root@server ~]# systemctl restart iscsid
[root@server ~]# systemctl restart iscsi
客户端
blkid ##查看设备uuid
vim /etc/fstab
UUID="2995d026-b97d-4652-8ceb-e3242e4bdf1e" /mnt xfs defaults,_netdev 0 0
## 通过网络共享,设备名在不同主机上可能会发生漂移,但uuid是唯一的。因此通过uuid识别设备是比较可靠的方式。
## 系统启动会先读取fstab内容挂载设备,然后才开启网络 。所以要用参数defaults,_netdev告诉系统,这块设备是网络设备。防止系统因找不到此设备而无法正常启动。
准备工作:
客户端:
[root@client ~]# iscsiadm -m node -T iqn.2017-12.com.example.storage1 -p 172.25.254.156 -u
[root@client ~]# iscsiadm -m node -T iqn.2017-12.com.example.storage1 -p 172.25.254.156 -o delete
[root@client ~]# tree /var/lib/iscsi/
/var/lib/iscsi/
├── ifaces
├── isns
├── nodes
├── send_targets
│ └── 172.25.254.156,3260
│ └── st_config
├── slp
└── static
[root@client ~]# systemctl restart iscsid
[root@client ~]# systemctl restart iscsi
服务器:
[root@server ~]# targetcli
/> clearconfig confirm=true ##删除
/> exit ##退出
正题开始: 先自行在服务端创建一个lvm分区
fdisk /dev/vdb (lvm标签为8e)
pvcreate /dev/vdb1
vgcreate vg0 /dev/vdb1
vgdisplay ##查看vg的详细信息
lvcreate -l 255 -n lv0 vg0 ## -l:指定 pe的个数
在服务端建立共享lvm磁盘:
[root@server ~]# targetcli
/> /backstores/block create westos:storage1 /dev/vg0/lv0
/> /iscsi create iqn.2017-12.com.example:storage1
/> iscsi/iqn.2017-12.com.example:storage1/tpg1/acls create iqn.2017-12.com.example:key1
/> iscsi/iqn.2017-12.com.example:storage1/tpg1/luns create /backstores/block/westos:storage1
/> iscsi/iqn.2017-12.com.example:storage1/tpg1/portals create 172.25.254.156
/> exit
客户端:
先修改密码文件,重启服务,然后再去发现并登陆共享磁盘
[root@client ~]# vim /etc/iscsi/initiatorname.iscsi
[root@client ~]# systemctl restart iscsid
[root@client ~]# systemctl restart iscsi
[root@client ~]# iscsiadm -m discovery -t st -p 172.25.254.156
[root@client ~]# iscsiadm -m node -T iqn.2017-12.com.example:storage1 -p 172.25.254.156 -l
[root@client ~]# fdisk -l
Disk /dev/sdb: 1069 MB, 1069547520 bytes, 2088960 sectors
服务端扩展lvm
重新划分一个lvm分区,加入vg0,再将lv扩大
[root@server ~]# fdisk /dev/vdb
[root@server ~]# partprobe
[root@server ~]# pvcreate /dev/vdb2
[root@server ~]# vgextend vg0 /dev/vdb2
[root@server ~]# lvextend -L 1500M -n /dev/vg0/lv0
客户端同步:
客户端同步需要将共享磁盘卸载,再重新登陆即可
[root@client ~]# iscsiadm -m node -T iqn.2017-12.com.example:storage1 -p 172.25.254.156 -u
[root@client ~]# iscsiadm -m node -T iqn.2017-12.com.example:storage1 -p 172.25.254.156 -l
[root@client ~]# fdisk -l
Disk /dev/sdb: 1572 MB, 1572864000 bytes, 3072000 sectors