{"id":1850,"date":"2014-01-14T08:39:39","date_gmt":"2014-01-14T07:39:39","guid":{"rendered":"http:\/\/www.anadebreuil.org\/blog\/?p=1850"},"modified":"2014-01-19T23:33:58","modified_gmt":"2014-01-19T22:33:58","slug":"balanceo-de-carga-entre-dispositivos-de-ethernet-en-fedora","status":"publish","type":"post","link":"https:\/\/www.anadebreuil.org\/blog\/?p=1850","title":{"rendered":"Balanceo de carga entre dispositivos de ethernet en Fedora"},"content":{"rendered":"<p>El siguiente art\u00edculo explica c\u00f3mo balancear la carga de red en una m\u00e1quina Fedora (Linux), si bien se puede aplicar con peque\u00f1as variaciones a otras distribuciones, de forma que podamos utilizar varios interfaces ethernet como si fueran uno s\u00f3lo, dejando la sistema operativo la responsabilidad de balancear la carga de red entre los diferentes interfaces f\u00edsicos.<br \/>\n<!--more--><br \/>\nPara realizar el ensayo trabajaremos con una m\u00e1quina Fedora con una instalaci\u00f3n m\u00ednima. En cualquier caso, es recomendable no utilizar NetworkManager (podr\u00eda funcionar pero no lo he verificado). La idea es que tenemos una m\u00e1quina\/servidor con dos interfaces de ethernet y queremos balancear la carga entre los dos.<\/p>\n<h3>Procedimiento<\/h3>\n<p>El procedimiento se puede resumir en los siguiente pasos:<\/p>\n<ol>\n<li><a href=\"#step01\">Configurar un dispositivo l\u00f3gico <var>bond0<\/var><\/a> que ser\u00e1 el interfaz maestro de las conexiones ethernet reales.<\/li>\n<li><a href=\"#step02\">Configurar cada interfaz ethernet f\u00edsica<\/a> como esclava de <var>bond0<\/var>.<\/li>\n<li><a href=\"#step03\">Reiniciar el servicio de red, <var>network<\/var><\/a>.<\/li>\n<li><a href=\"#step04\">Verificar el estado del dispositivo<\/a>.<\/li>\n<\/ol>\n<h4><a name=\"step01\"><\/a>1.\u00a0Configurar el dispositico <var>bond0<\/var><\/h4>\n<p>Para ello creamos y\/o editamos los siguientes ficheros:<\/p>\n<dl>\n<dt><em>\/etc\/modprobe.d\/bonding.conf<\/em><\/dt>\n<dd>Este fichero configura el m\u00f3dulo del kernel asociado al dispositivo <em>bond0<\/em>, que representa la interfaz de red virtual que balancea la carga entre las interfaces de red f\u00edsicas del sistema.<\/p>\n<pre>alias bond0 bonding<\/pre>\n<\/dd>\n<dt><em>\/etc\/network-scripts\/ifcfg-bond0<\/em><\/dt>\n<dd>Este fichero contiene la configuraci\u00f3n del dispositivo de red virtual, que ser\u00e1 utilizado por el servicio <em>network<\/em> al levantar la interfaz.<\/p>\n<pre>NAME=\"Bonding device\"\r\nDEVICE=bond0\r\nBONDING_OPTS=\"mode=5 miimon=100\"\r\nBOOTPROTO=dhcp\r\nNM_CONTROLLED=no\r\nONBOOT=yes\r\nUSERCTL=no\r\nDHCP_CLIENT_ID=&lt;hostname&gt;<\/pre>\n<\/dd>\n<\/dl>\n<p>De este fichero, la opci\u00f3n que m\u00e1s veces se puede tocar es el par\u00e1metro <code>mode=5<\/code> de <b>BONDING_OPTS<\/b>, ya que determina la pol\u00edtica de balanceo utilizada. Puede tomar estos valores:<\/p>\n<dl>\n<dt>mode=0<\/dt>\n<dd>Estable una pol\u00edtica <cite>round-robin<\/cite> para tolerancia a fallos y balanceo de carga. Las transmisiones se reciben y env\u00edan secuencialmente por cada uno de los interfaces esclavos vinculados, empezando por el primero disponible.<\/dd>\n<dt>mode=1<\/dt>\n<dd>Establece una pol\u00edtica <cite>active-backup<\/cite> para tolerancia a fallos. Las transmisiones se reciben y env\u00edan siempre por el primer dispositivo esclavo vinculado disponible. Los otros interfaces vinculados s\u00f3lo se utilizan si falla el interfaz activo.<\/dd>\n<dt>mode=2<\/dt>\n<dd>Establece una pol\u00edtica <cite>XOR<\/cite> para tolerancia a fallos y balanceo de carga. Empleando este m\u00e9todo la interfaz asocia la direcci\u00f3n MAC de las peticiones entrantes con la direcci\u00f3n MAC de uno de los NICs esclavos. Una vez que se establece el enlace, las transmisiones se env\u00edan secuencialmente empezando por el primer interfaz disponible.<\/dd>\n<dt>mode=3<\/dt>\n<dd>Estable una pol\u00edtica <cite>broadcast<\/cite> para tolerancia a fallos. Todas las transmisiones son enviadas por todos los dispositivos esclavos.<\/dd>\n<dt>mode=4<\/dt>\n<dd>Establece una pol\u00edtica IEEE 802.3ad de agregaci\u00f3n de enlaces din\u00e1mica. Crea grupos de agregaci\u00f3n que comparten la misma velocidad y configuraci\u00f3n d\u00faplex. Transmite y recibe por todos los esclavos del agregado activo. Requiere un switch que sea compatible con IEEE 802.3ad.<\/dd>\n<dt>mode=5<\/dt>\n<dd>Establece una pol\u00edtica <cite>transmit load balancing<\/cite> (TLB) para tolerancia a fallos y balanceo de carga. El tr\u00e1fico saliente se distribuye entre los distintos esclavos de acuerdo a su carga. El tr\u00e1fico entrante se recibe a trav\u00e9s del esclavo activo. Si el esclavo activo falla, otro esclavo toma la MAC del esclavo fallido.<\/dd>\n<dt>mode=6<\/dt>\n<dd>Estable una pol\u00edtica <cite>active load balancing<\/cite> (ALB) para tolerancia a fallos y balanceo de carga. Incluye balanceo de carga de transmisiones y recepciones para el tr\u00e1fico IPv4. El balanceo de carga entrante se consigue a trav\u00e9s de negociaci\u00f3n ARP.<\/dd>\n<\/dl>\n<h4><a name=\"step02\"><\/a>2.\u00a0Configurar cada interfaz ethernet f\u00edsica<\/h4>\n<p>Se debe editar y\/o crear los ficheros correspondientes a cada dispositivo f\u00edsico. Se debe tener en cuenta que a partir de Fedora 15, la denominaci\u00f3n de las interfaces de red no siempre es <var>eth0<\/var>, <var>eth1<\/var>, etc., sino que depende del tipo de interfaz, as\u00ed que previamente habr\u00e1 que verificar qu\u00e9 dispositivos f\u00edsicos son susceptibles de ser configurados (por ejemplo usando el comando <b>ifconfig<\/b>). Una vez que sepamos su nombre, los ficheros de configuraci\u00f3n ser\u00e1n algo as\u00ed:<\/p>\n<dl>\n<dt><em>\/etc\/network-scripts\/ifcfg-eth<strong>?<\/strong><\/em><\/dt>\n<dd>Estos ficheros contienen la configuraci\u00f3n de cada uno de los dispositivos de red f\u00edsicos, que ser\u00e1 utilizado por el servicio <em>network<\/em> al levantar la interfaz.<\/p>\n<pre>NAME=\"System eth<strong>?<\/strong>\"\r\nDEVICE=eth<strong>?<\/strong>\r\nBOOTPROTO=none\r\nONBOOT=no\r\nNM_CONTROLLED=no\r\nUUID=&lt;el que corresponda al dispositivo&gt;\r\nHWADDR=&lt;la que corresponda al dispositivo&gt;\r\nUSERCTL=no\r\nSLAVE=yes\r\nMASTER=bond0<\/pre>\n<\/dd>\n<\/dl>\n<h4><a name=\"step03\"><\/a>3.\u00a0Reiniciar el servicio de red, <var>network<\/var><\/h4>\n<p>Una vez configurado, la nueva configuraci\u00f3n debe activarse usando los comandos<\/p>\n<pre># modprobe bonding\r\n# service network start|restart<\/pre>\n<p>en donde usaremos <code>restart<\/code> o <code>start<\/code> en funci\u00f3n de tuvi\u00e9ramos o no iniciado el servicio <cite>network<\/cite>. Insistir nuevamente en el m\u00e9todo no ha sido probado si se usa <cite>NetworkManager<\/cite> en vez de <cite>network<\/cite>, y que es probable que no funcione.<\/p>\n<h4><a name=\"step04\"><\/a>4.\u00a0Verificar el estado del dispositivo<\/h4>\n<p>Se puede revisar el estado del dispositivo <var>bond0<\/var> consultando el fichero <var>\/proc\/net\/bonding\/bond0<\/var>, por ejemplo:<\/p>\n<pre># cat \/proc\/net\/bonding\/bond0\r\nEthernet Channel Bonding Driver: v3.7.1 (April 27, 2011)\r\n\r\nBonding Mode: transmit load balancing\r\nPrimary Slave: None\r\nCurrently Active Slave: eth0\r\nMII Status: up\r\nMII Polling Interval (ms): 100\r\nUp Delay (ms): 0\r\nDown Delay (ms): 0\r\n\r\nSlave Interface: eth<b>?<\/b>\r\nMII Status: up\r\nSpeed: Unknown\r\nDuplex: Unknown\r\nLink Failure Count: 0\r\nPermanent HW addr: <b>??:??:??:??:??:??<\/b><\/pre>\n<h3>Referencias<\/h3>\n<p>Para la preparaci\u00f3n de esta instrucci\u00f3n t\u00e9cnica se han utilizado estas referencias externas:<\/p>\n<ul>\n<li>Documentaci\u00f3n oficial de Fedora: <a class=\"biblio\" href=\"http:\/\/docs.fedoraproject.org\/en-US\/Fedora\/12\/html\/Deployment_Guide\/s2-networkscripts-interfaces-chan.html\">Channel Bonding Interfaces<\/a><\/li>\n<li>Documentaci\u00f3n oficial de Fedora: <a class=\"biblio\" href=\"http:\/\/docs.fedoraproject.org\/en-US\/Fedora\/12\/html\/Deployment_Guide\/s2-modules-bonding.html#s3-modules-bonding-directives\">The Channel Bonding Module<\/a><\/li>\n<li><a class=\"biblio\" href=\"http:\/\/www.sromero.org\/wiki\/linux\/redes\/netbonding\">Net bonding\/teaming en Linux<\/a><\/li>\n<li><a class=\"biblio\" href=\"http:\/\/fedoracoreproject.blogspot.com.es\/2009\/03\/nic-bonding-on-linux-fedora.html\">nic bonding on Linux Fedora<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>El siguiente art\u00edculo explica c\u00f3mo balancear la carga de red en una m\u00e1quina Fedora (Linux), si bien se puede aplicar con peque\u00f1as variaciones a otras distribuciones, de forma que podamos utilizar varios interfaces&#8230;<\/p>\n","protected":false},"author":1,"featured_media":1862,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[32,10],"class_list":["post-1850","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutoriales","tag-bonding","tag-fedora"],"_links":{"self":[{"href":"https:\/\/www.anadebreuil.org\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1850","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.anadebreuil.org\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.anadebreuil.org\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.anadebreuil.org\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.anadebreuil.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1850"}],"version-history":[{"count":6,"href":"https:\/\/www.anadebreuil.org\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1850\/revisions"}],"predecessor-version":[{"id":1934,"href":"https:\/\/www.anadebreuil.org\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1850\/revisions\/1934"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.anadebreuil.org\/blog\/index.php?rest_route=\/wp\/v2\/media\/1862"}],"wp:attachment":[{"href":"https:\/\/www.anadebreuil.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1850"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.anadebreuil.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1850"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.anadebreuil.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1850"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}