RouterOS 负载均衡

来自深圳捷联讯通科技有限公司
跳转至: 导航搜索
对于 RouterOS 的负载均衡我总结了以下类型,并总结了他们的特点
♠ ECMP - Equal Cost Multi-Path Routing(等价多路径) 对IP地址负载均衡,每隔10分钟路由列表会自动更新,仅用于路由交换网络,不宜用于nat多线路会造成当前连接中断。
♠ Nth 负载均衡 – Nth负载均衡是早期较稳定的负载均衡,通过对连接进行分组,定义每连接数进行负载均衡,Nth我们将在后面单独讲解,因为还涉及到其他一些功能。
♠ 混合自定义模式 – 这种解决方法基于多种模式,例如通过调整路由、配置策略路由和定义脚本达到负载均衡的目的,但配置较复杂,不易快速部署和扩展。
♠ PCC 负载均衡 - Per Connection Classifier,PCC是最新的负载均衡功能,其简单、有效、易扩展,且没有严重的副作用,通过PCC可以更好的实现路由权重调配。


PCC 是 RouterOS 最新,最主要的负载均衡策略:
♠ 使用哈希算法先对基于源地址/端口、目标地址/端口或不同组合的分类;
♠ 再使用 mangle 分类数据包和路由标记;
♠ 通过定义新的路由表指定分类的数据走相应的网关出口。
这里我们要知道 packet 数据包是将数据封装在内,connections 用于连接运输数据包,如同数据包是火车的每节车厢,connections 则是铁轨,Connections
可以选择不同的连接方式(TCP/UDP)到达目的地。
注:关于 Nth 负载均衡在后面的章节会单独介绍。

PCC 负载均衡[编辑]

根据官方在 wiki 页面解释“PCC 从一个 IP 数据包头选取字段,并将这些字段转换为 32-bit 值用于哈希算法。假如一个数据包头获取指定的字段,给转换后取
得的值指定一个分母,并计算得到一个余数,然后会去与一个指定的余数对比,如果相等该数据包会被命中。数据包头可以选择的字段如 src-address, dst-address,
src-port,dst-port 等”下面是 RouterOS 完整的可用字段:
♠ both-addresses
♠ both-ports
♠ dst-address-and-port
♠ src-address|src-port
♠ both-addresses-and-ports
♠ dst-address|dst-port
♠ src-address-and-port
这里需要理解一些 PCC 的相关条款
IP 数据包的包头包含了许多字段,其中有两个字段分别是 IP 的源和目标地址,TCP 和 UDP 数据包,在 TCP 和UDP 包头中包含有源端口和目标端口。
首先 PCC 应用会将指定的字段发送给哈希函数,例如提供 IP 地址和端口,将 IP 地址和端口的每位作为十进制,取其整数,例如源 IP 地址是 1.1.1.1,源 TCP
端口是 10000,目标 IP 地址是 2.2.2.2 和目标端口 80,当我们将这些数字相加 1+1+1+1+10000+2+2+2+2+80 = 10092,根据官方的所诉,10092 最后一位数字是2,因
此哈希输出为 2,这组 IP 和端口组合的哈希值每次输出都是 2。这里最重要的是相同 IP 端口组合的哈希结果是一样的,我们利用该属性来作为 PCC 负载均衡算法的基础。
当哈希值取得后,我们举例下面的一个实例,下面有三条常用的 PCC 规则:
6-43.png
我们依次看看三条规则
♠ 第一条规则表示:哈希函数的输出值是取源 IP 地址和端口(src-address-and-port),得到的哈希值除以3,余数为 0,执行的操作标记为 1st_conn。
♠ 第二条同理,哈希值除以 3 ,余数为 1,并标记为 2nd_conn,
♠ 第三条规则,哈希值除以 3,余数为 2,执行标记为 3rd_conn
以上是三条规则可以理解为 RouterOS 有 3 条线路,我们对这 3 条线路做 PCC 负载均衡的连接标记
上面是最经典的取余算法,这种算法是任给一个整数 A,将自然数 1,2,3,4,…依次除以 A,所得的余数总是循环出现,呈周期性变化, 所以,我们可以取关键字
被某个不大于散列表表长 m 的数 p 除后所得的余数为散列地址。即我们通常所说的两个数相除得到的余数。通常我们使用%来表示取余算法,例如
♠ 3%3=0,3 除以 3 余数为 0,3 能被 3 整除。
♠ 4%3=1,4 除以 3 余数为 1,4 不能被 3 整除,余 1。
♠ 2%3=2,2 除以 3 余数为 2,2 不能被 3 整除,余数 2
♠ 6%3=0,6 除以 3 余数为 0,6 能被 3 整除。
PCC 虽然能用于负载均衡,但 PCC 自身是无法直接用于路由,或 routing marks,PCC 仅仅只能用于数据包匹配,不能直接用于数据包标记。
注: PCC 从 RouterOS v3.24 开始支持,这个功能解决了多网关的负载均衡问题。

