设为首页 收藏本站
查看: 801|回复: 0

[经验分享] linux iscsi 实用

[复制链接]

尚未签到

发表于 2018-5-23 09:42:09 | 显示全部楼层 |阅读模式
  1、概述
ISCSI ( internel small system computer interface):是基于TCP/IP网络 的存储技术,它利用TCP/IP网络来存储scsi命令,本身因为TCP/IP的特性,因此会架构便宜(IP 网络设备价格远比存储网络的价格要低),可以从LAN扩展到WAN上面

  IP-SAN是作为存储区域网络的一种便宜的方案,但通常我们建议是将IP-SAN 建立在一个单独隔离的网络上,而不是和平常的业务网络一起用(存储网络与业务网络分离)
  

  iscsi协议本身不加密,只是在发起连接的时候有CHAP认证(包括单向认证和双向认证),在互联网上传送并不安全,因此较少用在互联网上,通常是作为一个单独的存储网络使用,另外也可以使用LUKS linux unified key setup磁盘加密,这样保证数据在传送过程中加密,但协议本身是没有保护的,也可以让ipsec协议保护,因为ipsec本身有认证和加密的功能
  

  Iscsi使用TCP协议、默认使用3260端口
  

  冗余:
  可以用网卡绑定或者多径来保证存储访问的高可用性
  注意:bonding只是保证网卡到它连接的设备(通常是交换机)的高可用,但是多径技术 (multi-path)是保证端到端的冗余,因此多径技术更高级。
  

  iscsi相对于NFS 或者DAS HDD的好处在于:
  1、对于DAS而言,服务器坏了,硬盘没坏,也不能访问了
       iscsi磁盘还是可以让其他客户端访问的
  2、NFS而言,扩容不容易
     iscsi target 可以1个,2个,3个,直接扩容,创建物理卷,将物理卷加入现存卷组,扩容逻辑卷,创建文件系统,加挂,但nfs有难度
  3、要求网络存储,提供给多台主机同时访问,如集群环境
  iscsi协议
  理解ISCSI协议重点是理解封装的概念,SCSI命令通过 iscis协议封装后在TCP/IP网络上传送,因此需要CPU资源来处理报文头的封装与解封装(也有专用的iscsiHBA卡,不过价格较贵罢了)
  iSCSI术语
  

  IQN(iSCSI Qualified Name)用来识别iSCSI通信的服务端和客户端,格式是
iqn.yyyy-mm.com.reverse.domain:optional-extra-name
  如主机名为instructor.example.com。第一个分享的LV空间可以是iqn.2013-10.com.example.instructor:lv1-my-first-lv
  

  可选部分(含前面的冒号)加上可以用于区分多个分享的设备,如有多个lv要分享的时候
  target :iSCSI服务端叫target,target 分享LUN,logical unit ,一台服务器可以分享一个或者多个LUN
  initiator:iSCSI客户端叫initiator,可以由软硬件实现,通常软件实现的较多(省钱)
  node: iSCSI服务端,iSCSI客户端都叫node
  Portal :在iSCSI中,Portal是一个target或者initiator的IP,用于建立连接
  iSNS:  internet storage name service ,一个命名服务,用来让initiator发现target,较少使用
  2、安装包
  scsi-target-utils
   iscsi-initiator-utils
     
  
      scsi-target-utils包中的主要配置文件以及命令:
                  /etc/tgt/target.conf : 主要配置文件
                  /usr/sbin/tgt-admin : 在线查询、删除target等功能的命令

     /usr/sbin/tgtd : 主要提供iscsi target服务的主程序

      iscsi-initiator-utils中的主要配置文件以及命令:
            /etc/iscsi/iscsid.conf : 主要配置文件
  /sbin/iscsid : 启动iscsi initiator的主要服务程序
  /sbin/iscsiadm : 管理iscsi initiator的管理程序
  /etc/intit.d/iscsid : 主要服务进程
  /etc/init.d/iscsi : 启动该脚本,可以使发现过的iscsi target配置生效,一般直接使用该脚本即可,initiator未执行的话,会调用/etc/init.d/iscsid启动initiator。

      Target可做磁盘分享给Initiator使用的方式:
          (1)大型文件(dd命令生成)(2) 磁盘阵列、磁盘或者磁盘分区等真实磁盘(3)使用LVM中的逻辑卷LV
  3、tgtadm命令详解
  [root@ser ~]# tgtadm -h

