Les déploiements manuels sont courants, mais ils peuvent être lents et monotones. Si vous avez déjà essayé l'installation d'Oracle RAC avec la configuration de Data Guard sur plus de trois nœuds, vous savez ce que je veux dire. Selon le nombre de nœuds, les étapes de déploiement peuvent prendre du temps et entraîner des erreurs. Bien sûr, il existe de nombreux "comment faire" sur la façon de configurer manuellement un cluster de base de données, cependant, avec l'approche manuelle à grande échelle, il y a de nombreuses questions supplémentaires à résoudre.
Les autres instances de mon environnement sont-elles configurées de la même manière ? Ce système d'assurance qualité a-t-il été mis en place de la même manière que la production ? Ce que nous venons de déployer est-il prêt pour la production ? Pour répondre à toutes ces questions, les déploiements sont de plus en plus automatisés via des outils de gestion de configuration.
Ressources associées Automatisation de la base de données avec Puppet :déploiement de la réplication MySQL et MariaDB Comment automatiser le déploiement du cluster MySQL Galera à l'aide de la CLI s9s et de Chef Comment automatiser la migration de MySQL autonome vers le cluster Galera à l'aide d'Ansible ClusterControl pour MariaDBLes outils de gestion de configuration populaires tels que Puppet, Chef et Ansible sont des technologies éprouvées pour le déploiement de divers services informatiques. Ils contribuent à éliminer le travail manuel, minimisent le risque d'erreur humaine et permettent un déploiement rapide. Dans le blog d'aujourd'hui, nous allons jeter un œil à l'un d'entre eux.
Ansible est un outil de gestion de système open source permettant de centraliser et d'automatiser la gestion de la configuration. Avec Ansible, vous pouvez facilement automatiser divers déploiements de bases de données et effectuer des tâches d'administration simples. Nous montrerons comment installer et configurer automatiquement des logiciels tels que le serveur MySQL dans des environnements reproductibles. Dans ce blog, nous allons nous concentrer sur la réplication MariaDB, mais si vous êtes intéressé par d'autres tâches, veuillez consulter nos autres blogs où nous écrivons plus sur Ansible.
Vagrant, Virtualbox et Ansible
Ansible peut vous aider à déployer MySQL Cluster dans le cloud ou sur site. Pour les besoins de ce blog, nous allons utiliser la configuration populaire pour exécuter divers tests sur des ordinateurs de bureau avec Vagrant et Virtualbox.
Vagrant est un système qui vous permet de créer et de déplacer facilement des environnements de développement d'une machine à une autre. Définissez simplement le type de machine virtuelle que vous voulez dans un fichier appelé Vagrantfile, puis lancez-les avec une seule commande. Il s'intègre bien avec les fournisseurs de machines virtuelles comme VirtualBox, VMware et AWS et, ce qui est important pour notre tâche, il bénéficie d'un excellent support d'Ansible.
Notre Vagrantfile déploie 2 instances sur la plateforme VirtualBox, une pour le nœud maître et le second nœud esclave. Ensuite, nous utiliserons Ansible pour exécuter l'installation des packages nécessaires et exécuter la configuration d'un maître/esclave. Vous trouverez ci-dessous la liste des tâches que nous allons effectuer.
- Installer Vagrant et Virtualbox
- Configurer le fichier vagrant et le playbook ansible
- Lancer les instances
- Téléchargez les boîtes Vagrant et le fichier Vagrant associés (cela se fait automatiquement)
- Lancez Ansible playbook (cela sera fait automatiquement)
- Ajoutez le cluster à ClusterControl pour la tâche de surveillance et de gestion (comme les sauvegardes, la sécurité, la gestion des utilisateurs, la gestion des performances et bien d'autres).
Installation de Vagrant, Virtualbox et Ansible sur Ubuntu
Installer les packages
sudo apt-get install ansible vagrant virtualbox
Créer des fichiers de configuration pour Vagrant et 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
Le fichier vagabond ci-dessus créera deux machines avec la configuration suivante :
- Maître :2 processeurs, 1 Go de RAM, adresse IP privée :192.168.10.2 Transfert de port :3336
- Esclave :2 processeurs, 1 Go de RAM, adresse IP privée :192.168.10.3, transfert de port : 3337
Structure du livre de jeu
Dans cette étape, nous définirons le playbook Ansible. Ansible utilise YAML comme langage de balisage simple pour définir des instructions. Nous créons le "maria.yml" suivant basé sur le fichier Ansible fourni par 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
ClusterControlConsole unique pour l'ensemble de votre infrastructure de base de donnéesDécouvrez les autres nouveautés de ClusterControlInstallez ClusterControl GRATUITEMENT Place maintenant aux instances. Vagrant up déclenchera l'installation du 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...
Si vous n'avez pas déjà téléchargé l'image Ubuntu de Virtualbox, vagrant la téléchargera automatiquement comme dans l'exemple ci-dessus.
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] **************************************************
Après une installation réussie du playbook, vous verrez la sortie suivante et vous devriez pouvoir vous connecter à la base de données avec des informations d'identification prédéfinies (voir playbook).
PLAY RECAP ********************************************************************
master : ok=12 changed=10 unreachable=0 failed=0
L'étape suivante consiste à importer votre configuration maître/esclave dans ClusterControl. Le moyen le plus simple et le plus pratique d'installer ClusterControl est d'utiliser le script d'installation fourni par Manynines. Téléchargez simplement le script et exécutez-le en tant qu'utilisateur root ou utilisateur avec l'autorisation sudo root.
$ wget http://www.severalnines.com/downloads/cmon/install-cc
$ chmod +x install-cc
$ ./install-cc # as root or sudo user
Si vous souhaitez ajouter une installation ClusterControl à votre playbook, vous pouvez utiliser les instructions suivantes.
L'étape suivante consiste à générer une clé SSH que nous utiliserons pour configurer ultérieurement le SSH sans mot de passe. Si vous avez une paire de clés que vous souhaitez utiliser, vous pouvez ignorer la création d'une nouvelle.
ClusterControl :Importer un cluster existantAprès une installation réussie, vous pouvez enfin importer votre cluster de test nouvellement créé dans ClusterControl.
Nous espérons que cet article de blog vous a donné un aperçu de l'installation et de la configuration de base de la réplication maître/esclave Ansible MariaDB. Veuillez consulter nos autres blogs où nous présentons Chef, Puppet, Docker pour la base de données MariaDB et d'autres déploiements de cluster de base de données.