ISCSI多路徑配置(二)


搭建iscsi存儲系統(一)

(1).配置ISCSI多路徑實現磁盤掛載高可用

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

 1)實驗環境

youxi1  192.168.5.101,1.1.5.129  服務端

youxi2  192.168.5.102,1.1.5.130  客戶端

 2)搭建target服務器

[root@youxi1 ~]# yum -y install targetcli
[root@youxi1 ~]# targetcli  //進入交互配置
Warning: Could not load preferences file /root/.targetcli/prefs.bin.
targetcli shell version 2.1.fb46
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.

/> /backstores/block create test1 /dev/sdb  //使用/dev/sdb創建自定義存儲對象test1
Created block storage object test1 using /dev/sdb.
/> /iscsi create iqn.2019-08.com.youxi1:server  //創建ISCSI target
Created target iqn.2019-08.com.youxi1:server.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
/> /iscsi/iqn.2019-08.com.youxi1:server/tpg1/acls create iqn.2019-08.com.youxi1:username  //創建ACL規則列表名
Created Node ACL for iqn.2019-08.com.youxi1:username
/> /iscsi/iqn.2019-08.com.youxi1:server/tpg1/luns create /backstores/block/test1  //指定存儲對象為target的邏輯單元,邏輯單元號為LUN0
Created LUN 0.
Created LUN 0->0 mapping in node ACL iqn.2019-08.com.youxi1:username
/> /iscsi/iqn.2019-08.com.youxi1:server/tpg1/portals/ delete 0.0.0.0 3260  //刪除原有監聽IP和端口
Deleted network portal 0.0.0.0:3260
/> /iscsi/iqn.2019-08.com.youxi1:server/tpg1/portals/ create 192.168.5.101 3260  //重新指定監聽IP和端口
Using default IP port 3260
Created network portal 192.168.5.101:3260.
/> /iscsi/iqn.2019-08.com.youxi1:server/tpg1/portals/ create 1.1.5.129 3260     
Using default IP port 3260
Created network portal 1.1.5.129:3260.
/> saveconfig  //保存
Configuration saved to /etc/target/saveconfig.json
/> exit  //退出
Global pref auto_save_on_exit=true
Last 10 configs saved in /etc/target/backup/.
Configuration saved to /etc/target/saveconfig.json
[root@youxi1 ~]# systemctl start target && systemctl enable target  //啟動並開機自啟
Created symlink from /etc/systemd/system/multi-user.target.wants/target.service to /usr/lib/systemd/system/target.service.
[root@youxi1 ~]# yum -y install net-tools
[root@youxi1 ~]# ss -antup | grep 3260
tcp    LISTEN     0      256    192.168.5.101:3260                  *:*                  
tcp    LISTEN     0      256    1.1.5.129:3260                  *:*  
[root@youxi1 ~]# firewall-cmd --permanent --zone=public --add-port=3260/tcp  //防火牆添加端口號
success
[root@youxi1 ~]# firewall-cmd --reload
success

 3)搭建客戶端youxi2

