linux常见得几种负载均衡,Linux下的几种负载均衡技术小结

bond是Linux内核自带的多网卡聚合功能。这个功能可以把多个网卡整合成一个虚拟网卡从而同时利用多块网卡传输数据。bond有多种不同的模式用以适应不同的情况。bond主要是从L2链路层考虑的,因此可以bond的网卡通常要连到同一个交换机上。

2、iproute2(ip命令)中的多路由

可以使用ip命令中的nexthop选项非常简单的实现负载均衡。nexthop可以为同一个目的地址指定多条路由,并可以指定每条路由的权重。之后系统会根据权重为数据选择某条路由。

例如:ip route add default nexthop via $P1 dev $IF1 weight 1 nexthop via $P2 dev $IF2 weight 1

这条命令定义默认路由有ip1:if1和ip2:if2两条路径,且这两条路径的权重相同。

利用ip命令实现上边这样简单的负载均衡是非常方便的,但是ip命令毕竟是一个网络层命令,因此它是无法根据运输层(端口号)进行负载均衡的。

3、iptables+iproute2

提起iptables大多数人都只用过其中的filter表和nat表,而对于mangle表则很少有人使用。然后使用mangle表是可以非常方便地实现灵活负载均衡的。

iptables的mangle表用来修改数据包的一些标识,可以修改的标识有:dscp(区分服务类型)、ToS(服务类型)、mark(标记)。前两者是ip头的QoS相关标志位,主要用于ip层的qos实现,但是目前这两个标志位极少被用到,通常都会被忽略。而第三个(mark)则是由linux内核实现的对数据包的标记。因为是由linux内核实现的,因此这个标记只能在本机使用,并非数据包的一部分,出了本机这个标记就不存在了。

iptables实现负载均衡主要是通过修改mark标记来实现。iproute2可以针对数据包的不同mark定义专门的策略路由表,因此我们可以把去往不同接口的路由写入适用不同mark的策略路由表中,之后linux就可以根据数据包的mark来决定数据包要走的路由了。

例如:

首先,为所有进入本机的目的端口号为25的tcp包打上“1”标记:

iptables -A PREROUTING  -t mangle -p tcp --dport 25 -j MARK --set-mark 1

添加路由规则规定标记为1的数据包使用路由表200

ip rule add fwmark 1 table 200

在200路由表中添加路由

ip route add default via 192.168.1.1 dev ppp0 table 200

同理,为所有进入本机的目的端口号为80的tcp包打上“2”标记

iptables -A PREROUTING  -t mangle -p tcp --dport 80 -j MARK --set-mark 2

添加相关路由,方法同上:

ip rule add fwmark 2 table 200

ip route add default via 192.168.2.1 dev wlan0 table 200

这样子一来以后所有的端口号为25的包都会走192.168.1.1 dev ppp0路由,而所有端口号为80的数据包则会走192.168.2.1 dev wlan0路由,从而实现了针对端口号的负载均衡。同理,也可以利用iptables实现针对源(目的)地址、协议、接口的负载均衡,真的非常的方便。

4、tc

流量控制器TC(Traffic Control)用于Linux内核的流量控制,它利用队列规定建立处理数据包的队列,并定义队列中的数据包被发送的方式, 从而实现对流量的控制。TC命令通过建立筛选器(filter)、分类器(class)、队列(qdisc)这三个对象来实现对流量的控制。具体的讲就是,通过筛选器决定哪些数据包进入到哪些分类的队列中,之后再按照一定的规则将数据包从各个分类的队列中发送出去。尽管tc的主要功能在于流量控制,但是我们可以通过把一个队列建立在多个网卡上来实现流量的负载均衡。

例如:

在eth1上建立一个队列:

tc qdisc add dev eth1 root teql0

在eth2上建立同样的队列

tc qdisc add dev eth2 root teql0

启动设备teql0

ip link set dev teql0 up

通过这三条命令,所有发往teql0的流量都会在eth1和eth2之间进行负载均衡发送。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值