使用雙網卡綁定以及多路徑來防止SPOF(單點故障)實現高可用

雙網卡綁定

暫時:

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 中可見。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章