[root@youxi2 ~]# yum -y install iscsi-initiator-utils  //安裝客戶端
[root@youxi2 ~]# vim /etc/iscsi/initiatorname.iscsi  //配置ACL規則列表名稱
InitiatorName=iqn.2019-08.com.youxi1:username
[root@youxi2 ~]# systemctl start iscsid && systemctl enable iscsid  //啟動並設置開機自啟
Created symlink from /etc/systemd/system/multi-user.target.wants/iscsid.service to /usr/lib/systemd/system/iscsid.service.
[root@youxi2 ~]# iscsiadm -m discovery -t st -p 192.168.5.101  //查找ISCSI設備
1.1.5.129:3260,1 iqn.2019-08.com.youxi1:server
192.168.5.101:3260,1 iqn.2019-08.com.youxi1:server
[root@youxi2 ~]# iscsiadm -m node --login  //登錄/連接ISCSI設備
Logging in to [iface: default, target: iqn.2019-08.com.youxi1:server, portal: 1.1.5.129,3260] (multiple)
Logging in to [iface: default, target: iqn.2019-08.com.youxi1:server, portal: 192.168.5.101,3260] (multiple)
Login to [iface: default, target: iqn.2019-08.com.youxi1:server, portal: 1.1.5.129,3260] successful.
Login to [iface: default, target: iqn.2019-08.com.youxi1:server, portal: 192.168.5.101,3260] successful.
[root@youxi2 ~]# ls /dev/sd*  //可以看到出現了sdb和sdc,這兩個是同一個硬盤
/dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdc
[root@youxi2 ~]# mkfs.xfs /dev/sdb -f  //格式化,只有第一次才需要,如果者服務器端或其他客戶端已經格式化,無需操作
meta-data=/dev/sdb               isize=512    agcount=4, agsize=1310720 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5242880, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@youxi2 ~]# mkdir /share  //創建掛載目錄
[root@youxi2 ~]# mount /dev/sdb /share/  //掛載
[root@youxi2 ~]# echo aabbcc > /share/a.txt
[root@youxi2 ~]# mkdir /share2
[root@youxi2 ~]# mount /dev/sdc /share2  //這是由於sdb和sdc是同一塊盤,它們的UUID是相同的,不能重復掛載
mount: 文件系統類型錯誤、選項錯誤、/dev/sdc 上有壞超級塊、
       缺少代碼頁或助手程序,或其他錯誤

       有些情況下在 syslog 中可以找到一些有用信息- 請嘗試
       dmesg | tail  這樣的命令看看。
[root@youxi2 ~]# blkid /dev/sdb /dev/sdc  //查看UUID
/dev/sdb: UUID="580a45fc-0957-45ee-bcbd-13ce85e11e59" TYPE="xfs" 
/dev/sdc: UUID="580a45fc-0957-45ee-bcbd-13ce85e11e59" TYPE="xfs"

[root@youxi2 ~]# mount -t xfs -o nouuid /dev/sdc /share2  //跳過UUID進行掛載
[root@youxi2 ~]# df -h
文件系統              容量  已用  可用 已用% 掛載點
/dev/mapper/vg1-root   17G  1.2G   16G    8% /
devtmpfs              476M     0  476M    0% /dev
tmpfs                 488M     0  488M    0% /dev/shm
tmpfs                 488M  7.7M  480M    2% /run
tmpfs                 488M     0  488M    0% /sys/fs/cgroup
/dev/sda1            1014M  130M  885M   13% /boot
tmpfs                  98M     0   98M    0% /run/user/0
/dev/sdb               20G   33M   20G    1% /share
/dev/sdc               20G   33M   20G    1% /share2

 4)查看連接結構

[root@youxi2 ~]# yum -y install tree
[root@youxi2 ~]# tree /var/lib/iscsi/
/var/lib/iscsi/
├── ifaces
├── isns
├── nodes
│   └── iqn.2019-08.com.youxi1:server
│       ├── 1.1.5.129,3260,1
│       │   └── default
│       └── 192.168.5.101,3260,1
│           └── default
├── send_targets
│   └── 192.168.5.101,3260
│       ├── iqn.2019-08.com.youxi1:server,1.1.5.129,3260,1,default -> /var/lib/iscsi/nodes/iqn.2019-08.com.youxi1:server/1.1.5.129,3260,1
│       ├── iqn.2019-08.com.youxi1:server,192.168.5.101,3260,1,default -> /var/lib/iscsi/nodes/iqn.2019-08.com.youxi1:server/192.168.5.101,3260,1
│       └── st_config
├── slp
└── static

12 directories, 3 files

 5)回到服務器端查看連接狀態

[root@youxi1 ~]# ss -antup | grep 3260                                     
tcp    LISTEN     0      256    192.168.5.101:3260                  *:*                  
tcp    LISTEN     0      256    1.1.5.129:3260                  *:*                  
tcp    ESTAB      0      0      1.1.5.129:3260               1.1.5.130:55902              
tcp    ESTAB      0      0      192.168.5.101:3260               192.168.5.102:40218

(2).在存儲客戶端上配置多路徑設備

  在以上基礎下繼續實驗,將同一設備的多路徑整合,只呈現出一個設備形式,通過使用。

 1)多路徑軟件Device Mapper Multipath

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

  特點:

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

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

 2)客戶端安裝多路徑軟件服務

