雙網卡綁定
暫時:
modprobe bonding miimon=100 mode=0
(監聽每100毫秒)(0負載均衡和容錯,1容錯)
ifconfig bond0 172.17.125.50 netmask 255.255.255.0 up
ifenslave bond0 eth0 eth1
cat /proc/net/bonding/bond0
永久:
vim /etc/modprobe.conf
alias bond0 bonding
options bond0 mode=1 miimon=100 use_carrier=0 primary=eth0
primary 指定哪個網卡先用(eth0)
use_carrier 如何判斷鏈路的狀態
miimon 多少毫秒監聽一次鏈路的狀態
創建ifcfg-bond0
DEVICE=bond0
IPADDR=x.x.x.x
NETMASK=255.255.255.0
GETEWAY=x.x.x.x
ONBOOT=yes
BOOTPROTO=static
配置ifcfg-eth0/eth1
DEVICE=eth0/eth1
MASTER=bond0
SLAVE=yes
ONBOOT=yes
BOOTPROTO=static
架設ISCSI
由於多路徑是用在存儲上的,因此需要先架設ISCSI服務來共享出LUN
targets端配置:
安裝scsi-target-utils
yum install -y scsi-target-utils
chkconfig tgtd on
配置示例
<target iqn.2013-3.com.example.com.cluster:iscsi>
backing-store /dev/vol0/iscsi 共享存儲設備路徑
initiator-address x.x.x.x 限制可訪問地址
write cache off 關閉寫入緩存
incominguser username password 設置客戶端認證,密碼需要12位以上
</target>
設置服務端推送認證
vim /etc/rc.local
tgtadm --lld iscsi --op new --mode account --user redhat_in --password redhat123_in
tgtadm --lld iscsi --op bind --mode account --tid 1 --user redhat_in --outgoing
查看共享LUN狀態tgt-admin -s
service tgtd start
initiator端:
安裝iscsi-initiator-utils
yum install -y iscsi-initiator-utils
iscsiadm -m discovery -t [st | sendtargets] -p x.x.x.x 發現設備
iscsiadm -m node [-L all | -T iqn.xxx] 加載全部發現
iscsiadm -m node [-U all | -T iqn.xxx] 卸載全部發現
iscsiadm -m node -o delete [-T iqn.xxx] 刪除所有發現
iscsiadm -m node -S 查看設備狀態
需要對鏈路進行優化,將默認的MTU 1500設置成最大的9000,來提高傳輸速率
配置網卡ifcfg-eth0
加上MTU=9000
注意:在所有鏈路上的交換路由全都要擴大到9000,只要有一個網卡沒有配置則鏈路會按最小MUT來傳輸
關掉Flow control流控制(若流量很大時,會讓對方暫停一會)
ISCSI是TCP協議本來就會重傳,不需要打開流控制,否則反而會出問題
ethtool -a 查看是否打開流控制
ethtool -A eth0 autoneg off rx off tx off 關閉流控制
設置認證用戶名密碼
vim /etc/iscsi/iscsi.conf
打開CHAP認證功能
node.session.auth.authmethod = CHAP
設置客戶端認證的用戶名及密碼
node.session.auth.username = username
node.session.auth.password = password
設置服務器端推送認證的用戶名及密碼
node.session.auth.username_in = username
node.session.auth.password_in = password
多路徑multipath
安裝device-mapper和device-mapper-multipath包
yum install -y device-mapper
yum install -y device-mapper-multipath
加載多路徑和輪尋模塊
modprobe dm_multipath
modprobe dm_round_robin
chkconfig multipathd on
複製示例配置文件
cp /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf /etc/multipath.conf
配置/etc/multipath/multipath.conf
編輯黑名單
默認情況下,multipath會把所有設備都加入到黑名單(devnode "*"),也就是禁止使用。所以,我們首先需要取消該設置,把配置文件修改爲類似下面的內容:
devnode_blacklist {
#devnode "*"
devnode "hda"
wwid 3600508e000000000dc7200032e08af0b
}
這裏禁止使用hda,也就是光驅。另外,還限制使用本地的sda設備,這個wwid,可通過下面的命令獲得:
scsi_id -g -u -s /block/sda(舊)
scsi_id --page=0x83 --whitelisted --device=/dev/sda(新)
3600508e000000000dc7200032e08af0b
編輯默認
defaults {
udev_dir /dev
path_grouping_policy multibus
failback immediate
no_path_retry fail
user_friendly_name yes
}
multibus 多路徑
failover 容錯
service multipathd start
將2條路徑發現並登陸
iscsiadm -n discovery -t st -p x.x.x.x
iscsiadm -n discovery -t st -p x.x.x.x
iscsiadm -n node -L all
multipath -v2 創建多路徑
multipath -ll查看多路徑
multipath -F刪除多路徑
使用設備
用multipath生成映射後,會在/dev目錄下產生多個指向同一條鏈路的設備:
/dev/mapper/mpathn
/dev/mpath/mpathn
/dev/dm-n
但它們的來源是完全不同的:
/dev/mapper/mpathn 是multipath虛擬出來的多路徑設備,我們應該使用這個設備;
/dev/mpath/mpathn 是udev設備管理器創建的,實際上就是指向下面的dm-n設備,僅爲了方便,不能用來掛載;
/dev/dm-n 是軟件內部自身使用的,不能被軟件以外使用,不可掛載。
簡單來說,就是我們應該使用/dev/mapper/下的設備符。對該設備即可用fdisk進行分區,或創建爲pv。
分區並創建LVM
以前,我考慮到從系統iostat看到的都是dm-n的設備,所以一直都是直接對dm-n操作。但這會產生一個問題,就是沒法分區。而對/dev/mapper/mpathn設備操作就沒有這問題。只要要注意,用fdisk分區並保存後,必須刷新multipath的映射表,以便其創建分區對應的設備符,例如:
fdisk -l /dev/mapper/mpath0
Disk /dev/mapper/mpath0: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/mapper/mpath0p1 1 26108 209712478+ 83 Linux
multipath -F
multipath -v2
ll /dev/mapper/mpath0p1
brw-rw---- 1 root disk 253, 2 5月 7 07:40 /dev/mapper/mpath0p1
同樣的,mpathn或其分區都可用來做pv使用:
pvcreate /dev/mapper/mpath0p1
vgcreate test /dev/mapper/mpath0p1
lvcreate -L 1g -n lv1 test
lvdisplay
mkfs.ext3 /dev/test/lv1
※ 注意:
根據網上的資料,有部分multipath版本存在與lvm兼容的問題。具體表現是,使用device-mapper設備創建lvm完成,重啓後,雖然lvm仍存在,但/dev/mapper下的設備丟失。爲了防止可能的意外,建議還是修改一下lvm的配置文件/etc/lvm/lvm.conf,加入:
types=["device-mapper", 1]
其他
最簡單的測試方法,是用dd往磁盤讀寫數據,然後用iostat觀察各通道的流量和狀態,以判斷Failover或負載均衡方式是否正常:
dd if=/dev/zero of=/dev/mapper/mpath0
iostat -k 2
另外,如果是在由多臺服務器構建集羣環境中,爲了讓每臺服務器識別的mpathn設備順序一直,需進行wwid的綁定工作,請參考後面“自定義設備名稱”中的內容。
自定義設備名
默認情況下,multipath會根據multipath.conf.defaults中的定義,生成mpathn的設備名。當然,我們也可以自行定義。不過,更主要的原因是:當我們有多臺服務器以相同的方式連接到存儲時,每臺服務器識別出來的mpathn順序可能不同。爲了組成集羣,我們需要固定每臺機器識別的設備名順序是一致的(綁定wwid)。
修改配置文件,加入:
multipaths {
multipath {
wwid 360060e80058e980000008e9800000007
alias mpath0
}
}
重新刷新multipath映射表後,mpath0就與該wwid設備一一對應起來。除了別名alias外,還可以爲該設備定義其他屬性,請參考multipath.conf上的樣式。把該配置賦值到其他同一集羣的機器上,則每臺機器識別的mpathn設備順序將是一致的。
※ 注意:1、綁定後,需重新生成路徑的映射表;2、當加入該wwid綁定後,沒有綁定的設備將不能使用,用-ll 也無法看到這些設備,但/var/lib/multipath/bindings 中可見。