Administración masiva / remota de Linux

10

Además de nuestra infraestructura de TI interna, tenemos alrededor de 500 máquinas Linux que alojan nuestros servicios para el mundo en línea. Se agrupan en un grupo de grupos como Base de datos An, Producto An, NFS, Backoffice, etc. Además, son administrados por un proveedor externo, de acuerdo con nuestras especificaciones y requisitos.

Sin embargo, enfrentamos muchos problemas durante el desarrollo, despliegue e implementación de software (web), especialmente porque los entornos de desarrollo y puesta en escena no tienen casi nada en común con los sistemas en vivo (evito los detalles desagradables ...) .

Por lo tanto, intenté crear máquinas virtuales, copié los diversos sistemas en vivo de la manera más exacta posible y los preparé para conectarse, por ejemplo, a las bases de datos de desarrollo en lugar de las "reales" de forma transparente para los desarrolladores (no lo son root). Esto funciona bastante bien, pero ...

Me preguntaba cómo se podrían administrar esos sistemas de forma remota y a granel . ¿Hay alguna familia de software que no conozca? ¿O, al menos, algunas técnicas o principios con los que uno debería estar familiarizado?

Proporcionaríamos a cada desarrollador un montón de imágenes para que se ejecuten localmente (VirtualBox). El departamento de control de calidad. obtendría clústeres virtuales (XEN o Hyper-V). Si necesito proporcionar un módulo de servidor adicional, redirigir una nueva conexión de base de datos o simplemente quiero actualizar todo lo proporcionado por el administrador de paquetes ... ¿cómo podría hacerlo sin tener que iniciar sesión en todos los sistemas y / o ¿pedirle a mis colegas que descarguen y ejecuten algún script de fijación?

Creo que hay muchas soluciones. Bueno, de alguna manera soy demasiado estúpido para ingresar las palabras clave correctas en los motores de búsqueda ... ¿O no es este problema tan trivial como parece?

Para el registro:

  • Casi todos los sistemas están ejecutando Debian GNU / Linux 6.x "squeeze"
  • Ningún desarrollador está obligado a usar un sistema operativo particular en su estación de trabajo
  • El presupuesto es limitado, por supuesto, pero no demasiado pequeño para comprar software propietario.
  • Se prefiere una solución que involucre a nuestro proveedor antes mencionado
mjhennig
fuente

Respuestas:

15

Depende de lo que necesita exactamente y de lo que está buscando. Pero, en general, existen múltiples soluciones para la " gestión de la configuración como:

  1. marioneta
  2. cocinero
  3. cfengine
  4. ansible
  5. sal

etc. Yo personalmente recomendaría títeres, ya que tiene una gran comunidad y muchas recetas externas proporcionadas. Esto le permite configurar y administrar sistemas automáticamente. Si combina esto con repositorios propios y actualizaciones automáticas, por ejemplo unattended-upgrades, puede actualizar automáticamente el sistema.

Otra solución es proporcionar sus propios paquetes, como company-baseetc., que depende automáticamente del software necesario y puede configurar su sistema automáticamente.

También debe buscar implementaciones automatizadas (barebone y virtualizadas). Si combina esto con la gestión de la configuración o su propio repositorio, puede automatizar y reinstalar fácilmente sus sistemas. Si desea comenzar con la instalación automatizada, eche un vistazo a la forma que admite libvirt, así como las instalaciones completas y tiene soporte integrado para títeres. Si quiere hacerlo usted mismo, puede buscar kickstart (redhat et. Al.) O "preseeding" para configurar automáticamente su sistema. Para Debian también puede usar algo como debootstrap o un contenedor llamado grml-debootstrap que admite imágenes virtualizadas.

Para ayudar a proporcionar las imágenes de VirtualBox para que su desarrollador eche un vistazo a vagabundo, le permite automatizar la creación de sistemas virtualizados con VirtualBox que admite scripts de chef, títeres y shell para personalizar su entorno virtual.

Si desea utilizar la solución de su proveedor actual, debe preguntarles cómo administran sus sistemas, pero probablemente será algún tipo de gestión de configuración. Es posible ejecutar su agente en sus sistemas si puede acceder al servidor de configuración.

Para Google palabras clave miran en devops, configuration management, it automationy server orchestration.

En resumen, automatice tanto como sea posible y ni siquiera piense en hacer cosas manuales.