[root@youxi2 ~]# yum -y install device-mapper-multipath
[root@youxi2 ~]# cp /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf /etc/
[root@youxi2 ~]# systemctl start multipathd.service  //注意,一定要把配置文件拷貝到/etc/目錄下,否則會報找不到配置文件
[root@youxi2 ~]# multipath -ll  //沒有輸出信息表示出錯
[root@youxi2 ~]# umount /share  //卸載掛載點
[root@youxi2 ~]# umount /share2
[root@youxi2 ~]# systemctl restart iscsid  //重啟iscsid服務
[root@youxi2 ~]# systemctl restart multipathd.service  //重啟multipathd服務
[root@youxi2 ~]# multipath -ll  //再次查看
//36001405179b62d3082e4604ae5326cd6遠程存儲設備id,dm-2 LIO-ORG廠商,test1產品ID(我們自己設置的)
mpatha (36001405179b62d3082e4604ae5326cd6) dm-2 LIO-ORG ,test1           
size=20G features='0' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=1 status=active  //默認使用主動模式的鏈路
| `- 33:0:0:0 sdb 8:16 active ready running
`-+- policy='service-time 0' prio=1 status=enabled  //有效的鏈路,但不是活動鏈路
  `- 34:0:0:0 sdc 8:32 active ready running
[root@youxi2 ~]# ll /dev/mapper/mpatha  //查看生成的設備文件
lrwxrwxrwx 1 root root 7 8月 23 13:55 /dev/mapper/mpatha -> ../dm-2

  每個多路徑設備都具備一個全局標識(WWID,World Wide Identifir)。36001405179b62d3082e4604ae5326cd6就是WWID,遠程存儲設備的產品信息。由於sdb和sdc是同一個遠端存儲設備,所以產品信息一致,被多路徑驅動發現后會生成一個設備文件/dev/mapper/mpatha。

 3)啟動高可用負載均衡模式

[root@youxi2 ~]# vim /etc/multipath.conf
//可以再第74行下面添加,也可以從第60行開始啟用
multipaths {
        multipath {
                wwid                    36001405179b62d3082e4604ae5326cd6  //指定實際的WWID
                alias                   Web  //映射后的別名,自定義
                path_grouping_policy    multibus  //路徑組策略
                path_selector           "round-robin 0"  //輪詢
                failback                manual
                rr_weight               priorities
                no_path_retry           5
        }       
}
[root@youxi2 ~]# systemctl restart multipathd.service  //重啟multipathd服務
[root@youxi2 ~]# systemctl restart iscsid  //重啟iscsi,重新識別
[root@youxi2 ~]# multipath -ll  //再次查看
Web (36001405179b62d3082e4604ae5326cd6) dm-2 LIO-ORG ,test1           
size=20G features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active  //可以看到采用輪詢,並且兩個都是running
  |- 33:0:0:0 sdb 8:16 active ready running
  `- 34:0:0:0 sdc 8:32 active ready running
[root@youxi2 ~]# ll /dev/mapper/Web  //可以看到自定義的映射別名
lrwxrwxrwx 1 root root 7 8月  23 15:35 /dev/mapper/Web -> ../dm-2
[root@youxi2 ~]# mount /dev/mapper/Web /share  //掛載可用
[root@youxi2 ~]# ls /share
a.txt

 4)模擬故障

  關閉服務器端的ens33(192.168.5.101)網卡

[root@youxi1 ~]# ifdown ens33

  過一段時間查看,並進行測試

[root@youxi2 ~]# multipath -ll
Web (36001405179b62d3082e4604ae5326cd6) dm-2 LIO-ORG ,test1           
size=20G features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
  |- 33:0:0:0 sdb 8:16 active ready running
  `- 34:0:0:0 sdc 8:32 failed faulty running  //可以看到sdcfailed
[root@youxi2 ~]# echo bbb > /share/b.txt
[root@youxi2 ~]# ls /share
a.txt b.txt

  打開服務器端的ens33(192.168.5.101)網卡,可以發現sdc又恢復了正常

[root@youxi2 ~]# multipath -ll
Web (36001405179b62d3082e4604ae5326cd6) dm-2 LIO-ORG ,test1           
size=20G features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
  |- 33:0:0:0 sdb 8:16 active ready running
  `- 34:0:0:0 sdc 8:32 active ready running

