Maximización del rendimiento y rendimiento de rsync: servidores gigabit conectados directamente

27

Tengo dos servidores Dell R515 que ejecutan CentOS 6.5, con uno de los NIC de Broadcom en cada uno directamente conectado al otro. Utilizo el enlace directo para enviar copias de seguridad del servidor principal en el par al secundario todas las noches usando rsync a través de ssh. Al monitorear el tráfico, veo un rendimiento de ~ 2 MBps, que es mucho menos de lo que esperaría de un puerto gigabit. He configurado el MTU en 9000 en ambos lados, pero eso no parece cambiar nada.

¿Existe un conjunto recomendado de configuraciones y optimizaciones que me llevarían al máximo rendimiento disponible? Además, dado que estoy usando rsync sobre ssh (o potencialmente solo NFS) para copiar millones de archivos (~ 6Tb de archivos pequeños, un enorme almacén de correo de Zimbra), las optimizaciones que estoy buscando podrían necesitar ser más específicas para mi caso de uso particular .

Estoy usando ext4 en ambos lados, si eso importa

Gracias

EDITAR: He usado las siguientes rsyncopciones con resultados bastante similares:

rsync -rtvu --delete source_folder/ destination_folder/

rsync -avHK --delete --backup --backup-dir=$BACKUPDIR source_folder/ destination_folder/

Actualmente, estoy viendo el mismo nivel de mal rendimiento cuando lo uso cppara una exportación NFS, a través del mismo enlace de cable directo.

EDIT2: después de finalizar la sincronización, pude ejecutar iperfy encontré que el rendimiento era de alrededor de 990Mbits / seg, la lentitud se debió al conjunto de datos real en uso.

dyasny
fuente
1
Debe agregar rsync a sus etiquetas. ¿Verificó la hora de la parte de listado de rsync? El bajo rendimiento puede deberse a archivos pequeños. ¿Puedes publicar tu comando rsync para verificar las opciones?
kranteg
@kranteg, ver edición
dyasny
2
Verifique la conectividad con iperf.
ewwhite
Sí, iperf espectáculos 991mbits / s, supongo que es te conjunto de datos que era tan lento
dyasny
No puede tener un buen throuphput con rsync y un conjunto de datos con archivos pequeños. Definitivamente deberías probar el alquitrán.
kranteg

Respuestas:

24

El recuento de archivos y la sobrecarga de cifrado SSH son probablemente las mayores barreras. No vas a ver la velocidad del cable en una transferencia como esta.

Las opciones para mejorar incluyen:

  • Uso de rsync + SSH con un algoritmo de cifrado menos costoso (p -e "ssh -c arcfour". Ej. )
  • Eliminando completamente el cifrado sobre el transporte SSH con algo como HPN-SSH .
  • Transferencias basadas en bloques. Las instantáneas, dd, instantánea ZFS envío / recepción , etc.
  • Si se trata de una transferencia única o poco frecuente, utilice tarnetcat ( nc), mbuffer o alguna combinación.
  • Verifique su tuned-admconfiguración de CentOS .
  • Eliminando el atime de sus montajes de sistema de archivos. Examinando otras opciones de montaje del sistema de archivos.
  • NIC enviar / recibir buffers.
  • Afinando tu rsynccomando. ¿Tendría -Wsentido la opción de archivos completos aquí? ¿Está habilitada la compresión?
  • Optimice su subsistema de almacenamiento para el tipo de transferencias (SSD, conteo de huso, caché de la controladora RAID).
ewwhite
fuente
He dejado SSH para NFS, viendo casi los mismos resultados. Lo que estoy planeando son las transferencias basadas en bloques, cambiar a copias de seguridad basadas en instantáneas LVM y dd las copias de seguridad al segundo servidor, donde ejecutaré ZFS para deduplicación. atime está desactivado en ambos lados. No se usa compresión. ¿Cómo optimizo el subsistema de almacenamiento para este tipo de transferencia? La fuente tiene dos unidades RAID10 sobre 12x 10k SAS, una en las unidades locales y la otra una MD1220. El servidor de respaldo tiene el mismo número de discos, pero con unidades SATA grandes y utiliza RAID5. Controladores de caché completo H800 y H700 en ambos lados. 2MBps (desde iftop) ~
dyasny
~ Me hace pensar que las redes son el cuello de botella aquí, no obstante.
dyasny
@dyasny Pruebe su red con iperfpara estar seguro.
ewwhite
1
Asegúrese de que la estructura del directorio de destino fue creada por rsyncy no por cp. ¡He visto que rsynctoma mucho más tiempo actualizar un árbol de directorio remoto creado originalmente por cp: 88GB actualizado con suma de verificación en 1h26m en lugar de 3h! Cómo crear el diseño inicial del disco es fundamental para obtener un buen rendimiento de actualización. El tiempo de CPU es el mismo; El tiempo real puede duplicarse. (La misma actualización sin checkumming se ejecuta en 13 minutos desde un SSD a un Seagate de 200 GB).
Ian D. Allen
3

Como probablemente sepa, copiar una gran cantidad de pequeños archivos (por ejemplo, buzones de correo con formato MailDir o similar) definitivamente no es la mejor opción para aprovechar las interfaces de alto ancho de banda. SSH probablemente tampoco sea el mejor protocolo de transporte para eso. Intentaría usar tar para crear un tarball en el host de origen antes de enviarlo a su host secundario.

tar c /var/mail | ssh root@secondary-host 'tar x -C /var/backups'

Si necesita una copia de seguridad incremental, puede probar las -gopciones de tar. Si aún necesita maximizar throuput, intente usar netcat en lugar de ssh.

alxgomz
fuente
Me cambié a NFS en lugar de SSH, para eliminar la sobrecarga de cifrado, no me alegro
dyasny
¿Has intentado usar tar? Puede ser como un primer paso intentar crear un tarbal local en el servidor primario y luego transferirlo a través del cable. (o pruebe su red con iperf como @ewwhite sugerido)
alxgomz
Lo haría, si tuviera espacio local de sobra. Esto es bastante grande, incluso con una caja DAS completamente poblada
dyasny
luego intente conectarlo sobre netcat o ssh (aunque esto no es tan eficiente)
alxgomz
Voy a estar el cambio a bloquear las copias de seguridad basadas en la tarde, y tengo la intención de tubería dda través de ncentonces. pero en este momento, estoy atascado con dos copias de seguridad enormes y luego necesito
moverlo
1

Intenta burlar los factores contribuyentes:

  • CPU (por ejemplo, dd de / dev / zero canalizado a través de loopback)
  • E / S de disco (por ejemplo, dd de un archivo grande canalizado a cat> / dev / null [canalizado para evitar cortocircuitos])
  • E / S de red física (por ejemplo, dd canalizado a la otra máquina)
  • etc.

y probándolos de forma independiente.

He tenido algunas malas experiencias con los controladores Broadcom, por lo que mi primera sugerencia es probar el ancho de banda de red utilizable con: dd if=/dev/zero bs=1m count=10k | rsh backup_host cat \> /dev/null

Scott Leadley
fuente
O iperf ...
ewwhite