linux iscsi 實用

一、概述php

ISCSI ( internel small system computer interface):是基於TCP/IP網絡 的存儲技術,它利用TCP/IP網絡來存儲scsi命令,自己由於TCP/IP的特性,所以會架構便宜(IP 網絡設備價格遠比存儲網絡的價格要低),能夠從LAN擴展到WAN上面

IP-SAN是做爲存儲區域網絡的一種便宜的方案,但一般咱們建議是將IP-SAN 創建在一個單獨隔離的網絡上,而不是和日常的業務網絡一塊兒用(存儲網絡與業務網絡分離)html


iscsi協議自己不加密,只是在發起鏈接的時候有CHAP認證(包括單向認證和雙向認證),在互聯網上傳送並不安全,所以較少用在互聯網上,一般是做爲一個單獨的存儲網絡使用,另外也可使用LUKS linux unified key setup磁盤加密,這樣保證數據在傳送過程當中加密,但協議自己是沒有保護的,也可讓ipsec協議保護,由於ipsec自己有認證和加密的功能node


Iscsi使用TCP協議、默認使用3260端口linux


冗餘:vim

能夠用網卡綁定或者多徑來保證存儲訪問的高可用性windows

注意:bonding只是保證網卡到它鏈接的設備(一般是交換機)的高可用,可是多徑技術 (multi-path)是保證端到端的冗餘,所以多徑技術更高級。後端


iscsi相對於NFS 或者DAS HDD的好處在於:安全

1、對於DAS而言,服務器壞了,硬盤沒壞,也不能訪問了服務器

     iscsi磁盤仍是可讓其餘客戶端訪問的網絡

二、NFS而言,擴容不容易

   iscsi target 能夠1個,2個,3個,直接擴容,建立物理卷,將物理卷加入現存卷組,擴容邏輯卷,建立文件系統,加掛,但nfs有難度

三、要求網絡存儲,提供給多臺主機同時訪問,如集羣環境 


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,較少使用

二、安裝包

     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 


三、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磁盤


    

    

四、實例一: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發起程序

                spacer.gif

                在目標裏填寫Target的地址並點擊快速鏈接(需等待一段時間加載驅動)
                spacer.gif

                磁盤管理中查看是否鏈接成功

                spacer.gif

實驗二開機自動建立

    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 

相關文章
相關標籤/搜索