iscsi序列二、iscsi多路徑配置方式


一、ISCSI多路徑應用

       如果存儲服務器到交換機只有一條線路的時候,那么一條線路出線故障,整個就沒法使用了,所以多線路可以解決這個問題,避免單點故障

 

       如上圖,如果SAN服務器與客戶端交換機只有一條線路相連,那么如果交換機或者線路出現故障,那么整個通訊中斷, 

       如圖二,SAN服務器與我們的客戶端有兩條以上的線路相連,當然或許是一台交換機,也或許是兩台交換機用冗余,那么其中一台交換機或者一條線路中斷,我們的整個通訊依然正常,這就是多路徑的作用!也就是實用多路徑,避免了單點故障帶給我們的損失!

通過VMware模擬多路徑,使用下面的拓撲:

實驗環境:  xuegod63,xuegod64配置雙網卡 。

服務端:xuegod63.cn   IP:192.168.1.63 ens32   ; IP:192.168.2.63 ens35 , vmnet4

客戶端:xuegod64.cn   IP:192.168.1.64 ens32   ; IP:192.168.2.64 ens35 , vmnet4

 

將xuegod63配置成ip san,將xuegod63上的sdb1分區,通過ip san 共享出去。(查看搭建iscsi存儲系統這節內容)

服務器端: target     xuegod63

客戶端:   initiator    xuegod64

 

配置網絡環境:

服務端xuegod63 添加一塊網卡:

生成ens35配置文件,配置IP ,192.168.2.63