Ulrich Dangel
fuente
1
¡Gracias! Eso es un montón de cosas para leer, pero parece bastante prometedor.
mjhennig
@mjhennig acabo de agregar más información también re. despliegue. Hay muchos recursos disponibles, pero lo más importante es que realmente no debe hacer cosas por su cuenta a través de shells ssh / distribuidos, sino que tiene algún tipo de sistema para ello.
Ulrich Dangel
2
No hay nada de malo en hacer cosas por su cuenta, especialmente si las herramientas disponibles no se ajustan al propósito. Los sistemas como Puppet son en gran medida herramientas de administración del sistema, no gestión de configuración, per se. La gran mayoría de los sistemas que uso ni siquiera son accesibles desde un servidor central, sino desde las computadoras portátiles de los usuarios a través de (de todas las cosas) vpn: han estado tratando de cambiar esto durante tres años. Nuestro departamento de TI está dividido por regiones porque cada región no puede acceder a la otra correctamente. Los guiones de cosecha propia son necesarios en algunas situaciones. Ahí también es donde comienza la innovación.
Arcege
3
@Arcege acabo de votar tu comentario, los scripts son necesarios y no tienes que convertir toda tu infraestructura de una vez. La parte más importante es automatizar las cosas y hacer que sea repetible. Pero la naturaleza descriptiva de títeres y chef tiene algunos aspectos únicos, por ejemplo, puede probar y verificar las clases de títeres cucumber-puppet. Por supuesto, puede desarrollar / hacer crecer su propio marco reutilizando los componentes existentes, pero parece que OP no tiene nada actualmente y, si comienza desde cero, creo que es mejor usar un marco existente.
Ulrich Dangel
Sí, estoy de acuerdo con las operaciones automatizadas / repetibles. Tengo una serie de scripts automatizados o de botón interno para interactuar entre sistemas existentes como Jenkins / Oc4j y la integración de Subversion / Bugzilla. Simplemente no estoy de acuerdo (fuertemente) con tu comentario "realmente no deberías hacer cosas por tu cuenta". A veces, los marcos existentes no son aplicables, como describí en mi situación.
Arcege
3

Ulrich ya dio la respuesta con respecto a la implementación del software y la configuración automática del servidor.

Los principios detrás de esto son

  • Defina cómo deberían ser sus servidores: esto incluye el software común que se instala de manera predeterminada, el esquema de partición y el diseño del sistema de archivos
  • Los servidores de producción, preparación, prueba y desarrollo no deberían diferir con respecto a estos estándares básicos (de lo contrario, se encontrará con problemas más adelante, como lo hizo)
  • Utilice una gestión de cambios adecuada para documentar TODOS los cambios que realizó (incluidos los pequeños cambios de una línea en cualquier configuración)
  • Siempre cambia primero en la prueba, luego en el desarrollo, luego en la puesta en escena y al final en la producción

Usted solicitó una herramienta útil para administrar grandes cantidades de servidores; mi favorito personal es cluster-ssh ( cssh). Escriba una vez y realice cambios en muchos servidores simultáneamente.

Si descubre un problema y tiene una solución que lo elimina:

  1. Aplique la corrección a Test / Dev / Staging / Prod (ver arriba) si realmente funciona
  2. Aplique la corrección a sus plantillas virtuales para que los futuros clones de VM no tengan ese error
  3. Aplique la corrección a su proceso de instalación física (kickstart / autoyast / lo que sea)
  4. Aplicar la corrección a TODOS los servidores

Si se enfrenta a una gran cantidad de servidores para arreglarlo, este es un proceso que debe estar bien documentado y, al final, un equipo diferente debe verificar si la corrección se ha aplicado por completo.

Empleamos Mantis (código abierto, PHP) para ese propósito.

Nils
fuente
2

Administro unos 30 productos y unos pocos cientos de servidores en varios países. Soy el administrador de configuración de software, por lo que no tengo acceso a la raíz (por diseño), no toco las bases de datos o sus servidores (nuevamente, por diseño) y tengo que saltar muchos obstáculos debido a la seguridad corporativa. Pero sí administro las configuraciones en prueba, preparación y producción, incluidos los enlaces y cambios de la base de datos. Tengo una serie de scripts que salen a los servidores que utilizan combinaciones de ssh, pythony Shell scripts.

Las cosas principales para pensar son:

  1. ¿Qué tipo de interacciones vas a tener con tus servidores? ¿Solo cargas de archivos? Ejecutando programas de línea de comandos? ¿Ejecutando clientes X remotos?
  2. ¿Qué nivel de seguridad se necesita para acceder a estos servidores? Cortafuegos, redes seguras, vpn? ¿Es sshsuficiente y desde una ubicación central segura?
  3. ¿Cuánto se puede automatizar en cada servidor? ¿Puede instalar un programa en cada servidor y ejecutarlo, o necesita transmitir el programa a través de algo como sshejecutarlo de forma remota? ¿Puedes escribirlo con expectuna invocación de línea de comandos o solo con ella ?

VirtualBox ofrece muchas herramientas de línea de comandos que puede administrar a través de sshsistemas o sistemas como puppetlo menciona Ulrich.

Arcege
fuente
2
Solo una pequeña sugerencia re. virtualbox, eche un vistazo a vagrantup.com , puede simplificar y automatizar la creación de imágenes virtuales.
Ulrich Dangel
Desafortunadamente, incluso obtener acceso simple a la red entre entornos de prueba remotos es casi imposible. Configurar una granja virtualbox sería aún más difícil. Tengo problemas para pedirle a TI que actualice el software estándar con lo que ha estado desactualizado durante más de un año porque no forma parte de los repositorios 'RedHat estándar'.
Arcege
Lo que ayudó en mi experiencia con el software obsoleto es mostrar que el software es EOL o que hay problemas de seguridad. La configuración de la red / las conexiones son a menudo mucho más difíciles de lograr, quizás intente enfatizar cómo conectar los diferentes entornos de prueba ayuda a ahorrar dinero, simplifica los procesos, ahorra tiempo de control de calidad o hace que el entorno de prueba sea más realista. También podría ayudar si se contratan personas de las diferentes sucursales.
Ulrich Dangel