Las implementaciones manuales son comunes, pero pueden ser lentas y monótonas. Si alguna vez probó la instalación de Oracle RAC con la configuración de Data Guard en más de tres nodos, sabe a lo que me refiero. Dependiendo de la cantidad de nodos, los pasos de implementación pueden consumir mucho tiempo y es probable que se produzcan errores. Por supuesto, hay muchos buenos "cómo hacer" sobre cómo hacer una configuración manual de un clúster de base de datos, sin embargo, con el enfoque manual en una escala, hay muchas preguntas adicionales que abordar.
¿Las otras instancias en mi entorno están configuradas de la misma manera? ¿Ese sistema de control de calidad se configuró de la misma manera que la producción? ¿Si lo que acabamos de implementar está listo para la producción? Para abordar todas esas preguntas, las implementaciones se automatizan cada vez más a través de herramientas de administración de configuración.
Recursos relacionados Automatización de bases de datos con Puppet:implementación de la replicación de MySQL y MariaDB Cómo automatizar la implementación de MySQL Galera Cluster usando s9s CLI y Chef Cómo automatizar la migración de MySQL independiente a Galera Cluster usando Ansible ClusterControl para MariaDBLas herramientas de administración de configuración populares como Puppet, Chef y Ansible son tecnologías probadas en la implementación de varios servicios de TI. Ayudan a eliminar el trabajo manual, minimizan el riesgo de error humano y permiten una implementación rápida. En el blog de hoy, echaremos un vistazo a uno de ellos.
Ansible es una herramienta de gestión de sistemas de código abierto para centralizar y automatizar la gestión de la configuración. Con Ansible, puede automatizar fácilmente varias implementaciones de bases de datos y realizar tareas de administración sencillas. Mostraremos cómo instalar y configurar automáticamente software como el servidor MySQL en entornos reproducibles. En este blog, nos centraremos en la replicación de MariaDB, pero si está interesado en otras tareas, consulte nuestros otros blogs donde escribimos más sobre Ansible.
Vagrant, Virtualbox y Ansible
Ansible puede ayudar a implementar MySQL Cluster en la nube o en las instalaciones. A los efectos de este blog, vamos a utilizar la configuración popular para ejecutar varias pruebas en máquinas de escritorio con Vagrant y Virtualbox.
Vagrant es un sistema que le permite crear y mover fácilmente entornos de desarrollo de una máquina a otra. Simplemente defina qué tipo de VM desea en un archivo llamado Vagrantfile y luego enciéndalas con un solo comando. Se integra bien con proveedores de máquinas virtuales como VirtualBox, VMware y AWS y, lo que es importante para nuestra tarea, tiene un gran soporte de Ansible.
Nuestro Vagrantfile implementa 2 instancias en la plataforma VirtualBox, una para el nodo maestro y la segunda para el nodo esclavo. Luego usaremos Ansible para ejecutar la instalación de los paquetes necesarios y ejecutar la configuración de un maestro/esclavo. A continuación se muestra la lista de tareas que vamos a realizar.
- Instalar Vagrant y Virtualbox
- Configurar el archivo vagabundo y el libro de jugadas ansible
- Lanzar las instancias
- Descargue las cajas de Vagrant relacionadas y Vagrantfile (esto se hace automáticamente)
- Ejecute el libro de jugadas de Ansible (esto se hará automáticamente)
- Agregue el clúster a ClusterControl para la tarea de supervisión y gestión (como copias de seguridad, seguridad, gestión de usuarios, gestión del rendimiento y muchas otras).
Instalación de Vagrant, Virtualbox y Ansible en Ubuntu
Instalar paquetes
sudo apt-get install ansible vagrant virtualbox
Crea archivos de configuración para Vagrant y Ansible
$ mkdir mariadbtest
$ vi Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.provision "ansible" do |ansible|
ansible.playbook = "maria.yml"
ansible.sudo = true
end
config.vm.define "master" do |master|
master.vm.hostname = "master"
master.vm.network "forwarded_port", guest: 3306, host: 3336
master.vm.network "private_network", ip: "192.168.10.2"
end
config.vm.define "slave" do |slave|
slave.vm.hostname = "slave"
slave.vm.network "forwarded_port", guest: 3306, host: 3337
slave.vm.network "private_network", ip: "192.168.10.3"
end
config.vm.provider "virtualbox" do |v|
v.memory = 1024
v.cpus = 2
end
end
El archivo vagabundo anterior creará dos máquinas con la siguiente configuración:
- Maestro:2 CPU, 1 GB de RAM, IP privada:192.168.10.2 Reenvío de puerto:3336
- Esclavo:2 CPU, 1 GB de RAM, IP privada:192.168.10.3, Reenvío de puerto:3337
Estructura del libro de jugadas
En este paso, definiremos el libro de jugadas de Ansible. Ansible usa YAML como un lenguaje de marcado fácil para definir instrucciones. Creamos el siguiente “maria.yml” basado en el archivo Ansible entregado por Mariadb.
$vi maria.yml
- hosts: master:slave
user: vagrant
tasks:
- name: Install MariaDB repository
apt_repository: repo='deb http://ftp.igh.cnrs.fr/pub/mariadb/repo/10.3/ubuntu trusty main' state=present
- name: Add repository key to the system
apt_key: keyserver=keyserver.ubuntu.com id=0xcbcb082a1bb943db
- name: Install MariaDB Server
apt: name=mariadb-server state=latest update_cache=yes
- name: Install python module
apt: name=python-mysqldb state=installed
- name: Create replication account
mysql_user: name=repl host="%" password=s3cr3tPaSSwordR priv=*.*:"REPLICATION SLAVE" state=present
- name: Create readwrite user
mysql_user: name=rwuser host="%" password=s3cr3tPaSSwordR priv=*.*:SELECT,INSERT,UPDATE,DELETE,CREATE,DROP state=present
- name: Modify configuration file to listen on all interfaces
lineinfile: dest=/etc/mysql/my.cnf regexp="^bind-address" line="bind-address=0.0.0.0"
- hosts: master
user: vagrant
tasks:
- name: Modify configuration file to setup server ID
lineinfile: dest=/etc/mysql/my.cnf regexp="^#server-id" line="server-id=1"
- name: Restart mysql service
service: name=mysql state=restarted
- name: Reset master binlog
command: /usr/bin/mysql -u root -e "RESET MASTER"
- hosts: slave
user: vagrant
tasks:
- name: Modify configuration file to setup server ID
lineinfile: dest=/etc/mysql/my.cnf regexp="^#server-id" line="server-id=2"
- name: Setup replication
command: /usr/bin/mysql -uroot -e "CHANGE MASTER TO master_host='192.168.10.2', master_user='repl', master_password='s3cr3tPaSSwordR', master_use_gtid=current_pos"
- name: Restart mysql service
service: name=mysql state=restarted
ClusterControlConsola única para toda su infraestructura de base de datosDescubra qué más hay de nuevo en ClusterControlInstale ClusterControl GRATIS Ahora es el momento de las instancias. Vagrant up activará la instalación del libro de jugadas.
$ vagrant up
DEPRECATION: The 'sudo' option for the Ansible provisioner is deprecated.
Please use the 'become' option instead.
The 'sudo' option will be removed in a future release of Vagrant.
==> vagrant: A new version of Vagrant is available: 2.2.4 (installed version: 2.2.3)!
==> vagrant: To upgrade visit: https://www.vagrantup.com/downloads.html
Bringing machine 'master' up with 'virtualbox' provider...
Bringing machine 'slave' up with 'virtualbox' provider...
==> master: Box 'ubuntu/trusty64' could not be found. Attempting to find and install...
master: Box Provider: virtualbox
master: Box Version: >= 0
==> master: Loading metadata for box 'ubuntu/trusty64'
master: URL: https://vagrantcloud.com/ubuntu/trusty64
==> master: Adding box 'ubuntu/trusty64' (v20190429.0.1) for provider: virtualbox
master: Downloading: https://vagrantcloud.com/ubuntu/boxes/trusty64/versions/20190429.0.1/providers/virtualbox.box
master: Download redirected to host: cloud-images.ubuntu.com
master: Progress: 7% (Rate: 551k/s, Estimated time remaining: 0:14:31)
Bringing machine 'master' up with 'virtualbox' provider...
Bringing machine 'slave' up with 'virtualbox' provider...
Si no tiene una imagen de ubuntu de Virtualbox ya descargada, Vagrant la descargará automáticamente como en el ejemplo anterior.
PLAY [master:slave] ************************************************************
TASK [Gathering Facts] *********************************************************
ok: [slave]
TASK [Install MariaDB repository] **********************************************
changed: [slave]
TASK [Add repository key to the system] ****************************************
changed: [slave]
TASK [Install MariaDB Server] **************************************************
Después de la instalación exitosa del libro de jugadas, verá el siguiente resultado y debería poder iniciar sesión en la base de datos con credenciales predefinidas (consulte el libro de jugadas).
PLAY RECAP ********************************************************************
master : ok=12 changed=10 unreachable=0 failed=0
El siguiente paso es importar su configuración maestro/esclavo a ClusterControl. La forma más fácil y conveniente de instalar ClusterControl es usar el script de instalación proporcionado por Variousnines. Simplemente descargue el script y ejecútelo como usuario root o usuario con permiso sudo root.
$ wget http://www.severalnines.com/downloads/cmon/install-cc
$ chmod +x install-cc
$ ./install-cc # as root or sudo user
Si desea agregar una instalación de ClusterControl a su libro de jugadas, puede usar las siguientes instrucciones.
El siguiente paso es generar una clave SSH que usaremos para configurar el SSH sin contraseña más adelante. Si tiene un par de claves que le gustaría usar, puede omitir la creación de una nueva.
ClusterControl:importar clúster existenteDespués de una instalación exitosa, finalmente puede importar su clúster de prueba recién creado a ClusterControl.
Esperamos que esta publicación de blog le brinde información básica sobre la instalación y configuración de la replicación maestro/esclavo de Ansible MariaDB. Consulte nuestros otros blogs donde presentamos Chef, Puppet, Docker para la base de datos MariaDB y otras implementaciones de clústeres de bases de datos.