Le distribuzioni manuali sono comuni, ma possono essere lente e monotone, se hai mai provato l'installazione di Oracle RAC con la configurazione di Data Guard su più di tre nodi, sai cosa intendo. A seconda del numero di nodi, i passaggi di distribuzione potrebbero richiedere molto tempo e potrebbero verificarsi errori. Naturalmente, ci sono molti buoni "come fare" su come eseguire una configurazione manuale del cluster di database, tuttavia, con l'approccio manuale su larga scala ci sono molte altre domande da affrontare.
Le altre istanze nel mio ambiente sono configurate allo stesso modo? Quel sistema di controllo qualità è stato impostato allo stesso modo della produzione? Se ciò che abbiamo appena distribuito è pronto per la produzione? Per rispondere a tutte queste domande, le implementazioni vengono sempre più automatizzate tramite strumenti di gestione della configurazione.
Risorse correlate Automazione del database con Puppet:distribuzione della replica di MySQL e MariaDB Come automatizzare la distribuzione di MySQL Galera Cluster utilizzando s9s CLI e Chef Come automatizzare la migrazione da MySQL standalone a Galera Cluster utilizzando Ansible ClusterControl per MariaDBGli strumenti di gestione della configurazione più diffusi come Puppet, Chef e Ansible sono tecnologie collaudate per l'implementazione di vari servizi IT. Aiutano a eliminare il lavoro manuale, ridurre al minimo il rischio di errore umano e rendere possibile l'implementazione rapida. Nel blog di oggi daremo un'occhiata a uno di loro.
Ansible è uno strumento di gestione del sistema open source per centralizzare e automatizzare la gestione della configurazione. Con Ansible puoi automatizzare facilmente varie distribuzioni di database ed eseguire semplici attività di amministrazione. Mostreremo come installare e configurare automaticamente software come il server MySQL in ambienti riproducibili. In questo blog ci concentreremo sulla replica di MariaDB, ma se sei interessato ad altre attività, controlla i nostri altri blog dove scriviamo di più su Ansible.
Vagante, Virtualbox e Ansible
Ansible può aiutare a distribuire MySQL Cluster nel cloud o in locale. Ai fini di questo blog, utilizzeremo la popolare configurazione per eseguire vari test su macchine desktop con Vagrant e Virtualbox.
Vagrant è un sistema che permette di creare e spostare facilmente gli ambienti di sviluppo da una macchina all'altra. Definisci semplicemente il tipo di VM che desideri in un file chiamato Vagrantfile e quindi avvialo con un singolo comando. Si integra bene con fornitori di macchine virtuali come VirtualBox, VMware e AWS e ciò che è importante per il nostro compito ha un ottimo supporto di Ansible.
Il nostro Vagrantfile distribuisce 2 istanze sulla piattaforma VirtualBox, una per il nodo master e il secondo nodo slave. Quindi utilizzeremo Ansible per eseguire l'installazione dei pacchetti necessari ed eseguire la configurazione di un master/slave. Di seguito è riportato l'elenco delle attività che andremo a svolgere.
- Installa Vagrant e Virtualbox
- Configura il file vagabondo e il playbook ansible
- Avvia le istanze
- Scarica i relativi box Vagrant e Vagrantfile (questo avviene automaticamente)
- Esegui il playbook di Ansible (questo verrà eseguito automaticamente)
- Aggiungi il cluster a ClusterControl per le attività di monitoraggio e gestione (come backup, sicurezza, gestione degli utenti, gestione delle prestazioni e molte altre).
Installazione di Vagrant, Virtualbox e Ansible su Ubuntu
Installa i pacchetti
sudo apt-get install ansible vagrant virtualbox
Crea file di configurazione per Vagrant e 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
Il file sopra vagrant creerà due macchine con la seguente configurazione:
- Master:2 CPU, 1GB RAM, IP privato:192.168.10.2 Port forward:3336
- Slave:2CPU, 1GB RAM, IP privato:192.168.10.3, Port forward:3337
Struttura del Playbook
In questo passaggio, definiremo il playbook di Ansible. Ansible utilizza YAML come un linguaggio di markup semplice per definire le istruzioni. Creiamo il seguente "maria.yml" basato sul file Ansible fornito da 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
ClusterControlSingle Console per l'intera infrastruttura di databaseScopri cos'altro c'è di nuovo in ClusterControlInstalla ClusterControl GRATIS Ora è il momento delle istanze. Vagrant up attiverà l'installazione del playbook.
$ 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...
Se non hai già scaricato l'immagine di Ubuntu da Virtualbox, Vagrant la scaricherà automaticamente come con l'esempio sopra.
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] **************************************************
Dopo aver installato correttamente il playbook, vedrai il seguente output e dovresti essere in grado di accedere al database con credenziali predefinite (vedi playbook).
PLAY RECAP ********************************************************************
master : ok=12 changed=10 unreachable=0 failed=0
Il passaggio successivo consiste nell'importare la configurazione master/slave in ClusterControl. Il modo più semplice e conveniente per installare ClusterControl consiste nell'utilizzare lo script di installazione fornito da Manynines. Scarica semplicemente lo script ed eseguilo come utente root o utente con autorizzazione root sudo.
$ wget http://www.severalnines.com/downloads/cmon/install-cc
$ chmod +x install-cc
$ ./install-cc # as root or sudo user
Se desideri aggiungere un'installazione ClusterControl al tuo playbook puoi utilizzare le seguenti istruzioni.
Il prossimo passo è generare una chiave SSH che useremo per configurare l'SSH senza password in seguito. Se hai una coppia di chiavi che vorresti utilizzare, puoi saltare la creazione di una nuova.
ClusterControl:importa il cluster esistenteDopo una corretta installazione, puoi finalmente importare il tuo cluster di test appena creato in ClusterControl.
Ci auguriamo che questo post del blog ti abbia fornito informazioni di base sull'installazione e la configurazione della replica master/slave di Ansible MariaDB. Controlla i nostri altri blog in cui presentiamo Chef, Puppet, Docker per il database MariaDB e altre distribuzioni di cluster di database.