[root@xuegod63 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens35
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="yes"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens35"
DEVICE="ens35"
NBOOT="yes"
IPADDR="192.168.2.63"
PREFIX="24"
IPV6_PRIVACY="no"
[root@xuegod63 Desktop]# systemctl restart network    或 ifdown ens35;ifup ens35

[root@xuegod63 ~]# ifconfig        #查看網絡
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.63  netmask 255.255.248.0  broadcast 192.168.7.255
        inet6 fe80::5002:d1:8a0:7840  prefixlen 64  scopeid 0x20<link>
        ether 00:50:56:30:c6:51  txqueuelen 1000  (Ethernet)
        RX packets 7516  bytes 539083 (526.4 KiB)
        RX errors 0  dropped 4  overruns 0  frame 0
        TX packets 303  bytes 36655 (35.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens35: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.2.63  netmask 255.255.255.0  broadcast 192.168.2.255
        inet6 fe80::6f57:c34c:3709:2e72  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:89:00:c2  txqueuelen 1000  (Ethernet)
        RX packets 9  bytes 779 (779.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 19  bytes 1370 (1.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

  

客戶端xuegod64 也添加一塊網卡

生成ens35配置文件,IP ,192.168.2.64

[root@xuegod64 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens35
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="yes"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens35"
DEVICE="ens35"
NBOOT="yes"
IPADDR="192.168.2.64"
PREFIX="24"
IPV6_PRIVACY="no"
[root@xuegod64 ~]#  systemctl restart network

安裝服務端target並配置(請參照搭建iscsi存儲系統內容)

[root@xuegod63 ~]# yum -y install targetcli

增加雙IP

[root@xuegod63 ~]# targetcli
/> iscsi/iqn.2018-04.cn.xuegod:server/tpg1/portals/ create 192.168.1.63 3260
/> iscsi/iqn.2018-04.cn.xuegod:server/tpg1/portals/ create 192.168.2.63 3260

配置客戶端: xuegod64

安裝包
[root@xuegod64 ~]# yum install -y iscsi-initiator-utils
啟動iscsi服務
[root@xuegod64 ~]# systemctl start iscsi
設置開機啟動服務
[root@xuegod64 ~]# systemctl enable iscsi
[root@xuegod64 ~]# systemctl enable iscsid

配置ISCSIInitiator名稱

注:此處InitiatorName必須與服務端配置的ACL允許ISCSI客戶機連接的名稱一致。

[root@xuegod64 ~]# vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2018-04.cn.server:xugod64

重啟服務
[root@xuegod64 ~]# systemctl restart iscsid
發現(查找)ISCSI設備
[root@xuegod64 ~]# iscsiadm -m discovery -t st -p 192.168.2.63
連接ISCSI設備
[root@xuegod64 ~]# iscsiadm -m node --login
查看系統磁盤信息
[root@xuegod64 ~]# ls /dev/sd*
…..        /dev/sdb  /dev/sdc
格式化掛載(已格式化忽略)
[root@xuegod64 ~]# mkfs.xfs /dev/sdb

測試掛載寫數據
[root@xuegod64 ~]#  mount  /dev/sdb  /opt
[root@xuegod64 ~]#  echo aabbcc >/opt/a.txt

掛載另一路徑設備
root@xuegod64 ~]# mkdir  /test
[root@xuegod64 ~]# mount  /dev/sdc  /test  掛載報錯了吧?

[root@xuegod64 ~]#blkid /dev/sdc /dev/sdb   #對比一下,發現UUID一樣的, 相同id不能重復掛載
解決方法:
[root@xuegod64 ~]#mount -t xfs -o nouuid /dev/sdc  /test  #跳過UUID掛載

[root@xuegod64 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2             9.7G  3.7G  5.5G  41% /
tmpfs                 569M     0  569M   0% /dev/shm
/dev/sda1             194M   28M  157M  15% /boot
/dev/sr0              3.4G  3.4G     0 100% /mnt
/dev/sdc            5.0G  138M  4.6G   3% /test
/dev/sdb             5.0G  138M  4.6G   3% /opt


在xuegod63服務端查看鏈接狀態
[root@xuegod63 ~]# netstat -antup | grep 3260

查看連接結構:
[root@xuegod64 ~]#yum –y install tree 
[root@xuegod64 ~]# tree /var/lib/iscsi/
/var/lib/iscsi/
├── ifaces
├── isns
├── nodes
│   └── iqn.2015-01.cn.xuegod.www:target_san1
│       ├── 192.168.1.63,3260,1
│       │   └── default
│       └── 192.168.2.63,3260,1
│           └── default
├── send_targets
│   ├── 192.168.1.63,3260
│   │   ├── iqn.2015-01.cn.xuegod.www:target_san1,192.168.1.63,3260,1,default -> /var/lib/iscsi/nodes/iqn.2015-01.cn.xuegod.www:target_san1/192.168.1.63,3260,1
│   │   └── st_config
│   └── 192.168.2.63,3260
│       ├── iqn.2015-01.cn.xuegod.www:target_san1,192.168.2.63,3260,1,default -> /var/lib/iscsi/nodes/iqn.2015-01.cn.xuegod.www:target_san1/192.168.2.63,3260,1
│       └── st_config

 

二、實戰: 在存儲客戶端xuegod64上配置多路徑

       多路徑軟件Device Mapper Multipath(DM-Multipath)可以將服務器節點和存儲陣列之間的多條I/O鏈路配置為一個單獨的設備。這些I/O鏈路是由不同的線纜、交換機、控制器組成的SAN物理鏈路。Multipath將這些鏈路聚合在一起,生成一個單獨的新的設備。

 1.DM-Multipath概覽:

(1)數據冗余

DM-Multipath可以實現在active/passive模式下的災難轉移。在active/passive模式下,只有一半的鏈路在工作,如果鏈路上的某一部分(線纜、交換機、控制器)出現故障,DM-Multipath就會切換到另一半鏈路上。

(2)提高性能

DM-Multipath也可以配置為active/active模式,從而I/O任務以round-robin的方式分布到所有的鏈路上去。通過配置,DM-Multipath還可以檢測鏈路上的負載情況,動態地進行負載均衡。

 2. 軟件安裝

安裝多路經軟件
[root@xuegod64 ~]# yum install device-mapper-multipath -y

使用默認配置文件啟動
[root@xuegod64 ~]# cp /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf   /etc/
[root@xuegod64 ~]# systemctl restart multipathd
[root@xuegod64 ~]# multipath -ll    #沒有輸出消息。 表示出錯了。

解決:把正在使用中的sdb和sdbc卸載了
[root@xuegod64 ~]# umount  /opt
[root@xuegod64 ~]# umount  /test

[root@xuegod64 ~]# /etc/init.d/iscsi  restart
[root@xuegod64 ~]# systemctl restart multipathd
[root@xuegod64 ~]# multipath –ll

36001405f4ddd118ad384b69b30433220(遠程存儲設備id)dm-2 LTO-ORG(廠商) ,sun1(產品ID)  size=5.0G features='0' hwhandler='0' wp=rw

|-+- policy='service-time 0' prio=1 status=active   #默認使用active的鏈路

| `- 34:0:0:1 sdb 8:16 active ready running

`-+- policy='service-time 0' prio=1 status=enabled  #有效的鏈路,但不是活動鏈路

  `- 35:0:0:1 sdc 8:32 active ready running

#默認配置並不會實現負載均衡,只會實現高可用的效果。

# (36001405f4ddd118ad384b69b30433220)  遠程存儲設備的產品信息,由於sdb和sdc對應的都是遠端同一個存儲,所以產品信息是一樣的,最后被多路經驅動發現,所以為他們生成了一個設備文件/dev/mapper/mpatha

[root@xuegod64 ~]# ll  /dev/mapper/mpatha*
lrwxrwxrwx 1 root root 7 1月  13 09:02 /dev/mapper/mpatha -> ../dm-2san 

 三、實戰2:修改配置文件,啟動高可用負載均衡模式,並自定義多路經設備文件的名字

[root@xuegod64 ~]# vim /etc/multipath.conf 

注銷掉下面三行內容

請在此模版下寫內容:

 

在74行以下插入以下內容:3600140510a3f0e98a0c4ec1a9a34f762
multipaths {
        multipath {
                wwid   " 36001405f4ddd118ad384b69b30433220"   #填寫硬盤產品關鍵信息
                alias                   webdata   #映射后的別名,可以隨便取
                path_grouping_policy    multibus   #路徑組策略
                 path_selector           "round-robin 0"
                failback                 manual
                rr_weight               priorities
                no_path_retry           5
        }
}

重啟服務multipathd,測試負載均衡:

[root@xuegod64 ~]# systemctl restart multipathd
[root@xuegod64 ~]#  systemctl restart iscsi   #需要重新識別一下存儲
再次查看:
[root@xuegod64 ~]# multipath -ll
webdata (36001405f4ddd118ad384b69b30433220) dm-2 xuegod  ,target1         
size=5.0G features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
  |- 34:0:0:1 sdb 8:16 active ready running
  `- 35:0:0:1 sdc 8:32 active ready running
注:之前相當於主備,現在相當於負載均衡 。


測試:
[root@xuegod64 ~]# ls /dev/mapper/webdata*
  webdata                               # webdata對應硬盤中的對應硬盤sdb 
[root@xuegod64 ~]# mount /dev/mapper/webdata  /opt
[root@xuegod64 ~]# cp /etc/hosts  /opt
[root@xuegod64 ~]# ls /opt
lost+found  passwd  hosts

 四、故障模擬

斷開一條鏈路。測試鏈路高可用,關閉其中一個網卡,多路經驅動需要約1分鍾的時間,去識別鏈路故障

[root@xuegod63 ~]# ifdown ens32

查看鏈路狀態:
[root@xuegod64 ~]# multipath -ll   #多路經驅動需要約1分鍾的時間,去識別鏈路故障
  |- 12:0:0:1 sdb 8:16 active faulty running    #  鏈接運行不正常  faulty故障
  |- 13:0:0:1 sdc 8:32 active ready  running

#會卡在這個地方,大約一分鍾后,檢測故障結束
[root@xuegod64 ~]# multipath -ll
  |- 12:0:0:1 sdb 8:16 failed faulty running  #1分鍾后,顯示鏈路連接失敗。
  |- 13:0:0:1 sdc 8:32 active ready  running

 

測試寫入數據:
[root@xuegod64 ~]# cp  -r  /boot/grub/  /opt/
[root@xuegod64 ~]# ls /mnt/
grub  lost+found  passwd  hosts

注:數據可以正常寫入,說明,高可用成功。


打開鏈路,過一段時間再看:
[root@xuegod63 ~]# ifup ens32
[root@xuegod64 ~]# multipath -ll
  |- 8:0:0:1 sdb 8:16 active ready running
  |- 9:0:0:1 sdc 8:32 active ready running   #鏈路運行正常

 五、實戰:在應用服務器上使用udev規則為target創建固定名字的軟鏈接

udev概述: udev 是Linux kernel 2.6系列的設備管理器。它主要的功能是管理/dev目錄底下的設備節點。udev會根據用戶添加/刪除硬件的行為,自處理/dev目錄下所有設備文件。

主配置文件:/etc/udev/udev.conf

設備文件名字規則目錄:

[root@xuegod64 ~]# ls /lib/udev/rules.d/10-dm.rules

命名規律: 開頭為數字, 結尾是 .rules

運行機制和注意事項:

1、udev按照規則文件名的數字順序來查詢全部規則文件,然后為匹配規則的設備,創建其設備文件或文件鏈接。

2、通常情況下,建議讓自己想要的規則文件最先被解析。比如,創建一個名為 /etc/udev/rules.d/10-myrule.rules的文件,並把你的規則寫入該文件,這樣udev就會在解析系統默認的規則文件之前解析到你的文件。

3、在規則文件里,除了以“#”開頭的行(注釋),所有的非空行都被視為一條規則,但是一條規則不能擴展到多行。

4、規則都是由多個鍵值對(key-valuepairs)組成,並由逗號隔開,鍵值對可以分為條件匹配鍵值對(以下簡稱“匹配鍵”)和賦值鍵值對(以下簡稱“賦值鍵”),一條規則可以有多條匹配鍵和多條賦值鍵。

5、匹配鍵是匹配一個設備屬性的條件,當一個設備的屬性匹配了該規則里所有的匹配鍵,就認為這條規則生效,然后按照賦值鍵的內容,執行該規則的賦值。

 

說明:如果有一個設備被內核實別sdb1,則該條件生效,執行后面的賦值:在/dev下產生一個名為my_ disk的設備文件,並把設備文件的權限設為0666。

詳細參數說明

udev規則的匹配鍵

  1. ACTION: 事件 (uevent) 的行為,例如:add( 添加設備 )、remove( 刪除設備 )。
  2. KERNEL: 內核設備名稱,例如:sda, cdrom。
  3. DEVPATH:設備的 devpath 路徑。
  4. SUBSYSTEM: 設備的子系統名稱,例如:sda 的子系統為 block。
  5. BUS: 設備在 devpath 里的總線名稱,例如:usb。
  6. DRIVER: 設備在 devpath 里的設備驅動名稱,例如:ide-cdrom。
  7. ID: 設備在 devpath 里的識別號。
  8. SYSFS{filename}: 設備的 devpath 路徑下,設備的屬性文件“filename”里的內容。
  9. ENV{key}: 環境變量。在一條規則中,可以設定最多五條環境變量的 匹配鍵。
  10. PROGRAM:調用外部命令。
  11. RESULT: 外部命令 PROGRAM 的返回結果。

udev重要的賦值鍵

  1. NAME:在 /dev下產生的設備文件名。只有第一次對某個設備的 NAME 的賦值行為生效,之后匹配的規則再對該設備的 NAME 賦值行為將被忽略。如果沒有任何規則對設備的 NAME 賦值,udev 將使用內核設備名稱來產生設備文件。
  2. SYMLINK:為 /dev/下的設備文件產生符號鏈接。由於 udev 只能為某個設備產生一個設備文件,所以為了不覆蓋系統默認的 udev 規則所產生的文件,推薦使用符號鏈接。
  3. OWNER, GROUP, MODE:為設備設定權限。
  4. ENV{key}:導入一個環境變量

udev規則操作符

  1. “==”:比較鍵、值,若等於,則該條件滿足;
  2. “!=”: 比較鍵、值,若不等於,則該條件滿足;
  3. “=”: 對一個鍵賦值;
  4. “+=”:為一個表示多個條目的鍵賦值。
  5. “:=”:對一個鍵賦值,並拒絕之后所有對該鍵的改動。目的是防止后面的規則文件對該鍵賦值。

 

# KERNEL是匹配鍵,NAME和MODE是賦值鍵。

僅當操作符是“==”或者“!=”時,其為匹配鍵;若為其他操作符時,都是賦值鍵。

相關文章:http://www.361way.com/udev-disk-order/3954.html

 

實戰:在應用服務器xuegod64上使用udev規則為每個target創建固定名字的軟鏈接

對iscsi多路徑共享的設備設備,讓內核識別成:my_disk

在進行udev綁定的時候,可以是一個未分區的磁盤,也可以是磁盤的一個分區。

查看共享設備磁盤的UUID:

[root@xuegod62 rules.d]# /usr/lib/udev/scsi_id -g -u /dev/sdb
36001405f4ddd118ad384b69b30433220

或執行:/lib/udev/scsi_id --whitelisted --replace-whitespace  /dev/sdb

[root@xuegod62 rules.d]# vim /etc/udev/rules.d/10-sda.rules  #寫入以下內容

KERNEL=="sdb",SUBSYSTEM=="block",PROGRAM="/usr/lib/udev/scsi_id -g -u /dev/sdb", RESULT=="36001405f4ddd118ad384b69b30433220", SYMLINK+="my-disk1", MODE="0660"

  

注意不能有空格

參數:

# KERNEL是匹配鍵, SUBSYSTEM:設備的子系統名稱,例如:sda 的子系統為block。udevadm info -a -p  /sys/block

# PROGRAM:調用外部命令;

# RESULT: 外部命令 PROGRAM 的返回結果。

# SYMLINK:為/dev/下的設備文件產生符號鏈接。由於udev 只能為某個設備產生一個設備文件,所以為了不覆蓋系統默認的udev 規則所產生的文件,推薦使用符號鏈接。

# MODE:為設備設定權限

通知內核磁盤信息的變化

 [root@xuegod62]# /sbin/partprobe  /dev/sdb 或者 systemctl restart systemd-udev-trigger

# /sbin/partprobe  /dev/sd* 通常使用該命令讓新的規則文件立即生效

# udev 的日志一般沒有標准輸出,所有的udev 相關信息都按照配置文件(udev.conf)的參數設置,由/var/log/messages記錄。

 

查看:

[root@xuegod64 rules.d]# ll /dev/my_disk

lrwxrwxrwx 1 root root 4 1月  24 14:19 /dev/my-disk1 -> sdb

[root@xuegod64 rules.d]# mount  /dev/my_disk  /opt/

 

#如果無法掛載使用,請卸載multipath重啟系統后再測試。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM