implementación automatizada de Linux y gestión de configuración a pequeña escala: ¿vale la pena?


24

Estoy a punto de desplegar ~ 25 servidores con Debian . Las máquinas tendrán diferentes roles: servidores web, servidores de aplicaciones Java, servidores proxy, cajas MySQL. El entorno probablemente no crecerá mucho en el futuro, tal vez de 2 a 5 servidores más en los próximos 2 años.

Probablemente usaré fai para la instalación del sistema, pero no estoy seguro si vale la pena agregar también cfengine o gestión de configuración centralizada de marionetas para una escala tan pequeña.

¿La gestión de la configuración tiene sentido para un entorno de este tamaño?

Respuestas:


29

Recomendaría usar una mezcla de pre-siembra de Debian, donde le das al instalador un archivo de texto que responde a todas las preguntas que haría, y Puppet.

La razón para usar la configuración previa, en lugar de FAI, es que no tiene que configurar una imagen primero y tratar de mantenerla actualizada. Terminarás con una instalación muy similar a la que tendrías si las hicieras todas a mano. Cuando venga a instalar una nueva versión, tendrá que actualizar un archivo de configuración con los cambios, en lugar de tener que reconstruir una nueva imagen.

Una herramienta de administración de configuración es particularmente útil cuando tiene varios servidores que desempeñan el mismo rol y desea que sean idénticos, por ejemplo, el clúster de servidores web. Sin embargo, también pueden ser útiles para configurar la instalación base de todos los servidores. Querrá instalar paquetes particulares en todos sus servidores, como ntpd y un MTA. Querrá cambiar un archivo de configuración en todos sus servidores. Un beneficio adicional es que puede mantener sus manifiestos en algo como subversión y mantener un registro de lo que cambió en un servidor y quién lo hizo y por qué. La administración de la configuración también puede ser un salvavidas en el caso de una falla del servidor y necesita reconstruirlo rápidamente. Instale el sistema operativo (usando FAI o preseeding), instale Puppet y listo, reconstruido exactamente como estaba antes. Obviamente, deberá mantener copias de seguridad de los datos.

La administración de la configuración requiere dedicación para asegurarse de que solo realice cambios al usarla y tendrá un costo inicial para configurar las cosas, pero una vez que tenga una configuración funcional, no se arrepentirá.

Puppet es la más moderna de las dos herramientas que has mencionado. Realmente lo recomiendo a cualquiera. La configuración es un lenguaje declarativo y es fácil de construir construcciones de nivel superior. También hay una comunidad muy grande a su alrededor y siempre hay personas bienvenidas para ayudar en la lista de correo o en el canal IRC.


gracias por una pista sobre la siembra previa. Estoy echando un vistazo a los documentos al respecto en este momento.
pQd

FAI es viejo skool; Definitivamente no lo recomendaría. Presentando + Marioneta ftw.
womble

Usamos FAI y cfengine, tenemos alrededor de 1000 máquinas y funciona muy bien. Vale la pena señalar que puede ingresar en la máquina a medida que se construye, por lo que puede facilitar la escritura de los micro scripts.
James

¿Viejo viejo de la escuela? ¡NO! FAI es sólida como una roca y tiene más de 10 años de experiencia. Eche un vistazo a la larga lista de usuarios de FAI en fai-project.org/reports
Thomas Lange el

Un buen consejo, utilizamos un enfoque similar y funciona bien. Sin embargo, no descartaría FAI. FAI no usa imágenes para la instalación (SystemImager hace eso). Debe configurar un directorio raíz nfs mínimo que se utiliza para ejecutar el instalador FAI. El proceso de instalación está automatizado con archivos de configuración y ejecución de varios enlaces definidos por el usuario. La ventaja sobre la preselección es que el concepto de clases FAI facilita el manejo de múltiples servidores (e incluso estaciones de trabajo) que tienen diferentes roles.
JooMing

10

Recomiendo CFengine para cualquier entorno que tenga más de 2-3 cuadros y en el que tenga algún concepto de 'plantillas' o servidores que desempeñen roles específicos.

¿Por qué? En pocas palabras, reduce los errores, tiene una herramienta que garantizará que los permisos de archivo / directorio sean correctos en todas partes del entorno y cuando venga a implementar más servidores, la herramienta maneja absolutamente todo y nunca comete errores.

Contraste incluso con un administrador del sistema experto que implementa un servidor web al final de un turno de doce horas cuando las cosas ya salieron mal ... ¿Es probable que recuerden ese pequeño y desagradable archivo de configuración que debe ir en / etc / random / location / foo / bar, de lo contrario, la aplicación no podrá hacer algo bastante importante, como facturar a los clientes. :)

Herramientas como CFengine también son una excelente manera de realizar actualizaciones de seguridad en todo el entorno. Dejar caer una configuración de Nagios (NRPE) en todos los cuadros también es un obstáculo. Ya sea que esté tratando con cinco cajas o quinientas cajas , ahorrará tiempo con CFengine.

Probablemente valga la pena señalar que mi entorno es un poco más grande, sin embargo, también he implementado CFengine para entornos más pequeños de lo que observa, ¡de ahí la recomendación!

¿Probablemente su próxima pregunta será CFengine vs Puppet? Esa es una decisión más difícil, y siempre he ido a CFengine debido a (en los primeros días) cierta inmadurez de Puppet, particularmente en lo que respecta al registro de errores ... en estos días realmente no estoy seguro: ¿tienen un play 'n see? Mirando hacia atrás a mis problemas específicos con Puppet, estaban relacionados con el certificado SSL, dolorosamente aún recuerdo el tiempo que pasé 3 horas diagnosticando problemas de conectividad del servidor <-> cliente en irc.freenode.net/#puppet con algunos RTFM y RTFS fuertes solo para encontrar un error, no se registra, y Luke dijo: "Ah, eso es realmente difícil de solucionar" y nunca lo hizo. :(


buen punto. El problema es que en mi caso las cosas van a ser altamente especializadas, el número de plantillas [debido a la redundancia] probablemente será de alrededor de n / 2 [donde n es el número total de servidores].
pQd

1
Eso no es malo, la mayoría de mis grupos WWW son n + 2 si no n / 2 y puede ser bastante flexible con CFengine en la implementación de nodos detrás de sus equilibradores de carga como HAproxy. Es perfectamente viable administrar IPVS y cosas de keepalive también :-) Incluso con n / 2 requisitos de redundancia, ¿apostaría a que tiene muchos archivos de configuración idénticos o similares en su entorno? Recuerde que con CFengine usted tiene la herramienta 'editfiles' para hacer cosas como un archivo de configuración "con plantilla" que contiene algo como IP y luego (en tiempo de ejecución) encontrar y reemplazar con la información correcta. ;)
nixgeek

@astinus gracias por tus comentarios. También estoy un poco asustado de que mi producción disminuya por problemas en la configuración central. ¿Qué piensa sobre deshabilitar el sondeo automatizado de la configuración y el inicio de sesión en cada una de las máquinas y obligarlo a actualizar y verificar manualmente si todo está bien? [sí, también tendré nagios / monitoreo personalizado en su lugar ... pero aún así].
pQd

1
Creo que la confianza en sus técnicas de administración de la configuración viene con el tiempo, pero mientras tanto, simplemente deshabilite el sondeo automático de cuadros y use 'cssh' para iniciar sesión en cada clase de cuadros para ejecutar 'cfagent -qv' (¡o lo que sea!) Cuando quieres enviar actualizaciones. Si desea un consejo superior para aumentar la confianza, implemente una máquina virtual como un entorno de 'preparación' y asegúrese de que todos los cambios se realicen primero. Bastante fácil si mantiene su configuración de CFengine o Puppet en Subversion, solo use ramas y etiquetas.
nixgeek

También recomendaré usar SLACK para simplificar ridículamente la (re) instalación de sistemas, la gestión de la configuración. Está disponible aquí: sundell.net/~alan/projects/slack
HK_

5

Además de cfengine y títeres, también hay chef . Sugeriría encarecidamente utilizar una de estas herramientas, ya que las cosas siempre crecerán en direcciones inesperadas. Esto ayuda a administrar las cosas en una ubicación centralizada.

Lo importante a reconocer es que es probable que no obtenga todo, pero si al menos puede obtener el 90% allí, es un comienzo. Además, es divertido y te hará la vida más fácil a largo plazo. Por último, es una buena habilidad seguir adelante.


chef es una entrada reciente en la escena de gestión de configuración. Está diseñado para configurarse escribiendo ruby ​​para hacer lo que quieras, a diferencia del lenguaje declarativo personalizado de Puppet. El tiempo dirá qué método funciona bien. Actualmente me siento en el campamento de marionetas.
David Pashley

3

