Linux利用iptables实现负载均衡loadbalance

1. iptables实现负载均衡的方式:

在Linux中使用iptables完成tcp的负载均衡有两种模式:随机、轮询

The statistic module support two different modes:

  • random:(随机)
    the rule is skipped based on a probability
  • nth:(轮询)
    the rule is skipped based on a round robin algorithm

2. example

下面以一个栗子说明iptables两种LB方式的具体实现:

系统中提供3个servers,下面我们通过配置iptables使流量均衡访问这3台server。

2.1 随机:(Random balancing)

iptables -A PREROUTING -t nat -p tcp -d 192.168.1.1 --dport 27017 -m statistic --mode random --probability 0.33  -j DNAT --to-destination 10.0.0.2:1234
iptables -A PREROUTING -t nat -p tcp -d 192.168.1.1 --dport 27017 -m statistic --mode random --probability 0.5 -j DNAT --to-destination 10.0.0.3:1234
iptables -A PREROUTING -t nat -p tcp -d 192.168.1.1 --dport 27017  -j DNAT --to-destination 10.0.0.4:1234

rules说明:

第一条规则中,指定--probability 0.33 ,则说明该规则有33%的概率会命中,

第二条规则也有33%的概率命中,因为规则中指定 --probability 0.5。 则命中的概率为:50% * (1 - 33%)=0.33

第三条规则中,没有指定 --probability 参数,因此意味着当匹配走到第三条规则时,则一定命中,此时走到第三条规则的概率为:1 - 0.33 -0.33 ≈ 0.33。

由上可见,三条规则命中的几率一样的。此外,如果我们想修改三条规则的命中率,可以通过 --probability 参数调整。

假设有n个server,则可以设定n条rule将流量均分到n个server上,其中 --probability 参数的值可通过以下公式计算得到:

# 其中 i 代表规则的序号(第一条规则的序号为1)
# n 代表规则/server的总数
# p 代表第 i 条规则中 --probability 的参数值
 p=1/(n−i+1)

注意:因为iptables中,规则是按顺序匹配的,由上至下依次匹配,因此设计iptables规则时,要严格对规则进行排序。因此上述三条规则的顺序也不可以调换,不然就无法实现LB均分了。

2.2 轮询 (Round Robin)

轮询算法中有两个参数:

     n: 指每 n 个包

     p:指第 p 个包

在规则中 n 和 p 代表着: 从第 p 个包开始,每 n 个包执行该规则。

这样可能有点绕口,直接看栗子吧:

还是上面的例子,有3个server,3个server轮询处理流量包,则规则配置如下:

# every:每n个包匹配一次规则
# packet:从第p个包开始

iptables -A PREROUTING -t nat -p tcp -d 192.168.1.1 --dport 27017 -m statistic --mode nth --every 3 --packet 0 -j DNAT --to-destination 10.0.0.2:1234
iptables -A PREROUTING -t nat -p tcp -d 192.168.1.1 --dport 27017 -m statistic --mode nth --every 2 --packet 0  -j DNAT --to-destination 10.0.0.3:1234
iptables -A PREROUTING -t nat -p tcp -d 192.168.1.1 --dport 27017 -j DNAT --to-destination 10.0.0.4:1234

REF:

https://scalingo.com/articles/2018/04/20/iptables.html

  

  

猜你喜欢

转载自blog.csdn.net/ksj367043706/article/details/89764546
今日推荐