iscsi 完美安装配置

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

    SAN   存储区域网络(storage area network)


一,iscsi的工作原理(通过iscsi协议实现)

            ISCSI给用户带来的价值在于:第一,ISCSI使SCSI数据包在以太网中传输成为可能,使SAN方案摆脱了昂贵的光纤网络,可以通过IP存储网络来实现原先SAN 存储网络方案实现的功能,降低管理复杂程度的同时还降低存储网络的构建成本。第二,由于客户很多时候的应用极为复杂,极少存在以单一的存储架构满足客户的所有需求的情况,所以更多的时候,客户往往会选择SAN和NAS融合的方案来解决企业存储遇到的各种问题,而如何使SAN和NAS可以融合起来,也是ISCSI技术在存储中的突出贡献之一。

            iSCSI简单来说,就是把SCSI通过TCP/IP协议封装起来,在以太网中传输。高速千兆iSCSI把SCSI、以太网和TCP/IP结合起来



二,搭建基于ip的iSCSI的存储系统

我将搭建如下的iscsi系统,这里就不介绍windows上的iscsi安装和配置了

 

三,正式开始安装搭建iscsi服务器端系统

         前期准备


test1
test2
192.168.87.129
192.168.87.135
iscsi initiator iscsi-target

test1安装配置iscsi-target,这个似乎很简单

(1)安装

[root@test2 iscsitarget-1.4.20.1]# tar zxvf iscsitarget-1.4.20.1.tar.gz 
[root@test2 iscsitarget-1.4.20.1]# cd iscsitarget-1.4.20.1
[root@test2 iscsitarget-1.4.20.1]# make && make install
[root@test2 iscsitarget-1.4.20.1]# service iscsi-target  start


(2)配置

[root@test2 ~]# cd /etc/iet/           配置文件的目录
[root@test2 iet]# ls
ietd.conf  initiators.allow  targets.allow    只有这三个文件

关于ietd.conf文件

  注意:每个target对应一个LUN,

Target iqn.2013-05.com.test:sdb

Lun 0 Path=/dev/sdb,Type=fileio,ScsiId=xyz,ScsiSN=xyz  (ScsiId,ScsiSN在这里没有多大的意义)

Target iqn.2013-05.com.test:sdc
Lun 0 Path=/dev/sdc,Type=fileio,ScsiId=xyz,ScsiSN=xyz



[root@test1 ~]# service iscsi-target start
[  OK  ] iSCSI Target: [  OK  ] 

就这样磁盘/dev/sdb共享出去了~~~~~!!!!

 

 

四,开始搭建客户端iscsi系统
     这里是test2上安装配置iscsi initiator

由于我这里用的是red hat系统自带了iscsi-initiator-utils.x86_64

[root@test1 ~]# yum install -y  iscsi-initiator-utils

[root@test1 ~]# cd /etc/iscsi/
[root@test1 iscsi]# ls
initiatorname.iscsi  iscsid.conf

[root@test1 iscsi]# service iscsi  start   (首次启动没有iscsi的发现)
iscsid is stopped
[  OK  ] iSCSI daemon: [  OK  ]
[  OK  ]
Setting up iSCSI targets: iscsiadm: No records found
[  OK  ]

手动执行发现iscsi target

[root@test1 iscsi]# iscsiadm -m discovery -t  sendtargets -p  192.168.87.135
192.168.87.135:3260,1 iqn.2013-05.com.test:sdb

192.168.87.135:3260,1 iqn.2013-05.com.test:sdc

当成功执行一次发现之后iscsi initiator 就会把查询记录写到

[root@test1 iscsi]#   /var/lib/iscsi/send_targets

[root@test1 ~]# more  /var/lib/iscsi/nodes/iqn.2013-05.com.test\:sdb/192.168.87.135\,3260\,1/default 
# BEGIN RECORD 2.0-872.16.el5
node.name = iqn.2013-05.com.test:sdb
node.tpgt = 1
node.startup = automatic
node.leading_login = No
iface.iscsi_ifacename = default
iface.transport_name = tcp
iface.vlan_id = 0
iface.vlan_priority = 0
iface.iface_num = 0
iface.mtu = 0
iface.port = 0
node.discovery_address = 192.168.87.135
node.discovery_port = 3260


五,介绍iscsiadm相关命令

 (1)如下为实例

(2)参数详解

管理共享磁盘

