bonding y balanceo de carga (no balancea)
Hola a todos, trataré de ser corto y preciso. datos: - 2x intel nehalem quadcore - 36gb ram - centos 5.3 64bits - actualizado a la fecha con repos oficiales (son dos máquinas iguales instaladas iguales) el problema: tengo un problema armando un bonding para balanceo de carga, tengo 2 tarjetas de red intel 82576 gigabit y 2 tarjetas de red intel 82574L gigabit (4 por cada servidor) funciona impecable en modo alta disponibilidad en modo 0 , en modo 2 y en modo 6 (que son los que me interesan) pero bajo ninguna circunstancia suman las velocidades (como si lo hacen un par de tarjetas de red muy viejas que tengo) probé con las 4 nic en un solo bonding. con 2 iguales en cada server. con 2 mezcladas. y no hay caso # mi modprobe.conf alias eth0 e1000e alias eth1 e1000e alias eth2 igb alias eth3 igb alias bond0 bonding # options bonding mode=0 miimon=100 dado que con la misma config funciona en las tarjetas antiguas, que me falta para que funcione en estas que son mucho más nuevas? o que otra opción de conexión de alta velocidad (barata) se puede hacer? de antemano gracias.
Re: bonding y balanceo de carga (no balancea)
2009/7/7 Felipe Román Márquez : > > Hola a todos, trataré de ser corto y preciso. > > datos: > de antemano gracias. > Como estas midiendo para saber que no balancean?? Probaste en modo 4?? Aqui va una referencia...http://kbase.redhat.com/faq/docs/DOC-16008 Atte -- Jorge Palma Escobar Ingeniero de Sistemas Red Hat Linux Certified Engineer Certificate Nº 804005089418233
Re: bonding y balanceo de carga (no balancea)
por traspaso de archivos con scp, rsync y por como sincroniza los discos drbd. con las tarjetas viejas de 100mbps al usar un bonding el traspaso de archivos se hace a aproximadamente 20mbps a 25mbps, al desconectar una tarjeta mientras se copia el archivo la velocidad baja a 10mbps a 12mbps que es lo normal de 1 tarjeta funcionando a 100 full duplex. con las tarjetas nuevas funcionando a 1000full duplex, usando 4 tarjetas en 1 bonding, 3 tarjetas, 2 tarjetas o una sola la velocidad es constante entre 35mbps a 40mbps, no sube ni baja de eso. estoy usando un raid de discos sas de 15.000rpm que en hdparm da 680mbps si que no tengo cuello de botella ahí. si probé en modo 4 y el resultado es el mismo. instalé los modulos igb de intel a mano y el resultado es el mismo, para las otras tarjetas (e1000e) no hay módulos disponibles en la pagina de intel. gracias por responder :D El 08-07-2009, a las 18:16, Jorge Palma escribió: 2009/7/7 Felipe Román Márquez : Hola a todos, trataré de ser corto y preciso. datos: de antemano gracias. Como estas midiendo para saber que no balancean?? Probaste en modo 4?? Aqui va una referencia...http://kbase.redhat.com/faq/docs/DOC-16008 Atte -- Jorge Palma Escobar Ingeniero de Sistemas Red Hat Linux Certified Engineer Certificate Nº 804005089418233
Re: bonding y balanceo de carga (no balancea)
2009/7/8 Felipe Román Márquez : > por traspaso de archivos con scp, rsync y por como sincroniza los discos > drbd. Haz otra prueba para medir, probablemente estas midiendo tu performance en disco y/o en cpu. > con las tarjetas viejas de 100mbps al usar un bonding el traspaso de > archivos se hace a aproximadamente 20mbps a 25mbps, al desconectar una > tarjeta mientras se copia el archivo la velocidad baja a 10mbps a 12mbps que > es lo normal de 1 tarjeta funcionando a 100 full duplex. > con las tarjetas nuevas funcionando a 1000full duplex, usando 4 tarjetas en > 1 bonding, 3 tarjetas, 2 tarjetas o una sola la velocidad es constante entre > 35mbps a 40mbps, no sube ni baja de eso. > estoy usando un raid de discos sas de 15.000rpm que en hdparm da 680mbps si > que no tengo cuello de botella ahí. -- Aldrin Martoq http://aldrin.martoq.cl/
Re: bonding y balanceo de carga (no balancea)
tiene 6 discos sas de 15.000rpm en raid0 (cada server) en velocidad peak da casi 800mbps, y no baja de 480mbps en velocidad sostenida. y en cpu, tiene 2 x quadcore nehalem (no hay nada más potente en el mercado hasta ahora) son 8 cores por máquina y 16 theads en total ya que tienen HT. imposible que haya cuello de botella por procesador ni por discos, además las máquinas no tienen carga, están recién instaladas y no puedo seguir avanzando hasta que la performance de red suba considerablemente. PD: probé SLES11, la red funciona bastante más rápido (sigue sin funcionar el bonding en todo caso). pero no es estable, los bridges que genera para xen hacen que se caiga la red cada vez que se reinicia la máquina y además misteriosamente los archivos de configuración de las interfaces de red se borran, sin mencionar que no encontré soporte ni para heartbeat ni para drbd en los repos oficiales, al instalarlos de los no oficiales tengo problemas de dependencias imposibles de resolver con los repos oficiales :P ya no se que más hacer, no hay presupuesto para más tarjetas de red u otra tecnología que sea de alta velocidad. como estoy desesperado estoy tirando palos de ciego, probaré fedora11, sles10, etc. si alguien tiene una idea (cualquier cosa) será bienvenida. saludos a todos. El 10-07-2009, a las 16:49, Aldrin Martoq escribió: 2009/7/8 Felipe Román Márquez : por traspaso de archivos con scp, rsync y por como sincroniza los discos drbd. Haz otra prueba para medir, probablemente estas midiendo tu performance en disco y/o en cpu. con las tarjetas viejas de 100mbps al usar un bonding el traspaso de archivos se hace a aproximadamente 20mbps a 25mbps, al desconectar una tarjeta mientras se copia el archivo la velocidad baja a 10mbps a 12mbps que es lo normal de 1 tarjeta funcionando a 100 full duplex. con las tarjetas nuevas funcionando a 1000full duplex, usando 4 tarjetas en 1 bonding, 3 tarjetas, 2 tarjetas o una sola la velocidad es constante entre 35mbps a 40mbps, no sube ni baja de eso. estoy usando un raid de discos sas de 15.000rpm que en hdparm da 680mbps si que no tengo cuello de botella ahí. -- Aldrin Martoq http://aldrin.martoq.cl/
Re: bonding y balanceo de carga (no balancea)
On Fri, 2009-07-10 at 17:13 -0400, Felipe Román Márquez wrote: > tiene 6 discos sas de 15.000rpm en raid0 (cada server) en velocidad > peak da casi 800mbps, y no baja de 480mbps en velocidad sostenida. > y en cpu, tiene 2 x quadcore nehalem (no hay nada más potente en el > mercado hasta ahora) son 8 cores por máquina y 16 theads en total ya > que tienen HT. Lei tus specs (por eso los puse bajo mi comentario), y aun asi los procesos que hablamos son todos UNI-THREAD (no te sirven los 8 cores), son pesados en CPU y 800mbps es poco para tus discos (cuidado con las unidades!). Como referencia en mi laptop: - hdparm -T /dev/sda 1128.20 MiB/s - hdparm -t /dev/sda 61.03 MiB/s - dd if=archivo2gigas of=/dev/null (no esta en cache obvimente!) 38.1 MiB/s > imposible que haya cuello de botella por procesador ni por discos, > además las máquinas no tienen carga, están recién instaladas y no > puedo seguir avanzando hasta que la performance de red suba > considerablemente. Pero *hiciste la prueba*? Miraste el uso con top (presiona "1" para separar por CPU) mientras corrias ssh por ejemplo? Hiciste scp o rsync a localhost? Aca un scp a localhost me da penosos 13 MiB/s y entre dos laptops por gigabit me da 24.9 MiB/s, asi que 50MiB/s no me parece malo para tus servidores: fijate que con scp entre 2 tarros (24 MiB/s) obtengo menos que leer directamente el disco (38 MiB/s). SCP no es gratis y rsync anda por ahi... Puedes intentar con el par de programas que pongo abajo, los cuales solo involucran CPU y red... con ellos obtengo: - a localhost: 750 MiB/s - entre 2 laptops conectados entre ellos por gigabit: 111 MiB/s --servidor.py-- #!/usr/bin/env python import SocketServer,sys class MyServer(SocketServer.ThreadingTCPServer): allow_reuse_address = True class EchoRequestHandler(SocketServer.BaseRequestHandler): def handle(self): mega = "A"*1024*1024 data = self.request.recv(1024) if data.startswith('test'): try: sys.stdout.write('%s: ' % str(self.client_address)) numero = int(data[5:]) for i in range(numero): if i % 10 == 0: sys.stdout.write('.') sys.stdout.flush() self.request.send(mega) sys.stdout.write('\n') return except Exception, e: print e server = MyServer(('', 5), EchoRequestHandler) try: server.serve_forever() except: server.server_close() -fin-servidor.py-- -cliente.py #!/usr/bin/env python import socket,sys,time try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((sys.argv[1], 5)) sock.send("test %s" % sys.argv[2]) except IndexError: sys.stderr.write("""Uso: %s <# MegaBytes> Ejemplo: %s 127.0.0.1 10 """ % (sys.argv[0], sys.argv[0])) sys.exit(2) except socket.error, msg: sys.stderr.write("[ERROR] %s\n" % msg[1]) sys.exit(2) recv = 1024*8 t1 = time.time() data = sock.recv(recv) l = 0 while len(data): l += len(data) data = sock.recv(recv) t2 = time.time() sock.close() delta=t2-t1 KiB=l/1024 MiB=l/1024/1024 KiBps=KiB/delta MiBps=MiB/delta print """Largo: %d MiB tiempo: %f segundos ancho banda: %f MiB/s %f KiB/s""" % (MiB, delta, MiBps, KiBps) fin-cliente.py -- Aldrin Martoq http://aldrin.martoq.cl/
Re: bonding y balanceo de carga (no balancea)
probé en fedora 11 y funciona sin problemas, con 3 tarjetas da 90mbps en promedio. pero no hay xen en fedora 11, solo kvm y necesito xen si o si. (y es casi 100% necesario usar centos) :( creo que tendré que comprar unas infiniband gracias. El 10-07-2009, a las 19:29, Aldrin Martoq escribió: On Fri, 2009-07-10 at 17:13 -0400, Felipe Román Márquez wrote: tiene 6 discos sas de 15.000rpm en raid0 (cada server) en velocidad peak da casi 800mbps, y no baja de 480mbps en velocidad sostenida. y en cpu, tiene 2 x quadcore nehalem (no hay nada más potente en el mercado hasta ahora) son 8 cores por máquina y 16 theads en total ya que tienen HT. Lei tus specs (por eso los puse bajo mi comentario), y aun asi los procesos que hablamos son todos UNI-THREAD (no te sirven los 8 cores), son pesados en CPU y 800mbps es poco para tus discos (cuidado con las unidades!). Como referencia en mi laptop: - hdparm -T /dev/sda 1128.20 MiB/s - hdparm -t /dev/sda 61.03 MiB/s - dd if=archivo2gigas of=/dev/null (no esta en cache obvimente!) 38.1 MiB/s imposible que haya cuello de botella por procesador ni por discos, además las máquinas no tienen carga, están recién instaladas y no puedo seguir avanzando hasta que la performance de red suba considerablemente. Pero *hiciste la prueba*? Miraste el uso con top (presiona "1" para separar por CPU) mientras corrias ssh por ejemplo? Hiciste scp o rsync a localhost? Aca un scp a localhost me da penosos 13 MiB/s y entre dos laptops por gigabit me da 24.9 MiB/s, asi que 50MiB/s no me parece malo para tus servidores: fijate que con scp entre 2 tarros (24 MiB/s) obtengo menos que leer directamente el disco (38 MiB/s). SCP no es gratis y rsync anda por ahi... Puedes intentar con el par de programas que pongo abajo, los cuales solo involucran CPU y red... con ellos obtengo: - a localhost: 750 MiB/s - entre 2 laptops conectados entre ellos por gigabit: 111 MiB/s --servidor.py-- #!/usr/bin/env python import SocketServer,sys class MyServer(SocketServer.ThreadingTCPServer): allow_reuse_address = True class EchoRequestHandler(SocketServer.BaseRequestHandler): def handle(self): mega = "A"*1024*1024 data = self.request.recv(1024) if data.startswith('test'): try: sys.stdout.write('%s: ' % str(self.client_address)) numero = int(data[5:]) for i in range(numero): if i % 10 == 0: sys.stdout.write('.') sys.stdout.flush() self.request.send(mega) sys.stdout.write('\n') return except Exception, e: print e server = MyServer(('', 5), EchoRequestHandler) try: server.serve_forever() except: server.server_close() -fin-servidor.py-- -cliente.py #!/usr/bin/env python import socket,sys,time try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((sys.argv[1], 5)) sock.send("test %s" % sys.argv[2]) except IndexError: sys.stderr.write("""Uso: %s <# MegaBytes> Ejemplo: %s 127.0.0.1 10 """ % (sys.argv[0], sys.argv[0])) sys.exit(2) except socket.error, msg: sys.stderr.write("[ERROR] %s\n" % msg[1]) sys.exit(2) recv = 1024*8 t1 = time.time() data = sock.recv(recv) l = 0 while len(data): l += len(data) data = sock.recv(recv) t2 = time.time() sock.close() delta=t2-t1 KiB=l/1024 MiB=l/1024/1024 KiBps=KiB/delta MiBps=MiB/delta print """Largo: %d MiB tiempo: %f segundos ancho banda: %f MiB/s %f KiB/s""" % (MiB, delta, MiBps, KiBps) fin-cliente.py -- Aldrin Martoq http://aldrin.martoq.cl/
Re: bonding y balanceo de carga (no balancea)
On Sun, 2009-07-19 at 20:37 -0400, Felipe Román Márquez wrote: > probé en fedora 11 y funciona sin problemas, con 3 tarjetas da 90mbps > en promedio. Que probaste? rsync, scp, mi programa? Comparaste con localhost? Que unidades son esas? b con minusculas es bit, B con mayusculas es Byte. 90mbps esta LEJOS de gigabit. http://en.wikipedia.org/wiki/Data_rate_units Si te refires a 90MiB/s quizas estas topando con otra limitante como algun switch entremedio? Como estan conectados los tarros? > pero no hay xen en fedora 11, solo kvm y necesito xen si o si. (y es > casi 100% necesario usar centos) Tu prueba es entre maquinas virtuales? > :( creo que tendré que comprar unas infiniband Yo creo que te volveria a pasar el mismo problema que con gigabit porque te falta la rigurosidad para determinar donde esta el cuello de botella. Tienes que dejar el minimo de piezas y asegurarte que por lo menos algo anda a gigabit, ni siquiera has medido cual es la velocidad de leer o escribir un archivo... [] -- Aldrin Martoq http://aldrin.martoq.cl/
Re: bonding y balanceo de carga (no balancea)
Que probaste? rsync, scp, mi programa? Comparaste con localhost? si, probé de todo y tengo 3 veces mejor performance en fedora con el bonding funcionando que en centos. Que unidades son esas? b con minusculas es bit, B con mayusculas es Byte. 90mbps esta LEJOS de gigabit. http://en.wikipedia.org/wiki/Data_rate_units Si te refires a 90MiB/s quizas estas topando con otra limitante como algun switch entremedio? Como estan conectados los tarros? son 90MiB/s y comprueba que el cuello de botella es la red.
Re: bonding y balanceo de carga (no balancea)
2009/7/19 Felipe Román Márquez > > >> Que probaste? rsync, scp, mi programa? Comparaste con localhost? >> > > si, probé de todo y tengo 3 veces mejor performance en fedora con el > bonding funcionando que en centos. ¿Qué protocolo exactamente estás probando? Atte, JCO
Re: bonding y balanceo de carga (no balancea)
un poco más detallado. es para un cluster activo/pasivo que usa drbd y es vital para el rendimiento de esto el performance de la red. ya hice pruebas a los discos, locales y remotas, y todo lo sugerido en los post anteriores. con las mismas pruebas usando fedora 11 con un bonding modo 6 el performance es 3 veces lo que da en centos. si le sacaba un cable de una tarjeta de red bajaba a 60MB/ss aprox con 1 daba 30MB/s y con las 3 cercano a los 90-100MB/s en centos con 1, 2, 3 o 4 tarjetas en bonding con la misma confing no da más que 30MB/s (en las mismas pruebas) bajé los modulos actualizados de intel y los instalé funciona la red pero el bonding sigue sin balancear carga. (cosa que como dije si funciona en fedora) el modulo igb y e1000e en fedora tiene una versión completamente distinta a las oficiales de intel y a las que vienen con centos 5.3, no pude portear los modulos de fedora a centos. El 20-07-2009, a las 0:16, Juan C. Olivares escribió: 2009/7/19 Felipe Román Márquez Que probaste? rsync, scp, mi programa? Comparaste con localhost? si, probé de todo y tengo 3 veces mejor performance en fedora con el bonding funcionando que en centos. ¿Qué protocolo exactamente estás probando? Atte, JCO
Re: bonding y balanceo de carga (no balancea)
2009/7/20 Felipe Román Márquez : > un poco más detallado. > es para un cluster activo/pasivo que usa drbd y es vital para el rendimiento > de esto el performance de la red. > ya hice pruebas a los discos, locales y remotas, y todo lo sugerido en los > post anteriores. > con las mismas pruebas usando fedora 11 con un bonding modo 6 el performance > es 3 veces lo que da en centos. > si le sacaba un cable de una tarjeta de red bajaba a 60MB/ss aprox > con 1 daba 30MB/s y con las 3 cercano a los 90-100MB/s Nones! tu problema no es que el balanceo no funciona, sino que no obtienes la velocidad esperada con 1 solo cable! Como referencia, una conexión gigabit da cerca de 100MiB/s; con 3 debieras obtener en teoría 300MiB/s. Insisto: aisla el problema asegurando que al menos ALGO funciona a la velocidad que esperas: conecta los servidores con un solo cable (sin bonding!) entre dos tarros (sin switchs!) con un programa que involucre solo cpu y red (el programa python que publiqué por ejemplo). Tienes los números de referencia: a si mismo, eran 750MiB/s; entre dos computadores conectados directamente via gigabit: 111MiB/s. Si no obtienes al menos 100MiB/s con esta configuración, es que algo anda mal y es lo primero que debes resolver. Si obtienes menos de 750MiB/s a localhost, es que algo peor esta pasando y también deberás resolver. Publica tus números acá. > en centos con 1, 2, 3 o 4 tarjetas en bonding con la misma confing no da más > que 30MB/s (en las mismas pruebas) > bajé los modulos actualizados de intel y los instalé funciona la red pero el > bonding sigue sin balancear carga. (cosa que como dije si funciona en > fedora) > el modulo igb y e1000e en fedora tiene una versión completamente distinta a > las oficiales de intel y a las que vienen con centos 5.3, no pude portear > los modulos de fedora a centos. Mi prueba fue entre un dell d820 (broadcom) y un macbook1,1 (marvell) ... Veamos como te va primero... -- Aldrin Martoq http://aldrin.martoq.cl/