рдЗрдВрдЯрд░рдиреЗрдЯ рдЪреИрдирд▓реЛрдВ рдХреЗ рд╕рдВрдпреБрдХреНрдд рд▓реЛрдб рд╕рдВрддреБрд▓рди

рдкреНрд░рд╛рдЧрд┐рддрд┐рд╣рд╛рд╕



рдЬрд▓реНрджреА рдпрд╛ рдмрд╛рдж рдореЗрдВ, рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╢рд╛рд╕рдХ рдХреЛ рдХрдИ рдЪреИрдирд▓реЛрдВ рдкрд░ рдпрд╛рддрд╛рдпрд╛рдд рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЪреИрдирд▓ рдХреЛ рдЕрдзрд┐рдХрддрдо рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реЛрддреА рд╣реИред рдПрдХ рд╕рдорд╛рди рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛, рдФрд░ рдкрд╣рд┐рдпрд╛ рдХреЛ рд╕реБрджреГрдврд╝ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реБрдП, рдЙрд╕рдиреЗ рдЦреЛрдЬ рдЗрдВрдЬрдиреЛрдВ рдХреА рдорджрдж рдХреАред рдЪреВрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЙрдмрдВрдЯреВ рдкрд░ рдПрдХ рд╕рд░реНрд╡рд░ рд╣реИ, рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдзреНрдпрд╛рди рд▓реЗрдЦ http://help.ubuntu.ru/wiki/ip_balancing рдкрд░ рджрд┐рдпрд╛ ред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд "рд╡рд┐рдзрд┐ 1", рд▓реЗрдХрд┐рди рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдорд╕реНрдпрд╛рдПрдВ рджреЗрдЦреА рдЧрдИрдВ: рдХреБрдЫ рд╕рд╛рдЗрдЯреЛрдВ рдкрд░ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╡реЗ рдирд╣реАрдВ рдЦреБрд▓реЗ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм VKontakte рд╕рдВрд╕рд╛рдзрди рдкрд░ рд╕рдВрдЧреАрдд рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ)ред рдХрд╛рд░рдг рд╕реНрдкрд╖реНрдЯ рд╣реИ - рдЕрдиреБрд░реЛрдз рдПрдХ рдЕрдиреНрдп рдЪреИрдирд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛ рдЧрдпрд╛ред рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рд╕рдВрддреБрд▓рди рдХреЗ рд▓рд┐рдП рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рддрд░реНрдХ рд╕рд░рд▓ рд╣реИ - рд╕рднреА рдЯреНрд░реИрдлрд╝рд┐рдХ рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЯреЙрд░реЗрдВрдЯ рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдЦрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЯреНрд░реИрдлрд╝рд┐рдХ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВред рдирддреАрдЬрддрди, рд╣рдо рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд░реВрдк рд╕реЗ 11000 рддрдХ рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдХреЗ рд╕рд╛рде рдпрд╛рддрд╛рдпрд╛рдд рд╡рд┐рддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ - рд╕рдмрдиреЗрдЯ, рд╣рдо рдкреЛрд░реНрдЯ 11000-60000 рдХреЗ рд╕рд╛рде рдпрд╛рддрд╛рдпрд╛рдд рдХреЗ рд╕рд╛рде рдЪреИрдирд▓реЛрдВ рдХреЗ рднрд╛рд░ рдХреЛ рд╕рдВрддреБрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рд╕реЗрдЯрд┐рдВрдЧреНрд╕



рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЪреИрдирд▓ рдХреЗ рд▓рд┐рдП рд░рд╛рдЙрдЯрд┐рдВрдЧ рдЯреЗрдмрд▓ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЪрд▓реЛ рдЙрдиреНрд╣реЗрдВ рдХреНрд░рдорд╢рдГ chan1 , chan2 , chan3 - рддреАрди рдЪреИрдирд▓ рдХрд╣рддреЗ рд╣реИрдВред
рдХрд╣реАрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, /etc/rc.local рдореЗрдВ рд╣рдо рдХреБрдЫ рдРрд╕рд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:

ip rule add prio 101 fwmark 1 table chan1 ip rule add prio 102 fwmark 2 table chan2 ip rule add prio 103 fwmark 4 table chan3 


рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдПрдВ /etc/rc.balance:

 #!/bin/bash lst='/etc/rc.balance.lst' ########### Flushing ################## /sbin/iptables -t mangle -F PREROUTING /sbin/iptables -t mangle -F POSTROUTING /sbin/iptables -t mangle -F OUTPUT ####################################### /etc/rc.baltor /sbin/iptables -t mangle -A PREROUTING -d 172.16.0.0/16 -j RETURN /sbin/iptables -t mangle -A PREROUTING -s 172.16.0.0/16 -m state --state INVALID -j DROP while read net mark do /sbin/iptables -t mangle -A PREROUTING -s $net -m state --state new,related -j CONNMARK --set-mark $mark done<$lst /sbin/iptables -t mangle -A PREROUTING -s 172.16.0.0/16 -p udp --sport 11000:60000 --dport 11000:60000 -m state --state new,related -j BALANCE /sbin/iptables -t mangle -A PREROUTING -s 172.16.0.0/16 -p tcp --sport 11000:60000 --dport 11000:60000 -m state --state new,related -j BALANCE /sbin/iptables -t mangle -A PREROUTING -s 172.16.0.0/16 -j CONNMARK --restore-mark exit 0 


