Gestión centralizada de MySQL en un DataCenter

Cuando el número de servidores que administras es pequeño, realizar tareas sobre estos no supone un gran problema. Pero cuando se empieza a superar el número de pestañas que entran en el terminal, empiezas a tener un problema. El uso de una administración centralizada te permite tener el control total de las configuraciones, paquetes y servicios que hay en cada servidor desde un punto central, aliviando así la carga de trabajo y manteniendo un entorno lo más homogéneo posible.

Para llevar a cabo esta tarea existen múltiples soluciones en el mundo del Software Libre. Estas semanas he dedicado parte de mi tiempo libre a rellenar esta laguna de conocimientos que tenía como sysadmin y el elegido ha sido Puppet.

Puppet es una herramienta de gestión centralizada de servidores, basado en Ruby y con un lenguaje declarativo muy parecido a este. Existen múltiples módulos para gestionar servicios como Apache, nginx, Postfix, Cron, etc. Y lo más importante, gran parte de estos, por ejemplo el de la gestión de paquetes, es independiente de la distribución final. Usando el lenguaje de Puppet, a un nivel superior, indicando que quieres tener instalado el paquete X, el agente de Puppet en el lado del cliente se encargará de usar yum, apt-get, emerge o lo que sea necesario para cumplir la tarea indicada.

Para poner en práctica mis conocimientos, he desarrollado un módulo de MySQL que ahora comparto con todos vosotros. La razón para elegir son varías:

  • Es un servicio que conozco
  • Los módulos realizaban pequeñas tareas, no había uno que hiciese de todo un poco
  • Porque si

Así que me puse manos a la obra, y aquí está el resultado:

https://github.com/miguelangelnieto/puppet-mysql

Con este módulo de Puppet, podréis gestionar todos los MySQL de vuestro datacenter desde un Puppet Master con una sintaxis sencilla. Las tareas que se podrán realizar son:

  • Instalar el paquete de MySQL Server
  • Gestionar la activación en arranque y la puesta en marcha del servicio
  • Configurar my.cnf
  • Importación de bases de datos
  • Creación de usuarios y dar privilegios

¿Cómo lo hacemos? El ejemplo que vemos a continuación demuestra todo lo que se puede hacer. Configuración de un nodo de bases de datos MySQL:

node 'debian.client.puppet' {
    include mysql
mysql::config_file {
        "/etc/mysql/my.cnf":
        max_connections => "100",
        bind_address => "10.10.0.2",
        key_buffer => "40M",
        query_cache_size => "0",
    innodb_buffer_pool_size => "120M";
        }
mysql:😃b {
    "test":
    source_file => "test.sql"
    }
mysql::grants {
    "admin_test":
    user => "admin",
    password => "4dm1n",
    db => "test",
    privileges => "all privileges";
    }
}

Como se puede ver la sintaxis es fácil de leer. La configuración, dividida en tres partes, genera un fichero my.cnf a medida, crea la base de datos test usando como origen el dump test.sql y finalmente, crea el usuario admin y le da all privileges a dicha base de datos.

Este ejemplo es para una sola máquina, debian.cliente.puppet, pero si eliminamos el nombre y en su lugar ponemos una expresión regular o simplemente "default" tendremos nuestros cientos de servidores gestionados desde un único punto central. Podrás crear cientos de bases de datos, asignarlo a otros cientos de usuarios y generar una configuración de my.cnf acorde a dichas bases de datos.

Respecto a las posibilidades de parametrización de my.cnf, las opciones que se pueden configurar están reflejados en https://github.com/miguelangelnieto/puppet-mysql/blob/master/modules/mysql/manifests/config_file.pp Si se desean añadir más, lo único que habría que hacer es editar este fichero y reflejar los cambios en el template https://github.com/miguelangelnieto/puppet-mysql/blob/master/modules/mysql/templates/my.erb

Gracias a este módulo podremos gestionar todos los MySQL de nuestro DataCenter de forma fácil y sencilla, meter nuevos servidores en producción en tiempo record y lo más importante, trabajar con un entorno homogéneo y desde un punto único y central.


Comments