使用双网卡绑定以及多路径来防止SPOF(单点故障)实现高可用
使用双网卡绑定以及多路径来防止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 中可见。
上一篇: asp实现批量录入数据的实现