Al instalar nuevos servidores, normalmente tiendo a olvidar algo que es necesario para que el servidor realmente funcione. Me gustaría tener algún tipo de verificación automática previa al vuelo para detectar funciones faltantes antes de iniciar el servidor por primera vez y tener usuarios activos ejecutándose en el servidor.
Digamos que estoy ejecutando un grupo de servidores de aplicaciones utilizando una plataforma como Tomcat o PHP detrás de un equilibrador de carga. El servicio normalmente requiere algunas de las siguientes cosas:
- software instalado (programas externos como wget o ImageMagick, etc.)
- módulos instalados (por ejemplo, libcurl, mod_rewrite, Oracle, etc.)
- archivos de configuración (por ejemplo, tnsnames, php.ini, etc.)
- sistemas de archivos montados, enlaces simbólicos en algún lugar, permisos específicos para algunos directorios
- Los puertos de red específicos deben ser accesibles desde la máquina (por ejemplo, mysql o un proxy http)
- Los puertos de red específicos deben ser accesibles en la máquina (esto debería probarse desde otra máquina, por ejemplo, rsync o el puerto 8080).
- Se deben iniciar procesos específicos.
- los cronjobs tienen que existir
Supongo que sería posible escribir pruebas unitarias para la mayoría de estas condiciones y ejecutarlas en cada máquina después de la instalación, pero preferiría una herramienta más específica para tal tarea, tal vez con un lenguaje especial similar a un shell para escribir las pruebas. (dado que se necesitan diferentes herramientas para probar todo, esto implicaría ejecutar scripts de Perl, programas Java, verificar archivos, permisos, líneas en archivos confidenciales, etc.).
Debo agregar que no quiero poder arreglar los elementos que faltan, solo quiero verificar si tengo que solicitar cambios adicionales a los colegas de operaciones.
Respuesta1
La forma en que hacemos esto es usando CFengine (pero Puppet funcionaría igual de bien) para configurar nodos individuales basados en una configuración centralizada. CFengine aplicará la configuración correcta de la máquina en el orden adecuado y seguirá haciéndolo, por ejemplo, los procesos se reiniciarán si se detienen.
En todos los nodos hay un script disponible para verificar una serie de cosas (si los archivos en el almacenamiento central son legibles, si se pueden abrir una conexión al clúster MySQL, etc.). El balanceador de carga utiliza este script como verificación de estado: solo si todas las comprobaciones pasan, el nodo devolverá el valor que espera el balanceador de carga y se marcará como "activo" y se le permitirá manejar el tráfico.
Respuesta2
Debe documentar su proceso de compilación antes de poder crear un script para probar la "preparación" de sus nuevos sistemas. El documento del proceso le brindará la lista de verificación que desea verificar y una compilación consistente de cada servidor. Cfengine y Puppet son excelentes formas de automatizar compilaciones, pero para usarlos necesitas una lista de todo lo que debe configurarse.