Estoy usando cfengine desde hace 5 años para instalar Debian (desde Woody hasta Lenny hoy en día). Con etch construyo un instalador de Debian personalizado. Gracias a la preselección surge una sola pregunta: "cuál es el nombre de host". Después de esto, cfengine configura todo el servidor (dns + dhcp con dnssec, samba, ntpd, usuarios y contraseñas predeterminados (Samba), ssh, openvpn, apache vHosts, copia de seguridad con rsnapshot en LVM, webminmodules personalizados, etc.).

Incluso cuando instalo solo un servidor, uso cfengine-scripts de mi caja de herramientas de esta manera:

control:

  Repository  = ( $(CFREPO) )
  IfElapsed = ( 0 )
  Syslog = ( on )
  actionsequence = ( editfiles shellcommands )
  CPTYPE = ( sum )

editfiles:
  { /etc/sysctl.conf
    # don't spam on tty:
    BeginGroupIfNoSuchLine "kernel.printk.*=.*2 4 1 7"
      DeleteLinesMatching "^kernel.printk.*=.*"
      Append "kernel/printk=2 4 1 7"
    EndGroup
    # no E(xplicit?) C(ongestion) N(otification) 
    BeginGroupIfNoSuchLine "net.ipv4.tcp_ecn.*=.*0"
      DeleteLinesMatching "^net.ipv4.tcp_ecn.*=.*"
      Append "net/ipv4/tcp_ecn=0"
    EndGroup
    BeginGroupIfNoSuchLine "net.ipv4.ip_forward.*=.*1"
      DeleteLinesMatching "^net.ipv4.ip_forward.*=.*"
      Append "net/ipv4/ip_forward=1"
    EndGroup
    DefineClasses "configchange_sysctl"
  }

shellcommands:
  configchange_sysctl::
    "/sbin/sysctl -p /etc/sysctl.conf"

# vim: set ts=2:

Me gusta cfengine, porque los scripts cf2 son algo legibles para los humanos.

así que definitivamente vale la pena trabajar con herramientas para la gestión automática de la configuración.

/ thorsten


2

Tiene que valer la pena incluso para un sitio pequeño. Se trata de consistencia a medida que crece. Y sabes que tu sitio va a crecer. Lo mejor es comenzar mientras aún eres pequeño. Cfengine es asombroso. Especialmente la versión 3, que puede manejar todos los gestores de paquetes en todo el campo, y es realmente ligera y segura y "simplemente funciona". Puppet simplemente no entregó lo que decía. No he probado chef.

La ventaja de cfengine sobre los demás es que es ultraligera, pero en realidad tiene más capacidades. Su seguridad es como ssh, en lugar de los certificados web utilizados por Puppet. Cuando le conté a mi jefe sobre cfengine, pensó que era ciencia ficción :) Si está buscando algo futurista, intente leer algunos de los trabajos de investigación de Marc Burgess. Cosas interesantes.


1

La herramienta número uno que desearía tener al ejecutar un sitio pequeño son las compilaciones de "botones". Facilita los parches, las actualizaciones y las reconstrucciones, lo que puede abordar una miríada de otros problemas en el futuro.

¿No hay ssh instalado correctamente en todas las cajas? sin curl / wget / vim tampoco? ¿Qué pasa con otras herramientas internas que le gustaría tener en cada caja?

Tener una administración central de sus servidores es una de las primeras herramientas que debe tener para trabajar para facilitar los esfuerzos futuros.


1

Estoy de acuerdo con todos aquí. Debe comenzar a aprender y configurar una infraestructura de trabajo cuando no sea demasiado grande. Porque entonces estás preparado cuando crezcas.

Dependiendo de lo que quieras ejecutar, elegiría FAI, cfengine y pre-siembra para Debian / Ubuntu. FAI puede funcionar con muchas herramientas diferentes, por lo que es un buen comienzo para cualquier distribución similar a Debian. Con la configuración controlada por clase FAI (y cfengine), puede dividir fácilmente sus instalaciones en pequeños módulos, que luego puede seleccionar cuál usar para cada una de sus máquinas. De esta manera, será útil incluso si tiene muchas máquinas diferentes. En realidad, es más útil, ya que documentará su instalación con estos scripts. Y cuando instale en una nueva máquina, no olvidará nada.

Sí, DEBE tener algunas máquinas para probar antes de implementar sus cambios en una instalación en vivo. Pero con un script de configuración como este, no olvidará realizar ningún paso en la instalación en vivo.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.