[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-fr] Bonding




voici mon script de gestion du bonding. Je précise que mon Dom0 possede 2 interfaces réseau :
- un bonding
- une eth qui sert de heartbeat

Je cré donc 2 bridge :
- brnet : pour le réseau local
- brcluster : pour le réseau heartbeat

Il est ensuite important de paramétrer ses DomU avec brnet et brcluster. par ex :
vif  = [ 'mac=00:16:3E:20:C8:20 , bridge=brnet' , 'mac=00:16:3E:20:C8:22 , bridge=brcluster'  ]

----------- début du script bond-network-bridge --------------------

#!/bin/sh

# Usage: transfer_addrs src dst
# Copy all IP addresses (including aliases) from device $src to device $dst.
transfer_addrs () {
    local src="">    local dst=$2
    # Don't bother if $dst already has IP addresses.
    if ip addr show dev ${dst} | egrep -q '^ *inet ' ; then
        return
    fi
    # Address lines start with 'inet' and have the device in them.
    # Replace 'inet' with 'ip addr add' and change the device name $src
    # to 'dev $src'.
    ip addr show dev ${src} | egrep '^ *inet ' | sed -e "
s/inet/ip addr add/
s@\([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+/[0-9]\+\)@\1@
s/${src}/dev ${dst}/
" | sh -e
    # Remove automatic routes on destination device
    ip route list | sed -ne "
/dev ${dst}\( \|$\)/ {
  s/^/ip route del /
  p
}" | sh -e
}

# Usage: transfer_routes src dst
# Get all IP routes to device $src, delete them, and
# add the same routes to device $dst.
# The original routes have to be deleted, otherwise adding them
# for $dst fails (duplicate routes).
transfer_routes () {
    local src="">    local dst=$2
    # List all routes and grep the ones with $src in.
    # Stick 'ip route del' on the front to delete.
    # Change $src to $dst and use 'ip route add' to add.
    ip route list | sed -ne "
/dev ${src}\( \|$\)/ {
  h
  s/^/ip route del /
  P
  g
  s/${src}/${dst}/
  s/^/ip route add /
  P
  d
}" | sh -e
}



# Usage: create_bridge bridge
create_bridge () {
    local bridge=$1

    # Don't create the bridge if it already exists.
    if ! brctl show | grep -q ${bridge} ; then
        brctl addbr ${bridge}
        brctl stp ${bridge} off
        brctl setfd ${bridge} 0
    fi
    ip link set ${bridge} up
}

# Usage: add_to_bridge bridge dev
add_to_bridge () {
    local bridge=$1
    local dev=$2
    # Don't add $dev to $bridge if it's already on a bridge.
    if ! brctl show | grep -q ${dev} ; then
        brctl addif ${bridge} ${dev}
    fi
}

# Usage: show_status dev bridge
# Print ifconfig and routes.
show_status () {
    local dev=$1
    local bridge=$2

    echo '============================================================'
    ip addr show ${dev}
    ip addr show ${bridge}
    echo ' '
    brctl show ${bridge}
    echo ' '
    ip route list
    echo ' '
    route -n
    echo '============================================================'
}

op_start () {
    create_bridge brnet
    add_to_bridge brnet vif0.0
    add_to_bridge2 brnet bond0

    transfer_addrs bond0 brnet
    transfer_routes bond0 brnet

    create_bridge brcluster
    add_to_bridge brcluster vif1.0
    add_to_bridge2 brcluster eth2

    transfer_addrs eth2 brcluster
    transfer_routes eth2 brcluster
}

op_stop () {
    transfer_routes brnet bond0
    ip link set brnet down
    brctl delbr brnet

    transfer_routes brcluster eth2
    ip link set brcluster down
    brctl delbr brcluster
}

# adds $dev to $bridge but waits for $dev to be in running state first
add_to_bridge2() {
    local bridge=$1
    local dev=$2
    local maxtries=10

    echo -n "Waiting for ${dev} to negotiate link."
    for i in `seq ${maxtries}` ; do
        if ifconfig ${dev} | grep -q RUNNING ; then
            break
        else
            echo -n '.'
            sleep 1
        fi
    done

    if [ ${i} -eq ${maxtries} ] ; then echo '(link isnt in running state)' ; fi

    add_to_bridge ${bridge} ${dev}
}

case "${1}" in
    start)
        op_start
        ;;

    stop)
        op_stop
        ;;

    status)
        show_status ${netdev} ${bridge}
        ;;

    *)
        echo "Unknown command: ${1}" >&2
        echo 'Valid commands are: start, stop, status' >&2
        exit 1
esac
----------- fin du script bond-network-bridge --------------------

J'espere que cela vous aidera.

Cordialement,
Matthieu CHAUVEAU
---
Responsable exploitation système
Carte Blanche Conseil
---



