使用双网卡绑定以及多路径来防止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 中可见。

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