рд╣рдо рдЪреИрдирд▓реЛрдВ рджреНрд╡рд╛рд░рд╛ рдЧреНрд░рд┐рдб рдХреЗ рд╡рд┐рддрд░рдг рдХреА рдПрдХ рд╕реВрдЪреА рдмрдирд╛рддреЗ рд╣реИрдВ (рджреВрд╕рд░реЗ рдХреЙрд▓рдо рдореЗрдВ, рдЪрд┐рд╣реНрди):

 172.16.0.0/22 1 172.16.4.0/22 2 172.16.8.0/22 4 


рд╕реНрдХреНрд░рд┐рдкреНрдЯ /etc/rc.baltor - рд╕рдВрддреБрд▓рди рдирд┐рдпрдо:

 #!/bin/bash /sbin/iptables -t mangle -F BALANCE lst='/etc/rc.cnload.lst' mrk=1 while read kld do /sbin/iptables -t mangle -A BALANCE -j CONNMARK --set-mark $mrk /sbin/iptables -t mangle -A BALANCE -m statistic --mode random --probability 0.$kld -j RETURN mrk=`expr $mrk \* 2` done < $lst /sbin/iptables -t mangle -A BALANCE -j CONNMARK --set-mark $mrk exit 0 


рд╕реНрдХреНрд░рд┐рдкреНрдЯ /etc/rc.cnload - рдЪреИрдирд▓ рд▓реЛрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдВрднрд╛рд╡реНрдпрддрд╛ рдХреА рдЧрдгрдирд╛:

 #!/bin/bash cn1=800000 #        cn2=600000 #  .. cn3=400000 #   if1='eth1' #    if2='eth2' #  if3='eth3' #  lst='/etc/rc.cnload.lst' a1=`ifconfig $if1 | grep "RX bytes" | awk '{print $2}' | awk -F: '{print $2}'` a2=`ifconfig $if2 | grep "RX bytes" | awk '{print $2}' | awk -F: '{print $2}'` a3=`ifconfig $if3 | grep "RX bytes" | awk '{print $2}' | awk -F: '{print $2}'` sleep 20 b1=`ifconfig $if1 | grep "RX bytes" | awk '{print $2}' | awk -F: '{print $2}'` b2=`ifconfig $if2 | grep "RX bytes" | awk '{print $2}' | awk -F: '{print $2}'` b3=`ifconfig $if3 | grep "RX bytes" | awk '{print $2}' | awk -F: '{print $2}'` c1=`expr \( $b1 - $a1 \) \* 8 / 20000` c2=`expr \( $b2 - $a2 \) \* 8 / 20000` c3=`expr \( $b3 - $a3 \) \* 8 / 20000` d1=`expr \( $cn1 - $c1 \) \* 100 / $cn1` d2=`expr \( $cn2 - $c2 \) \* 100 / $cn2` d3=`expr \( $cn3 - $c3 \) \* 100 / $cn3` #         60% if [ $d1 -lt "40" -o $d2 -lt "40" -o $d3 -lt "40" ] then e1=`expr 100 \* $d1 / \( $d1 + $d2 + $d3 \)` e2=`expr 100 \* $d2 / \( $d2 + $d3 \)` f1=`head -n 1 $lst | tail -n 1` f2=`head -n 2 $lst | tail -n 1` #     if [ $e1 -ne $f1 -a $e2 -ne $f2 ] then echo $e1 > $lst echo $e2 >> $lst /etc/rc.baltor fi fi exit 0 


/Etc/rc.local рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
 /etc/rc.balance 


рдФрд░ / etc / crontab рдореЗрдВ
 */1 * * * * root /etc/rc.cnload 


рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЧреБрдгрд╛рдВрдХ /etc/rc.cnload.lst рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд╕рдордп, рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ /etc/rc.cnload рдХреЛ рдЪрд▓рд╛рдХрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖



рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ 8000 рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рд╡рд╛рд▓реЗ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рдВрддреБрд▓рди рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЧрддрд┐рд╢реАрд▓ рдЖрдХрд╛рд░ рджреЗрдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрдиреНрдп рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╖рдп рд╣реИред

рд╣рд░ рдЪреАрдЬ рдореЗрдВ рд╕рдВрддреБрд▓рдиред

Source: https://habr.com/ru/post/In157401/


All Articles