A. Linux文件系統-ISCSI存儲和Multipathd
iscsi是由scsi協議發展而來,簡單來講,iscsi是對scsi的封裝,並通過乙太網來進行scsi指令的傳輸. 傳統的scsi存儲設備,通過匯流排連接到主機,供主機使用. 通過iscsi,主機可以直接通過乙太網(TCP/IP)連接使用scsi存儲設備,這也是通常所說的NAS存儲的一種,它提供的是塊級存儲服務.
通過iscsi連接的存儲設備,由於中間經過了交換機等網路設備,從主機到同一個存儲設備,可能會存在多條路徑. 每條路徑在linux系統上都會被識別成一個設備,如果把每條路徑都當成獨立設備去處理的話,不同路徑之間的讀寫操作就可能會造成數據的紊亂.
multipathd可以解決上述的多路徑問題,其主要原理包括:
a. 每一個scsi設備都有唯一的scsi_id,multipathd通過探測scsi_id來判斷不同路徑後面是不是同一個存儲設備.
b. 通過內核device-mapper功能,將多條路徑映射為單一的塊設備,提供給文件系統使用.
c. 由於多路徑的存在,multipathd可以提供負載均衡和高可用的服務.
整個環境通過兩台虛擬機搭建,一台虛擬機作為iscsi存儲伺服器,另一台作為客戶端. 兩台虛擬機都配置了兩張網卡,從客戶端到iscsi伺服器,可以形成兩條路徑.
通過openfiler搭建iscsi存儲伺服器,openfiler鏡像包及部署手冊,具體參考openfiler官網.
https://www.openfiler.com/community/download
部署完成後,創建了2個iscsi target:
需要安裝如下軟體包:
iscsi-initiator-utils:提供iscsid服務,及iscsi管理工具iscsiadm
device-mapper-multipath&device-mapper-multipath-libs:提供multipathd服務及multipath管理工具
通過iscsiadm命令探測openfiler伺服器上的iscsi target,具體如下:
可以看到,openfiler返回了2個target,每個target 2條路徑. 執行命令後,在/var/lib/iscsi/目錄生成了如下文件:
對iscsi target執行login操作後,系統才能識別到設備並使用,login命令如下:
執行login命令後,識別到了sda、sdb、sdc、sdd 4個設備,查看它們的scsi_id;可以看到sda、sdc是同一設備的不同路徑,sdb、sdd是同一設備的不同路徑.
啟動multipathd服務後,multipathd會自動識別多路徑,並自動在/dev/mapper/目錄下創建多路徑映射後的設備.
查看multipathd工作模式,命令multipath -ll
從上面輸出可以看到,multipathd默認的策略是兩條路徑一主一備.
使用dd往/dev/mapper/mpathb中寫入數據,數據從sda寫入,sdc處於備用狀態
將sda網路斷開,過幾秒後,切換到sdc寫數據
再查看sda、sdc主備情況如下:
修改multipathd path_grouping_policy、path_selector(路徑選擇策略),在/etc/multipath.conf配置文件中,加入如下配置修改mpathb的工作模式.
重啟multipathd服務後,查看multipathd工作模式,可以看到sda sdc都處於active狀態:
dd測試mpathb寫入數據時的情況如下,sda sdc輪詢寫入,所以吞吐量一樣: