欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

使用双网卡绑定以及多路径来防止SPOF(单点故障)实现高可用

程序员文章站 2022-03-29 15:55:08
使用双网卡绑定以及多路径来防止SPOF(单点故障)实现高可用   双网卡绑定 暂时: modprobe bonding miimon=100 mode=0   &...

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