13 August 2015

這篇要講Linux Multipath,
為了使用Linux Multipath,所以用了multipath-tool這個package,
multipath-tool提供了二個功能,
   1. input/output fail-over
   2. load balancing for block device


1. Prerequisite

開始之前先,準備下面所需要的環境,
1. 1台server上有2張網卡(eth0, eth1)
2. iSCSI target x1
理論上,server上的2張網卡應接在不同的swtich上,抑或在不同的網段上。
目的在於某一條線路斷時,才不會影響另外一條。
但為了測試可以先都放在同個網段上。

假設,
eth0 IP為172.16.131.134
eth1 IP為172.16.131.135
iSCSI IP為172.16.131.138

整體的網路架構可以參考此張圖,
2. Installation

接著安裝我們需要的package,
apt-get install open-iscsi
apt-get install multipath-tools

3. multipath configuration

接著來設定multipah,先create一個config file,(你也可以從/usr/share/doc/multipath-tools/examples/multipath.conf.synthetic這裏複製至/etc/multipah.conf底下)
$ vim /etc/multipath.conf

內容如下,參數的說明可以看這(點我
defaults {
user_friendly_names yes
}

devices {
device {
polling_interval 5
path_selector "round-robin 0"
path_grouping_policy group_by_prio
prio rdac
path_checker rdac
hardware_handler "1 rdac"
failback immediate
features "2 pg_init_retires 50"
no_path_retry 30
rr_min_io 100
}
}

4. iSCSI configuration

接著我們要設定iSCSI,讓我們在login某target時,
可以透過不同的NIC同時進行login,
$ iscsiadm -m iface -I eth0 -o new
$ iscsiadm -m iface -I eth1 -o new
$ iscsiadm -m iface -I eth0 --op=update -n iface.net_ifacename -v eth0
$ iscsiadm -m iface -I eth1 --op=update -n iface.net_ifacename -v eth1

接著要把reverse path filtering關掉,
否則其中一張網卡登入target時的packet會被ignore,
所以要去編輯/etc/sysctl.conf,
加入下面兩行。
net.ipv4.conf.eth0.rp_filter=2
net.ipv4.conf.eth1.rp_filter=2

然後執行下面指令讓conf生效。
$ sysctl -p

5. Login iSCSI

首先先discovery該iSCSI,看該iSCSI上有哪些target,
可以發現一模一樣的target卻顯示了2筆,這是因為剛剛前面我們設定了2張nic了!
$ iscsiadm -m discovery -t st -p 172.16.131.138:3260
172.16.131.138:3260,1 iqn.2015-07.net.kenyang:ken.iscsi
172.16.131.138:3260,1 iqn.2015-07.net.kenyang:ken.iscsi

接著login該target,會發現login了二次,且這二次分別是透過eth0以及eth1去完成。
$ iscsiadm -m node -T iqn.2015-07.net.kenyang:ken.iscsi --login

Logging in to [iface: eth0, target: iqn.2015-07.net.kenyang:ken.iscsi, portal: 172.16.131.138,3260]
Logging in to [iface: eth1, target: iqn.2015-07.net.kenyang:ken.iscsi, portal: 172.16.131.138,3260]
Login to [iface: eth0, target: iqn.2015-07.net.kenyang:ken.iscsi, portal: 172.16.131.138,3260]: successful
Login to [iface: eth1, target: iqn.2015-07.net.kenyang:ken.iscsi, portal: 172.16.131.138,3260]: successful

顯示multipath的topology,
會發現有2個blcok device,
因為我們登入了2次,所以該target在我們server上被視為2個block device,分別為sdb, sdc。
然後再透過device mapper的概念去把它aggregate成一個/dev/mapper/mpath1。
$ multipath -ll

mpath1 (xxxxxxxxxxxxxxxxxxx) dm-6 EQLOGIC,100E-00
size=60G features='0' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
|- 7:0:0:0 sdb 8:16 active ready running
`- 8:0:0:0 sdc 8:32 active ready running

6. Format block device

最後一步就要把該block device mount起來使用,
但mount之前要先fdisk以及mkfs,要注意我們的對象不是sdb,sdc,
而是mpatch1。
fdisk /dev/mapper/mpath1
mkfs.ext4 /dev/mapper/mpath1

完成以後就可以mount起來使用看看。
mount /dev/mapper/mpath1 /storage/




blog comments powered by Disqus