Usage: tgtadm [OPTION]
Linux SCSI Target Framework Administration Utility, version 1.0.24
--lld <driver> --mode(模式) target --op(操作) new --tid <id> --targetname <name>      注:tid不能为0,0默认保留给本机
--lld <driver> --mode target --op delete [--force] --tid <id>           
--lld <driver> --mode target --op show
--lld <driver> --mode target --op show --tid <id>
--lld <driver> --mode target --op update --tid <id> --name <param> --value <value>     //更改目标参数
--lld <driver> --mode target --op bind(绑定) --tid <id> --initiator-address <address>
--lld <driver> --mode target --op bind --tid <id>  --initiator-name <name>
--lld <driver> --mode target --op unbind(解除绑定) --tid <id> --initiator-address <address>
--lld <driver> --mode target --op unbind --tid <id> --initiator-name <name>
--lld <driver> --mode logicalunit(逻辑磁盘块) --op new --tid <id> --lun <lun> \
                        --backing-store <path> --bstype <type> --bsoflags <options>
--lld <driver> --mode logicalunit(逻辑单元) --op delete --tid(tid号) <id> --lun(逻辑单元) <lun>
--lld <driver> --mode account(账户) --op new --user <name> --password <pass>
--lld <driver> --mode account --op delete --user <name>
--lld <driver> --mode account --op bind --tid <id> --user <name> [--outgoing]
--lld <driver> --mode account --op unbind --tid <id> --user <name>
--control-port <port> use control port <port>
--help display this help and exit
  tgtadm模式化命令:
  --mode
  常用模式:target、logicalunit、account
  target --op
  new 、delete、show、update、bind、unbind
  logicalunit  --op        //逻辑单元块(可以是一个卷、一个磁盘、一个RAID、一个LVM),一定要在target的基础上创建lun,并为lun分配一个单元号
  new 、delete
  account   --op            //帐号绑定
  new、delete、bind、unbind
  --lld        //设备块地址
  --tid        //指定tid号,target的编号。不可为0,0保留给当前主机使用的。
  --lun        //指定逻辑单元号
  --backing-store    //指定后端存储
  --user        //指定用户名
  --password    //指定密码
  

  targetname(target命名):
      iqn.yyyy-mm.<reversed  domain  name>[:identifier]   
      例如:iqn.2014-12.com.wgmml:t
    t:是描述,可以是硬盘所在机房机柜位置。注以时间后域名段要反写。如上
  例:
  服务端:
  # tgtadm --lld iscsi --mode target --op new --targetname iqn.2014.12.com.ser:dosk1 --tid 1
  //新建一个target,target名为iqn.2014.12.com.ser:dosk1 ,tid为1
  

      # tgtadm --lld iscsi --mode target --op show     //查看当前主机target
       注:一个target上最多有32个lun
  

  
      # tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 1 --backing-store /dev/sdb
          //在tid为1的target上创建新lun并连接存储设备(sdb为新加的硬盘)
  

      # tgtadm --lld iscsi --mode target --op bind --tid 1 --initiator-address 10.1.1.0/24
          //绑定10.1.1.0/24网段可访问tid为1的target
  客户端:
  # iscsi-iname        //显示initatorname
  iqn.1994-05.com.redhat:c42a4a9748db
  # iscsi-iname -p iqn.1994-05.com.wgmml  //命令更改initator端名
  iqn.1994-05.com.wgmml:35536bb7a6
  #vim  /etc/iscsi/initiatorname.iscsi        //保存initator名的文件,也可以在此文件创建别名
  # echo "InitiatorName=`iscsi-iname -p iqn.2014.12.com.wgmml`" > /etc/iscsi/initiatorname.iscsi
  //iscsi-iname -p修改后的InitiatorName永久保存到initiatorname.iscsi 文件
  

      # iscsiadm -h
  iscsiadm -m discoverydb [ -hV ] [ -d debug_level ] [-P printlevel] [ -t type -p ip:port -I ifaceN ... [ -Dl ] ] | [ [ -p ip:port -t type] [ -o operation ] [ -n name ] [ -v value ] [ -lD ] ]
  iscsiadm -m discovery [ -hV ] [ -d debug_level ] [-P printlevel] [ -t type - p ip:port -I ifaceN ... [ -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 ifaceN ] [ -l | -u | -R | -s] ] [ [ -o operation ] [ -n name ] [ -v value ] ]
  iscsiadm -m session [ -hV ] [ -d debug_level ] [ -P printlevel] [ -r sessionid | sysfsdir [ -R | -u | -s ] [ -o operation ] [ -n name ] [ -v value ] ]
  iscsiadm -m iface [ -hV ] [ -d debug_level ] [ -P printlevel ] [ -I ifacename | -H hostno|MAC ] [ [ -o operation ] [ -n name ] [ -v value ] ] [ -C ping [ -a ip ] [ -b packetsize ] [ -c count ] [ -i interval ] ]
  iscsiadm -m fw [ -l ]
  iscsiadm -m host [ -P printlevel ] [ -H hostno|MAC ] [ -C chap [ -o operation ] [ -v chap_tbl_idx ] ]
  iscsiadm -k priority
  iscsiadm模式化命令
  -m
  常用模式:discovery|node|session|iface
  discovery:发现某服务器是否有target输入,以及输出哪些target;
  node:管理跟某target的关联关系,建立关联、断开关联。。。
  session:会话管理
  iface:端口管理
  例:
  # iscsiadm -m discovery -d 2 -t st -p 10.1.1.2
  10.1.1.2:3260,1 iqn.2014.12.com.wgmml:disk1
  //查看10.1.1.2主机共享的target及端口,发现完后会在/var/lib/iscsi/send_targets/下显示记录,不想使用是需要删除。
  

      # iscsiadm -m node -T iqn.2014.12.com.wgmml:disk1 -p 10.1.1.2 -l
      //挂载登录 10.1.1.2target服务器 iqn.2014.12.com.wgmml:disk1磁盘
  

     
     
  4、实例一:target端共享一个10G的硬盘块,硬盘路径为/dev/sdb,target端ip:10.1.1.2   Initiator端ip:10.1.1.3
  Target端:
  [root@ser ~]# yum install scsi-target-utils         //YUM安装scsi target端
          [root@ser ~]# service tgtd start        //启动服务
          [root@ser ~]# netstat -na |grep 3260         //查看是否启动
  tcp 0 0 0.0.0.0:3260 0.0.0.0:* LISTEN                             tcp 0 0 :::3260 :::* LISTEN
  [root@ser ~]# tgtadm  --lld  iscsi  --mode  target  --op  new  --targetname   iqn.2014.12.disk1  --tid  1        //创建一个新的target,命名为 iqn.2014.12.disk1 ,target的tid为1
  [root@ser ~]# tgtadm --lld iscsi --mode target --op show        //查看本机的target基本信息,包括target名及target下Lun信息、磁盘大小等信息
  [root@ser ~]# tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 1  --backing-store  /dev/sdb        //在tid为1的target下创建新lun并连接logicalunit  
  [root@ser ~]# tgtadm --lld iscsi --mode target --op show        //查看新lun是否添加成功

  [root@ser ~]# tgtadm --lld iscsi --mode target --op bind --tid 1 -I ALL        //target设置访问权限允许任意访问
          [root@ser ~]# tgtadm --lld iscsi --mode target --op unbind --tid 1 -I ALL        //任意访问不安全,删除任意访问权限
          注:为target分配任意存储设备后,需要设置访问权限控制后才可以使用。
          [root@ser ~]# tgtadm --lld  iscsi --mode target --op bind --tid 1 -I  10.1.1.0/24        //设置指定网段可访问
          注: 访问控制列表可使用“tgtadm --lld iscsi --mode target --op show”下的“ACL information”查看
  
  Initiator端:
  Linux:
  [root@initiator ~]# yum install iscsi-initiator-utils        //安装initiator端
          [root@initiator ~]# iscsiadm -m discovery -t sendtargets -p 10.1.1.2         //发现网络中可用的target
  Starting iscsid: [ OK ]
                10.1.1.2:3260,1 iqn.2014.12.disk1
  [root@initiator ~]# iscsiadm -m node -T iqn.2014.12.disk1 -p 10.1.1.2 -l         //登录可用target会话
                Logging in to [iface: default, target: iqn.2014.12.disk1, portal: 10.1.1.2,3260] (multiple)
                Login to [iface: default, target: iqn.2014.12.disk1, portal: 10.1.1.2,3260] successful.
  [root@initiator ~]# fdisk -l        //查看是否多了一个10G的磁盘

          
  windows:
  运行iSCSi发起程序

  在目标里填写Target的地址并点击快速连接(需等待一段时间加载驱动)
               
  磁盘管理中查看是否连接成功
                 
  实验二开机自动创建
  Target端:

  
      # vim /etc/tgt/targets.conf
          <target  iqn.2014.12.com.wgmml.target1>        //targetname名
              backing-store  /dev/sdb        //target共享的磁盘
              initiator-address 10.1.1.2/24        //有访问控制权限的网段
          </target>
  

  实例三:iscsi chap身份验证
  iscsi除了指定IP做ACL,还可以透过user/password (CHAP-Challenge Handshake Authentication Protocol(使用MD5的加密验证) )来做身分验证。
  1.   iscsi CHAP验证种类
  1.1 单向CHAP验证:在此安全性等级,只有目标Target会做验证
  1.2 相互( Mutual ) CHAP验证:在此安全性等级,目标Target与启动器Initiator皆会被彼此做验证.
  1.3 Reverse CHAP验证:一般的CHAP使用one-way hash,密码档无法回朔,但是使用Reverse CHAP是可以的


  2.   iscsi单向CHAP验证
  预设iSCSI 采用了单向CHAP(Challenge Handshake Authentication Protocol) 的身分验证方式,基本上是一种以MD5 的加密验证方式.方式如下:
  2.1. 在双方(Target/Initiator) 建立连线后,Target 送出"challenge" 的讯息告知Initiator 要做身分验证.
  2.2. Initiator 会将使用者密码(md5码加密)给Target 端.
  2.3. Target端将密码和Initiator发送的密码做比对,如果比对正确,这身份验证即成立,否则中断此次连结做.
  2.4. 在正常连线过程中会不时重复做1~3 的CHAP 身分验证.


  3.   iscsi单向CHAP配置
  3.1. target端配置
  3.1.1 创建target并为其分配设备
  [root@station9 ~]# tgtadm --lld iscsi --mod target --op new --tid=1 -T iq.example.station9:disk1
  [root@station9 ~]# tgtadm --lld iscsi --mod logicalunit --op new --tid 1 --lun 1 -b /dev/sdb1
  [root@station9 ~]# tgtadm --lld iscsi --mod target --op bind --tid 1 -I ALL
  l 3.1.2 创建CHAP验证帐号(与系统帐号无关)
  [root@station9 ~]# tgtadm --lld iscsi --mode account --op new --user RedHat --password redhat123
  #创建帐号redhat密码为redhat123,password 和username 的最大限制是256 字元
  [root@station9 ~]# tgtadm --lld iscsi --mode account --op bind --tid 1 --user redhat
  #将帐号redhat绑定到tid为1的target
  [root@station9 ~]# tgtadm --lld iscsi --mode target --op show
  3.2. initiator端配置
  3.2.1修改iscsi配置文件,添加CHAP验证帐号
  [root@station2 ~]# vim /etc/iscsi/nf
  node.session.timeo.replacement_timeout = 20   #默认延迟时间120太长,
  node.session.auth.authmethod = CHAP           #开启CHAP验证
  node.session.auth.username = redhat           #CHAP帐号,与target中一样
  node.session.auth.password = redhat123
  3.2.2 链接target
  [root@station2 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.32.39:3260
  192.168.32.39:3260,1 iq.example.station9:disk1
  [root@station2 ~]# iscsiadm -m node -T iq.example.station9:disk1 -p  192.168.32.39:3260 -l
  Logging in to [iface: default, target: iq.example.station9:disk1, portal: 192.168.32.39,3260]
  Login to [iface: default, target: iq.example.station9:disk1, portal: 192.168.32.39,3260]: successful


  4.   相互(Mutual)HAP incoming / outgoing验证
  相互( Mutual ) CHAP验证: CHAP的认证端可为Target(Incoming Authentication)或是Initiator(Outgoing Authentication)任一端来认证.也就是说Target(Incoming Authentication)是由Target端为Initiator认证.这样的认证方式可以允许多个Initiator来连接到Target.而Initiator(Outgoing Authentication)是由Initiator来认证Target端。
  刚刚已经设定过Incoming 的认证方式,现在要透过"tgtadm" 来建立Outgoing 的认证
  4.1. target端创建outgong帐号
  [root@station9 ~]# tgtadm --lld iscsi --op new --mode account --user out_redhat --password out_redhat123
  [root@station9 ~]# tgtadm --lld iscsi --mode account --op bind --tid 1 --user out_redhat –outgoing
  [root@station9 ~]# tgtadm --lld iscsi --mode target --op show
  4.2. initiator配置
  [root@station2 ~]# vim /etc/iscsi/iscsid.conf
  node.session.timeo.replacement_timeout = 20
  node.session.auth.authmethod = CHAP
  node.session.auth.username = redhat
  node.session.auth.password = redhat123
  node.session.auth.username_in = out_redhat
  #initiator端验证帐号,和target设备的outgoing帐号一样
  node.session.auth.password_in = out_redhat123
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-480155-1-1.html 上篇帖子: linux mysql ERROR 1153 下篇帖子: Linux下安装Zenoss
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表