From: trailx@xxxxxxx
To: xen-fr@xxxxxxxxxxxxxxxxxxx
Sent: Mon, 04 Aug 2008 10:01:33 +0200
Subject: Re: [Xen-fr] Bonding

Bonjour,

Merci pour le script. Je l'ai essayé, malheureusement je n'ai toujours pas de
réseau sur mes VM...

#brctl show
virbr0 8000.000000000000 yes
xenbr0 8000.00151777e4a0 no vif4.0
bond0

Je trouve étrange de ne pas avoir de vif 0.0 associé à mon xenbr0 ??
Faut-il activer une quelconque fonction de forwading ?? (ip_forwading)
Les firewalls sont désactivés.
Mon interface xenbr0 est associée à mes Dom-U (ici le Dom-U id 4), les @ mac
sont correctes.

Pourriez-vous me faire passer vos fichiers de conf (ceux qui ont été modifiés) ?
car je ne vois vraiment pas où est mon problème...

Merci d'avance.


Selon Matthieu Chauveau <xen@xxxxxxxxxxxxx>:

> Bonjour,
>
> j'ai eu a traiter la même problématique il y a peu. Par contre, mon infra est
> à base de Debian 4.0 et Xen 3.0.3-1.
> J'ai été obligé d'utiliser un script différent que ceux fournis en standard
> dans les packages Debian et modifier l'appel au script dans le fichier de
> conf xend-config.sxp :
> (network-script bond-network-bridge) au lieu de (network-script
> 'network-bridge')
> le script bond-network-bridge, je ne l'ai pas inventé moi même mais je l'ai
> trouvé ici :
> http://lists.xensource.com/archives/html/xen-users/2006-04/msg00186.html
> depuis ma plateforme fonctionne très bien.
>
> Cdt,
> Matthieu CHAUVEAU
> ---
> Responsable exploitation système
> Carte Blanche Conseil
> ---
> _____
>
> From: trailx@xxxxxxx
> To: xen-fr@xxxxxxxxxxxxxxxxxxx [mailto:xen-fr@xxxxxxxxxxxxxxxxxxx]
> Sent: Tue, 29 Jul 2008 16:14:10 +0200
> Subject: [Xen-fr] Bonding
>
> Bonjour,
>
> J'utilise une centOS avec Xen 3.0.3 et je n'arrive pas à faire fonctionner
> le
> channel bonding...
>
> J'ai procédé ainsi :
>
> 1) /etc/modprobe.conf
> Code :
>
> 1. alias bond0 bonding
> 2. options bond0 mode=802.3ad miimon=100 use_carrier=0 lacp_rate=fast
> max_bonds=2
>
>
>
> 2) Configuration des interfaces :
> /etc/sysconfig/network-script/ifcfg-bond0
> Code :
>
> 1. DEVICE=bond0
> 2. IPADDR=192.168.0.10
> 3. NETMASK=255.255.255.0
> 4. NETWORK=192.168.0.0
> 5. BROADCAST=192.168.0.255
> 6. > > 7. BOOTPROTO=none
> 8. GATEWAY=192.168.0.254
> 9. TYPE=Ethernet
> 10. BONDING_OPTS="mode=1 miimon=100"
>
>
>
> /etc/sysconfig/network-script/ifcfg-eth0 et de même pour eth1
> Code :
>
> 1. DEVICE=eth0
> 2. HWADDR=00:15:17:6C:48:10
> 3. > > 4. USERCTL=no
> 5. BOOTPROTO=none
> 6. MASTER=bond0
> 7. SLAVE=YES
>
>
>
>
> 3) Création d'un script pour lancer mes bridges automatiquement
> /etc/xen/scripts/network-bridge-bond
> Code :
>
> 1. #! /bin/sh
> 2. /etc/xen/scripts/network-bridge start vifnum=0 bridge=xenbr0
> 3. /etc/xen/scripts/network-bridge start vifnum=1 bridge=xenbr1
>
>
>
>
> 4) Modifications de xend-config.sxp pour prendre en compte mon script
>
> Je précise que sans Bonding tout marche très bien ...
> J'ai également essayé la commande brctl addif mais il refuse d'ajouter un
> device
> type bond à un xenbridge :(
>
> Merci d'avance pour toutes aides
>
> PS: A priori certaines personnes ont reussi en utilisant dans le fichier de
> conf
> des VM :
> vif = [ mac=xxxxxxxxxxxx, bridge=br0 ]
>
> Je n'ai pas d'environnement pour le moment pour confirmer cette thèse
>
>
>
> _______________________________________________
> Xen-fr mailing list
> Xen-fr@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-fr
>



_______________________________________________
Xen-fr mailing list
Xen-fr@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-fr
_______________________________________________
Xen-fr mailing list
Xen-fr@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-fr

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.