je cherche à limiter sur un serveur de backup la bande passante utilisée par des dump postgresql à 30mbps maximum.
En fouillant je n'ai rien trouvé d'autre que d'utiliser "tc" pour le faire, donc en suivant plusieurs howto j'ai ce script:
tc qdisc del dev eth0 root
tc qdisc add dev eth0 root handle 1: htb default 1 r2q 160
tc class add dev eth0 parent 1: classid 1:1 htb rate 32000kbit burst 1m
tc class add dev eth0 parent 1:1 classid 1:2 htb rate 32000kbit ceil 32000kbit burst 1m
tc class add dev eth0 parent 1:1 classid 1:3 htb rate 1000kbit ceil 1000kbit burst 1m
tc filter add dev eth0 protocol ip parent 1:2 prio 1 handle 12 fw flowid 1:2
tc filter add dev eth0 protocol ip parent 1:3 prio 1 handle 13 fw flowid 1:3
tc qdisc add dev eth0 parent 1:2 handle 2: sfq perturb 10
tc qdisc add dev eth0 parent 1:3 handle 3: sfq perturb 10
iptables -t mangle -A POSTROUTING -o eth0 -m tcp -m mark -p tcp --sport 5432 -j CLASSIFY --set-class 1:2 --mark 0x12
iptables -t mangle -A POSTROUTING -o eth0 -m tcp -m mark -p tcp --sport 80 -j CLASSIFY --set-class 1:3 --mark 0x13
Le problème c'est qu'après avoir appliqué ces scripts, en faisant un wget du dernier kernel la vitesse monte à 8 voire 9 Mo/s, ce qui fait plus de 64 Mbps, donc clairement ça ne fonctionne pas.
Du coup je me demande, est-ce que tc est capable de faire ce que je veux ? Là j'ai l'impression qu'il ne limite pas tant que la bande passante est suffisante, autrement dit que si j'avais un trafic quelconque qui voudrait utiliser 90 Mbps, il pourrait pas car tc garantit 30 Mbps au trafic pgsql.
Ce ne sont que des suppositions, j'ai pas lu le manuel en entier.
Merci d'avance.
# tc limite la bande passante qui sort
Posté par nicolas . Évalué à 3.
Voici le début de mon script en download avec ifb, ça devrait être suffisant pour comprendre comment ça fonctionne :
IFB=ifb0
DEV=eth0
DOWNLINK=75
modprobe ifb
ip link set dev $IFB up
tc qdisc add dev $DEV ingress
tc filter add dev $DEV parent ffff: protocol ip \
u32 match ip dst 0/0 action mirred egress redirect dev $IFB
tc qdisc add dev $IFB root handle 1:0 htb default 1
tc class add dev $IFB parent 1:0 classid 1:1 htb \
rate ${DOWNLINK}kbps
[^] # Re: tc limite la bande passante qui sort
Posté par Sphax . Évalué à 1.
J'ai pas spécialement envie de mettre un iptables/tc sur le serveur de prod donc je vais voir du côté d'ifb.
Merci.
# Chez moi
Posté par Spack . Évalué à 3.
J'utilise aussi tc et après quelques tests je pense que ça fonctionne chez moi. Voici par exemple comment je limite le trafic HTTP:
if [ $(tc -d qdisc show dev eth0 | wc -l) != "1" ]; then
tc qdisc del dev eth0 root
fi
iptables -t mangle -F
tc qdisc add dev eth0 root handle 1: htb default 99 r2q 5
# Classe HTTP = 40
tc class add dev eth0 parent 1:0 classid 1:40 htb rate 256kbit burst 2k prio 4
tc qdisc add dev eth0 parent 1:40 handle 140: sfq perturb 10
tc filter add dev eth0 parent 1:0 protocol ip prio 4 handle 40 fw flowid 1:40
# Marquage des paquets HTTP
iptables -t mangle -A POSTROUTING -o eth0 -p tcp --tcp-flags SYN,ACK SYN,ACK --sport 80 -j CONNMARK --set-mark 40
# Restore la marque sur les paquets identiques
iptables -t mangle -A POSTROUTING -j CONNMARK --restore-mark
En débit instantané je dépasse parfois les 256Kbps définis mais en débit moyen ça à l'air d'être environ 256Kbps.
Pour information, l'attribut mbit est aussi compris par tc.
# ip_relay
Posté par solsTiCe (site web personnel) . Évalué à 1.
tu peux peut-être l'utiliser ?
http://www.stewart.com.au/ip_relay/
[^] # Re: ip_relay
Posté par Sphax . Évalué à 1.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.