(3).使用udev規則為每個target創建固定名字的軟鏈接(了解)

 1)udev

  udev是Linux kernel 2.6系列的設備管理器。它主要的功能是管理/dev目錄底下的設備節點。udev會根據用戶添加/刪除硬件的行為,自處理/dev目錄下所有設備文件。主要配置文件為/etc/udev/udev.conf。設備文件名字規則目錄/lib/udev/rules.d/。

[root@youxi2 ~]# ls /lib/udev/rules.d/  //命名規則開頭數字,結尾.rules
10-dm.rules                       70-touchpad.rules
11-dm-lvm.rules                   70-uaccess.rules
11-dm-mpath.rules                 71-biosdevname.rules
13-dm-disk.rules                  71-seat.rules
40-redhat.rules                   73-idrac.rules
......

  運行機制和注意事項:

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

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

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

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

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

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}: 環境變量。在一條規則中,可以設定最多五條環境變量的 匹配鍵。

    1.PROGRAM:調用外部命令。

    2.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.“:=”:對一個鍵賦值,並拒絕之后所有對該鍵的改動。目的是防止后面的規則文件對該鍵賦值。

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

 2)在客戶端上定義udev規則

  查看共享磁盤的UUID

[root@youxi2 ~]# /usr/lib/udev/scsi_id -g -u /dev/sdb
36001405179b62d3082e4604ae5326cd6

  添加一個新的udev規則

[root@youxi2 ~]# vim /etc/udev/rules.d/10-sda.rules  //底下規則不能轉行,這里轉行是為了方便查看
KERNEL=="sdb",SUBSYSTEM=="block",PROGRAM="/usr/lib/udev/scsi_id -g -u /dev/sdb",
RESULT=="36001405179b62d3082e4604ae5326cd6",SYMLINK+="my-disk",MODE="0660"

  說明:

    KERNEL:匹配內核設備名稱;

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

    PROGRAM:調用外部命令;

    RESULT: 匹配外部命令PROGRAM的返回結果;

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

    MODE:設置設備的權限

  告知內核,磁盤信息發生了變化,既可以查看

[root@youxi2 ~]# /sbin/partprobe /dev/sdb  //命令二選一即可
[root@youxi2 ~]# systemctl restart systemd-udev-trigger
[root@youxi2 ~]# ll /dev/my-disk  //查看my-disk
lrwxrwxrwx 1 root root 3 8月 23 17:04 /dev/my-disk -> sdb

  使用方法

[root@youxi2 ~]# umount /share
[root@youxi2 ~]# mount /dev/my-disk /share  //這是因為多路徑軟件正在使用
mount: /dev/sdb 已經掛載或 /share 忙
[root@youxi2 ~]# systemctl stop multipathd && systemctl disable multipathd
Removed symlink /etc/systemd/system/sysinit.target.wants/multipathd.service.
[root@youxi2 ~]# init 6  //重啟
[root@youxi2 ~]# iscsiadm -m discovery -t st -p 192.168.5.101  //重新發現iscsi設備
1.1.5.129:3260,1 iqn.2019-08.com.youxi1:server
192.168.5.101:3260,1 iqn.2019-08.com.youxi1:server
[root@youxi2 ~]# iscsiadm -m node --login  //重新登錄iscsi設備
Logging in to [iface: default, target: iqn.2019-08.com.youxi1:server, portal: 1.1.5.129,3260] (multiple)
Logging in to [iface: default, target: iqn.2019-08.com.youxi1:server, portal: 192.168.5.101,3260] (multiple)
Login to [iface: default, target: iqn.2019-08.com.youxi1:server, portal: 1.1.5.129,3260] successful.
Login to [iface: default, target: iqn.2019-08.com.youxi1:server, portal: 192.168.5.101,3260] successful.
[root@youxi2 ~]# mount /dev/my-disk /share
[root@youxi2 ~]# ls /share
a.txt b.txt

  說明:multipathd本身就可以給存儲設備起一個名字了,有了multipathd就不需要udev來起名字了。所以兩者是沖突的,只能同時使用一種方法給存儲設備命名。所以一般情況,我們直接使用iscsi存儲+多路徑就可以了。


免責聲明!

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



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