(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存儲+多路徑就可以了。