Linux环境下多链路负载均衡

1.1----------------------Multipath Routing
  网上关于multipath routing 的文章已经很多了,在此我只想指出应用multipath routing时必须安装以下两个补丁后重新编译内核(至少RH8的ip route 包需要这两个补丁)
  Name:iproute2-2.4.7-now-ss020116-try.tar.gz
  URL:ftp://ftp.inr.ac.ru/ip-routing/
  Function:解决dead link 问题
  Name:equalize_2.4.18.patch
  URL:http://trash.net/~kaber/equalize/
  Function:即使没有这个补丁, ip route 也有equalize参数,但不起作用ping 不通。
  1.2.Multipath routing 的问题。
  同一个ISP的多链路得到的gateway ip 可能是一样的,这种情况下multipath routing不能工作。另外据说multipath routing只能对管理outgoing package
  2.1.---------------------Policy routing .
  原理:
  把客户端的ip随机的分成N组,每一组对应一条链路,分组由服务器端的shell script完成。(本文不涉及拨号软件的安装和配置,请参照其它文章。)
  测试环境:
  RH8。不需要其它的补丁。
  安全问题:
  由于运行改程序的主机,没有默认路由。外部主机根本无法访问,彻底防止黑客攻击。
  缺点:
  不是真正的负载均衡,一个IP地址不可能占用第二个链路的带宽。
  链路冗余:
  当一条链路断掉后可以在/etc/ppp/ip-down.local脚本,把失效的路由转换到另一条线路。
  该脚本中$1为接口名,如ppp0
  ip route add default dev ppp1 table 201
  脚本:
  -------------------------------------------------
  #标识为fwmark 1的ip地址属于table 201地址池。
  ip rule add fwmark 1 table 201
  ip rule add fwmark 2 table 202
  --------------------------------------------------
  #修改/etc/rc.local
  echo " enabling forwarding.."
  echo "1"
  /proc/sys/net/ipv4/ip_forward
  echo " enabling DynamicAddr.."
  echo "1"
  /proc/sys/net/ipv4/ip_dynaddr
  insmod ip_nat_ftp
  insmod ip_nat_irc
  insmod iptable_nat
  insmod ip_conntrack_irc
  insmod ip_conntrack_ftp
  iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
  iptables -t nat -A POSTROUTING -o ppp1 -j MASQUERADE
  #201地址池的客户端分配给ppp0
  ip route add default dev ppp0 table 201
  ip route add default dev ppp1 table 202
  #不要接受ISP的默认网关,否则在此之前删除ISP的默认网关
  ----------------------------------------------------------
  #ip分发主程序,根据实际情况,需改动Linenum即链路的个数,
  #和cat pool1 pool2 pooltmp
  #由telnet客户端启动该程序,使用nohup TheScriptName &,防止程序意外中止.
  #!/bin/bash
  LineNum=2
  ME=$( basename $0 )
  # Evaluate load on diffrent lines ,return the less busy one.
  #
  function EvaLoad ()
  {
  Fwmark=1
  Cnt=1
  Line=$(wc -l pool1 |awk {print $1})
  while [ $Cnt -lt $LineNum ]
  do
  Cnt=$( expr $Cnt + 1 )
  LineN=$(wc -l pool$Cnt |awk {print $1})
  if [ $Line -gt $LineN ]
  then
  Line=$LineN
  Fwmark=$Cnt
  fi
  done
  }
  #Start script
  function DispatcherStart ()
  {
  #Initialize ip address pool automatically
  Cnt=1
  while [ $Cnt -le $LineNum ]
  do
  cat /dev/nullpool$Cnt
  Cnt=$( expr $Cnt + 1 )
  done
  iptables -t mangle -F
  #Contact ARP table to find new clients
  while :
  do
  grep [0-9] /proc/net/arp |awk {print $1} iparp
  cat pool1 pool2 pooltmp
  cat iparp |while read ClientIp
  do
  grep -w "$ClientIp" pooltmp/dev/null
  if [ $? -ne 1 ]
  then
  continue
  fi
  EvaLoad
  iptables -t mangle -A PREROUTING -s $ClientIp/32 -j MARK --set-mark $Fwmark
  echo $ClientIp pool$Fwmark
  done
  sleep 30
  done
  }
  #
  #------------------Main script
  #
  #
  case "$1" in
  start)
  echo -e "Bringing up Dispatcher Program/n"
  echo ""
  DispatcherStart
  ;;
  stop)
  echo -e "Shutting down Dispatcher program/n"
  kill -9 $( ps -ef|grep "$ME" |awk {print $2} )
  if [ $? = 0 ] ; then
  echo success
  else
  echo failure
  fi
  echo ""
  ;;
  restart)
  $0 stop
  $0 start
  ;;
  *)
  echo "Usage: $ME {start&|stop|restart}"
  exit 1
  esac
  exit 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值