-l:查看文件系统信息
-c:max-mount-counts:设置强制自检的挂载次数,如果开启,每挂载一次mount conut就会加1,超过次数就会强制自检
-C:mount-count:设置文件系统挂载的次数,如果同时对一个文件系统指定了-c选项且-c参数的值大于-C,则将在下次启动时进行强制自检
-i:interval-between-checks[d|m|w] 设置强制自检的时间间隔[d天m月w周]
-m:reserved-blocks-percentage 保留块的百分比
-j:将ext2文件系统转换为ext3类型的文件系统,ext2可以转ext3 但不可以转回,转回数据丢失
-L:volume-label 类似e2label的功能,可以修改文件系统的标签
-r:reserved-blocks-count 调整系统保留空间
-o:[^]mount-option[,...] Set or clear the indicated default mount options in the filesystem. 设置或清除默认挂载的文件系统选项
-I:设置自检天数
-m:设置预留空间
-U:要设定 UUID 可以使用命令「tune2fs -U UUID 装置档案」,(要显示各储存装置的 UUID,可以使用命令
-e:error_behavior
下面列出3种发现错误后的行为:
continue:继续执行检测
remount-ro:重新以只读方式挂接
panic:产生一次系统崩溃(panic)
注意:默认情况下如果系统检测到文件系统有错误,会设置文件系统在下次启动的时候执行fsck检测。-c和-C参数可以用来设置文件系统在下次重启的时候强制继续执行fsck。-i和-c参数也可以同时设置在一个文件系统上。请注意,如果文件系统达成max_mount_counts或者check_interval的某一个条件,都会执行文件系统检查。

 

六,处理iscsi磁盘的Superblock 坏块的问题及找到UUID

tune2fs -l的输出介绍 

tune2fs -l /dev/ram3

档案系统 volume 名称 (Filesystem volume name):即是档案系统标签 (Filesystem label),用作简述该档案系统的用途或其储存数据。现时 GNU/Linux 都会用 USB 手指/IEEE1394 硬盘等可移除储存装置的档案系统标签作为其挂载目录的名称,方便使用者识别。而个别 GNU/Linux distribution 如 Fedora、RHEL 和 CentOS 等亦在 fstab 取代传统装置档案名称 (即 /dev/sda1 和 /dev/hdc5 等) 的指定开机时要挂载的档案系统,避免偶然因为 BIOS 设定或插入次序的改变而引起的混乱。可以使用命令 e2label 或 tune2fs -L 改变。
上一次挂载于 (Last mounted on)' :上一次挂载档案系统的挂载点路径,此栏一般为空,很少使用。可以使用命令 tune2fs -M 设定。
档案系统 UUID (Filesystem UUID):一个一般由乱数产生的识别码,可以用来识别档案系统。个别 GNU/Linux distribution 如 Ubuntu] 等亦在 fstab 取代传统装置档案名称 (即 /dev/sda1 和 /dev/hdc5 等) 的指定开机时要挂载的档案系统,避免偶然因为 BIOS 设定或插入次序的改变而引起的混乱。可以使用命令 tune2fs -U 改变。
(Filesystem magic number):用来识别此档案系统为 Ext2/Ext3/Ext3 的签名,位置在档案系统的 0x0438 - 0x0439 (Superblock 的 0x38-0x39),现时必定是 0xEF53。
档案系统版本编号 (Filesystem revision #) - 档案系统微版本编号,只可以在格式化时使用 mke2fs -r 设定。现在只支援[1]:
    0 - 原始格式,Linux 1.2 或以前只支援此格式[2]
    1 (dymanic) - V2 格式支援动态 inode 大小 (现时一般都使用此版本)
档案系统功能 (Filesystem features):开启了的档案系统功能,可以使用合令 tune2fs -O 改变。现在可以有以下功能:
    has_journal - 有日志 (journal),亦代表此档案系统必为 Ext3 或 Ext4
    ext_attr - 支援 extended attribute
    resize_inode - resize2fs 可以加大档案系统大小
    dir_index - 支援目录索引,可以加快在大目录中搜索档案。
    filetype - 目录项目为否记录档案类型
    needs_recovery - e2fsck 检查 Ext3/Ext4 档案系统时用来决定是否需要完成日志纪录中未完成的工作,快速自动修复档案系统
    extent - 支援 Ext4 extent 功能,可以加快档案系系效能和减少 external fragmentation
    flex_bg
    sparse_super - 只有少数 superblock 备份,而不是每个区块组都有 superblock 备份,节省空间。
    large_file - 支援大于 2GiB 的档案
    huge_file
    uninit_bg
    dir_nlink
    extra_isize
档案系统旗号 (Filesystem flags):signed_directory_hash
缺省挂载选项 (Default mount options):挂载此档案系统缺省会使用的选项
档案系统状态 (Filesystem state):可以为 clean (档案系统已成功地被卸载)、not-clean (表示档案系统挂载成读写模式后,仍未被卸载) 或 erroneous (档案系统被发现有问题)
错误处理方案 (Errors behavior):档案系统发生问题时的处理方案,可以为 continue (继续正常运作) 、remount-ro (重新挂载成只读模式) 或 panic (即时当掉系统)。可以使用 tune2fs -e 改变。
作业系统类型 (Filesystem OS type):建立档案系统的作业系统,可以为 Linux/Hurd/MASIX/FreeBSD/Lites[1]
Inode 数目 (Inode count):档案系统的总 inode 数目,亦是整个档案系统所可能拥有档案数目的上限
区块数目 (Block count):档案系统的总区块数目
保留区块数目 (Reserved block count):保留给系统管理员工作之用的区块数目
未使用区块数目 (Free blocks):未使用区块数目
未使用 inode 数目 (Free inodes):未使用 inode 数目
第一个区块编数 (First block):Superblock 或第一个区块组开始的区块编数。此值在 1 KiB 区块大小的档案系统为 1,大于1 KiB 区块大小的档案系统为 0。(Superblock/第一个区块组一般都在档案系统 0x0400 (1024) 开始)[1]
区块大小 (Block size) - 区块大小,可以为 1024, 2048 或 4096 字节 (Compaq Alpha 系统可以使用 8192 字节的区块)
Fragment 大小 (Fragment size):实际上 Ext2/Ext3/Ext4 未有支援 Fragment,所以此值一般和区块大小一样
保留 GDT 区块数目 (Reserved GDT blocks) - 保留作在线 (online) 改变档案系统大小的区块数目。若此值为 0,只可以先卸载才可脱机改变档案系统大小[3]
区块/组 (Blocks per group):每个区块组的区块数目
Fragments/组 (Fragments per group):每个区块组的 fragment 数目,亦用来计算每个区块组中 block bitmap 的大小
Inodes/组 (Inodes per group):每个区块组的 inode 数目
Inode 区块/组 (Inode blocks per group):每个区块组的 inode 区块数目
(Flex block group size):16
档案系统建立时间 (Filesystem created):格式化此档案系统的时间
最后挂载时间 (Last mount time):上一次挂载此档案系统的时间
最后改动时间 (Last write time):上一次改变此档案系统内容的时间
挂载次数 (Mount count):距上一次作完整档案系统检查后档案系统被挂载的次数,让 fsck 决定是否应进行另一次完整档案系统检查
最大挂载次数 (Maximum mount count):档案系统进行另一次完整检查可以被挂载的次数,若挂载次数 (Mount count) 大于此值,fsck 会进行另一次完整档案系统检查
最后检查时间 (Last checked):上一次档案系统作完整检查的时间
检查间距 (Check interval):档案系统应该进行另一次完整检查的最大时间距
下次检查时间 (Next check after):下一次档案系统应该进行另一次完整检查的时间
保留区块使用者识别码 (Reserved blocks uid):0 (user root)
保留区块群组识别码 (Reserved blocks gid):0 (group root)
第一个 inode (First inode):第一个可以用作存放正常档案属性的 inode 编号,在原格式此值一定为 11, V2 格式亦可以改变此值[1]
Inode 大小 (Inode size):Inode 大小,传统为 128 字节,新系统会使用 256 字节的 inode 令扩充功能更方便
(Required extra isize):28
(Desired extra isize):28
日志 inode (Journal inode):日志档案的 inode 编号
缺省目录 hash 算法 (Default directory hash):half_md4
目录 hash 种子 (Directory Hash Seed):17e9c71d-5a16-47ad-b478-7c6bc3178f1d
日志备份 (Journal backup):inode blocks
日志大小 (Journal size):日志档案的大小使用示例

设置强制检查前文件系统可以挂载的次数

tune2fs -c 30 /dev/hda1 

关闭强制检查挂载次数限制
tune2fs -c -l /dev/hda1

10天后检查
tune2fs -i 10 /dev/hda1 

1天后检查
tune2fs -i 1d /dev/hda1 

3周后检查
tune2fs -i 3w /dev/hda1 

 半年后检查
tune2fs -i 6m /dev/hda1

禁用时间检查
tune2fs -i 0 /dev/hda1 
添加日志功能,将ext2转换成ext3文件系统
tune2fs -j /dev/hda1 
调整/dev/hda1分区的保留空间为40000个磁盘块
tune2fs -r 40000 /dev/hda1 
调整/dev/hda1分区的保留空间为10%
tune2fs -m 10 /dev/hda1

设置/dev/hda1挂载选项,启用Posix Access Control Lists和用户指定的扩展属性
tune2fs -o acl,user_xattr /dev/hda1 
开机取消自检
tune2fs -l /dev/sdb1 | grep -E 'Maximum mount count:|Check interval'
tune2fs -i 0 -c 0 /dev/sdb1

更改设备为指定的uuid
tune2fs -U 51f7e9a4-5154-4e29-a7a6-208417290b85 /dev/sda1
-U 的参数如果为 random 表示直接产生一个随意的新 UUID:
tune2fs -U random /dev/sda1
-U 的参数如果为 time 表示直接依当前时间产生一个新的 UUID:
tune2fs -U time /dev/sda1
-U 的参数如果为 clear 表示清除档案系统的 UUID:
tune2fs -U clear /dev/sda1

缩小保留空间已扩大使用容量

#tune2fs -l /dev/sdd12|grep -i 'reserved block count'
Reserved block count:     7984
# df -Th
Filesystem    Type    Size  Used Avail Use% Mounted on
/dev/sda1     ext3    289G  5.6G  268G   3% /
tmpfs        tmpfs    633M     0  633M   0% /dev/shm
/dev/sdd12    ext3     38M  4.5M   26M  15% /mnt
# tune2fs -m 1 /dev/sdd12
tune2fs 1.39 (29-May-2006)
Setting reserved blocks percentage to 1% (399 blocks)
# df -Th
Filesystem    Type    Size  Used Avail Use% Mounted on
/dev/sda1     ext3    289G  5.6G  268G   3% /
tmpfs        tmpfs    633M     0  633M   0% /dev/shm
/dev/sdd12    ext3     38M  4.5M   33M  13% /mnt


test2共享出来的磁盘是/dev/sdb,但是在test1上面识别的却是/dev/sdc,这个时候如果写数据的话就会造成数据的紊乱。幸好这时这两个分区的UUID是一样的,所以rhel和centos都提供UUID的挂载

[root@test2 ~]#  tune2fs  -l  /dev/sdb2
tune2fs 1.39 (29-May-2006)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          e24bf42f-2f48-41e4-af39-938a976a703d

[root@test1 ~]#  tune2fs  -l /dev/sdc2
tune2fs 1.39 (29-May-2006)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          e24bf42f-2f48-41e4-af39-938a976a703d

test1:vim /etc/fstab

UUID=e24bf42f-2f48-41e4-af39-938a976a703d  /data     ext3  _netdev      0 0

[root@test1 ~]# mount /data
[root@test1 ~]# cd /data/
[root@test1 data]# touch  ss

[root@test2 ~]# mount /dev/sdb2 /mnt
[root@test2 ~]# cd /mnt
[root@test2 mnt]# ls
lost+found  ss

如果出现超级块坏死的情况,以下为解决方法

[root@test2 ~]# tune2fs -l /dev/sda4
tune2fs 1.39 (29-May-2006)
tune2fs: No such file or directory while trying to open /dev/sda4
Couldn't find valid filesystem superblock.

修复superblock

运行mke2fs /dev/sda4,重新挂载还是出现问题,dumpe2fs已经可以运行了
运行dumpe2fs /dev/sda4 记录下Blocks per group后的数字 8192
运行 fsck -b 8192 /dev/sda4,修复superblock
重新挂载,终于成功了,运行df -hl查看磁盘空间占用情况,可以看到新分配的空间了。



七,iscsi安全授权 

   1,initator主机以ip认证的方式获取target

[root@test2 iet]# pwd
/etc/iet
[root@test2 iet]# vim initiators.allow

iqn.2013-05.com.test:sdb 192.168.87.129   

将sdb共享给192.168.87.129,没有将sdc共享给192.168.87.129

[root@test2 iet]# service  iscsi-target restart
Stopping iSCSI Target: [  OK  ]
[  OK  ] iSCSI Target: [  OK  ]


    2,在test1上只发现了iqn.2013-05.com.test:sdb

[root@test1 iscsi]# service iscsi start
iscsid is stopped
[  OK  ] iSCSI daemon: [  OK  ]
[  OK  ]
Setting up iSCSI targets: Logging in to [iface: default, target: iqn.2013-05.com.test:sdc, portal: 192.168.87.135,3260] (multiple)
Logging in to [iface: default, target: iqn.2013-05.com.test:sdb, portal: 192.168.87.135,3260] (multiple)
iscsiadm: Could not login to [iface: default, target: iqn.2013-05.com.test:sdc, portal: 192.168.87.135,3260].
iscsiadm: initiator reported error (19 - encountered non-retryable iSCSI login failure)
Login to [iface: default, target: iqn.2013-05.com.test:sdb, portal: 192.168.87.135,3260] successful.
iscsiadm: Could not log into all portals
[  OK  ]


  3,initator主机以密码认证的方式获取target

   (1)iscsi-target端的配置

[root@test2 iet]# pwd
/etc/iet
[root@test2 iet]# vim initiators.allow

ALL ALL           ip认证和密码认证不能同时存在


修改 [root@test2 ~]# vim /etc/iet/ietd.conf 


IncomingUser   chenzhongyang    chenzhongyang

  (全局模式下配置,这里设置的时discovery的密码认证)

Target iqn.2013-05.com.test:sdb
IncomingUser chenzhongyang   1050311018
Lun 0 Path=/dev/sdb,Type=fileio,ScsiId=xyz,ScsiSN=xyz


Target iqn.2013-05.com.test:sdc
IncomingUser chenzhongyang   1050311018
Lun 0 Path=/dev/sdc,Type=fileio,ScsiId=xyz,ScsiSN=xyz


   (2)initator端的配置

session认证

[root@test1 ~]# vim /etc/iscsi/iscsid.conf 

node.session.auth.authmethod = CHAP

node.session.auth.username =  chenzhongyang
node.session.auth.password =  1050311018

discovery认证

[root@test1 ~]# vim /etc/iscsi/iscsid.conf 

discovery.sendtargets.auth.authmethod = CHAP
discovery.sendtargets.auth.username = chenzhongyang

discovery.sendtargets.auth.password = chenzhongyang


由于discovery是全局的认证,所以可以发现共享设备

[root@test1 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.87.135
192.168.87.135:3260,1 iqn.2013-05.com.test:sdc
192.168.87.135:3260,1 iqn.2013-05.com.test:sdb


[root@test1 ~]# service iscsi restart
Logging out of session [sid: 14, target: iqn.2013-05.com.test:sdc, portal: 192.168.87.135,3260]
Logging out of session [sid: 15, target: iqn.2013-05.com.test:sdb, portal: 192.168.87.135,3260]
Logout of [sid: 14, target: iqn.2013-05.com.test:sdc, portal: 192.168.87.135,3260] successful.
Logout of [sid: 15, target: iqn.2013-05.com.test:sdb, portal: 192.168.87.135,3260] successful.
Stopping iSCSI daemon: 
iscsid is stopped
[  OK  ] iSCSI daemon: [  OK  ]
[  OK  ]
Setting up iSCSI targets: Logging in to [iface: default, target: iqn.2013-05.com.test:sdc, portal: 192.168.87.135,3260] (multiple)
Logging in to [iface: default, target: iqn.2013-05.com.test:sdb, portal: 192.168.87.135,3260] (multiple)
Login to [iface: default, target: iqn.2013-05.com.test:sdc, portal: 192.168.87.135,3260] successful.
Login to [iface: default, target: iqn.2013-05.com.test:sdb, portal: 192.168.87.135,3260] successful.
[  OK  ]





本文转自陈仲阳0 51CTO博客,原文链接:http://blog.51cto.com/wolfword/1209134





相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
存储 数据安全/隐私保护
|
网络协议 数据安全/隐私保护
【OpenFiler】使用虚拟机安装openfiler
【OpenFiler】使用虚拟机安装openfiler
370 0
【OpenFiler】使用虚拟机安装openfiler
|
Windows 网络安全 Linux
|
机器学习/深度学习 KVM 虚拟化
|
存储 网络协议 Linux
|
存储 虚拟化
|
Unix Linux Windows