PCC 的负载均衡事例

一、 双向地址负载均衡
通分组源地址和源端口实现负载平衡,这里我们建立 2 个 WAN 出口分别是 wan1 和 wan2,网络环境如下:
6-44.png
♠ ISP1 地址 10.200.15.99/24,网关:10.200.15.1;
♠ ISP2 地址 10.200.100.99/24,网关:10.200.100.2;
♠ 内网 IP 地址 192.168.100.1/24;
♠ 启用 DNS 缓存功能,用 192.168.100.1 作内网 DNS 解析;

基本配置

首先进入 ip address 配置 IP 地址:
6-45.png
在 ip dns setting 中配置好 DNS 缓存,DNS 为:61.139.2.69
6-46.png

Mangle 标记配置

接下来我们进入 ip firewall mangle 标记连接和路由,我们使用 per-connection-classifier 双向地址进行分类做连接分类标记。
首先我们需要将进入路由的的连接进行标记
如下图,我们进入一条 mangle 规则,中的 advanced 标签内容可以看到 per-connection-classifier 分类器,选择 both-addresses 的分类:
6-47.png
然后选择 dst-address-type=!local,即除了目标地址类型排除本地地址:
6-48.png
注 :2条线的分类代码定义是第一条线为 2/0,第二条为 2/1
6-49.png
同样选择一下地址类型:
6-50.png
下面命令是提取走第一条线路的连接标记取名为 1st_conn,并从连接里提取路由标记名位 1st_route,设置:
per-connection-classifier=both-addresses:2/0, 设置 in-interface=lan
6-51.png
提取走第二条线路的连接标记取名为 2nd_conn,并从连接里提取路由标记名位 2nd_route,设置:
per-connection-classifier=both-addresses:2/1,设置 in-interface=lan:
6-52.png
在 winbox 的 mangle 中设置完成后如下:
6-53.png
回程路由设置
定义数据包从那个接口进入,就按原路从那个接口回去,即保证每个外网口的数据能得到正确的路由。
6-55.png
winbox 设置
6-56.png

路由配置

配置完标记路由后,我们进入 ip route 配置路由,首先设置负载均衡的标记路由,首先设置第一条线路的路由标记,设置 routing-mark=1st_route:
6-57.png
设置第二条线路的路由标记,设置 routing-mark=2nd_route:
6-58.png
配置默认网关和备份网关,默认网关的 distance 设置为 1,并设置 check-gateway=ping,通过 ping 监测网关状态:
6-59.png
备份网关的 distance 设置为 2,并设置 check-gateway=ping,通过 ping 监测网关状态:
6-60.png
配置完成后的路由标如下图:
6-61.png

配置 nat

最后配置 nat 转换规则,进入 ip firewall nat 中配置 action=masquerade,分别对 2 条线路做伪装:
6-62.png

六线的 PCC 负载均衡[编辑]

在许多网络中会出现相同运营商,相同带宽多线路的接入,比如下面是一个 6 条线路的接入,我们通过 PCC 解决带宽的均衡,通过分类源地址和目标地址
的负载均衡,即双向地址(both addresses),设置于之前的操作基本相同,只是变成了 6 组规则
下面是 6 条 ADSL 的情况,mangle 标记的 prerouting 规则:
6-63.png
进入 ip route 设置路由,这个是 PPPoE 拨号上网的策略路由配置:
6-64.png

PCC 实现比例权重路由[编辑]

假设网络有这样一个需求,同时拥有两条相同运营商的出口,一条 8M,一条是 25M,想做策略将两条线路实现权重的路由策略,我们可以通过 PCC 来实现。
平常我们都是用 PCC 做多条相同带宽出口的负载均衡,而这次我则是通过他的分类原理实现比例权重的路由策略,当然 Nth 也可以实现,但 Nth 不如 PCC 稳定好用。
6-65.png
实现原理比较简单,一条 8M,一条是 25M,后者大约是前者的 3 倍出口,所以约等于 1:3(8/33 : 25/33),那就是要按照 1:3 的比例分配路由,我的策
略是将 PCC 策略看成 4 份,然后路由指定按照 1:3 的路由规则分配。
配置 PCC 规则,即把 2 条出口,看成 4 份数据进行 PCC 的策略配置,即我们在 mangle 中配置 4 组 PCC 的标记规则,和配置 4 条负载均衡的规则一样
这里仅通过 CLI 命令讲解。
6-66.png

路由配置

其实权重的分配关键就在路由设置上,这里我们把网关命名为 8M 和 25M 以示区分。将分配好的路由标记按照1:3 的比例分配到各条线路上
6-67.png

nat 配置

配置 nat 规则类似的操作
6-68.png
配置完成后流量几乎按照预想的方式运行 ,这样的操作建议使用到相同类型的出口,比如不同带宽的线路都是Tel,或者都是 Un。不建议在不同运营商出口上
采用这样的规则,避免延迟和 dns 解析等问题。
作者:余松

上一页 下一页