Manuelle Bereitstellungen sind üblich, aber sie können langsam und eintönig sein. Wenn Sie jemals eine Oracle RAC-Installation mit Data Guard-Setup auf mehr als drei Knoten ausprobiert haben, wissen Sie, was ich meine. Je nach Anzahl der Knoten können die Bereitstellungsschritte zeitraubend und fehleranfällig sein. Natürlich gibt es viele gute Anleitungen zum manuellen Einrichten eines Datenbank-Clusters, aber bei der manuellen Herangehensweise an eine Waage gibt es viele zusätzliche Fragen, die beantwortet werden müssen.
Sind die anderen Instanzen in meiner Umgebung auf die gleiche Weise eingerichtet? War dieses QS-System genauso aufgebaut wie die Produktion? Ob das, was wir gerade bereitgestellt haben, produktionsreif ist? Um all diese Fragen zu beantworten, werden Bereitstellungen zunehmend über Konfigurationsmanagement-Tools automatisiert.
Verwandte Ressourcen Datenbankautomatisierung mit Puppet:Bereitstellen von MySQL- und MariaDB-Replikation Automatisieren der Bereitstellung von MySQL Galera-Clustern mit s9s CLI und ChefBeliebte Konfigurationsmanagement-Tools wie Puppet, Chef und Ansible sind bewährte Technologien für die Bereitstellung verschiedener IT-Services. Sie tragen dazu bei, manuelle Arbeit zu eliminieren, das Risiko menschlicher Fehler zu minimieren und eine schnelle Bereitstellung zu ermöglichen. Im heutigen Blog werden wir uns einen davon ansehen.
Ansible ist ein Open-Source-Systemverwaltungstool zur Zentralisierung und Automatisierung der Konfigurationsverwaltung. Mit Ansible können Sie problemlos verschiedene Datenbankbereitstellungen automatisieren und einfache Verwaltungsaufgaben ausführen. Wir zeigen, wie Software wie MySQL-Server in reproduzierbaren Umgebungen automatisch installiert und konfiguriert wird. In diesem Blog werden wir uns auf die MariaDB-Replikation konzentrieren, aber wenn Sie an anderen Aufgaben interessiert sind, besuchen Sie bitte unsere anderen Blogs, in denen wir mehr über Ansible schreiben.
Vagrant, Virtualbox und Ansible
Ansible kann dabei helfen, MySQL Cluster in der Cloud oder lokal bereitzustellen. Für diesen Blog verwenden wir das beliebte Setup zum Ausführen verschiedener Tests auf Desktop-Rechnern mit Vagrant und Virtualbox.
Vagrant ist ein System, mit dem Sie auf einfache Weise Entwicklungsumgebungen erstellen und von einem Computer auf einen anderen verschieben können. Definieren Sie einfach in einer Datei namens Vagrantfile, welche Art von VM Sie möchten, und starten Sie sie dann mit einem einzigen Befehl. Es lässt sich gut in Anbieter virtueller Maschinen wie VirtualBox, VMware und AWS integrieren und was für unsere Aufgabe wichtig ist, es hat eine großartige Unterstützung von Ansible.
Unser Vagrantfile stellt 2 Instanzen auf der VirtualBox-Plattform bereit, eine für den Master-Knoten und die zweite für den Slave-Knoten. Dann verwenden wir Ansible, um die Installation der erforderlichen Pakete auszuführen und die Konfiguration eines Masters/Slaves auszuführen. Unten ist die Liste der Aufgaben, die wir ausführen werden.
- Installieren Sie Vagrant und Virtualbox
- Vagabundierende Datei und ansibles Playbook konfigurieren
- Starten Sie die Instanzen
- Laden Sie die zugehörigen Vagrant-Boxen und die Vagrant-Datei herunter (dies erfolgt automatisch)
- Ansible-Playbook ausführen (wird automatisch ausgeführt)
- Fügen Sie den Cluster für Überwachungs- und Verwaltungsaufgaben (wie Backups, Sicherheit, Benutzerverwaltung, Leistungsverwaltung und viele andere) zu ClusterControl hinzu.
Installation von Vagrant, Virtualbox und Ansible auf Ubuntu
Pakete installieren
sudo apt-get install ansible vagrant virtualbox
Erstellen Sie Konfigurationsdateien für Vagrant und 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
Die obige Vagrant-Datei erstellt zwei Maschinen mit der folgenden Konfiguration:
- Master:2 CPU, 1 GB RAM, Private IP:192.168.10.2 Portweiterleitung:3336
- Slave:2CPU, 1GB RAM, Private IP:192.168.10.3, Portweiterleitung:3337
Playbook-Struktur
In diesem Schritt definieren wir das Ansible-Playbook. Ansible verwendet YAML als einfache Auszeichnungssprache, um Anweisungen zu definieren. Wir erstellen die folgende „maria.yml“ basierend auf der von Mariadb gelieferten Ansible-Datei.
$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
ClusterControlEine Konsole für Ihre gesamte DatenbankinfrastrukturErfahren Sie, was es sonst noch Neues in ClusterControl gibt. Installieren Sie ClusterControl KOSTENLOS Jetzt ist es Zeit für die Instanzen. Vagrant up löst die Playbook-Installation aus.
$ 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...
Wenn Sie noch kein Ubuntu-Image von Virtualbox heruntergeladen haben, lädt Vagrant es automatisch herunter, wie im obigen Beispiel.
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] **************************************************
Nach erfolgreicher Installation des Playbooks sehen Sie die folgende Ausgabe und Sie sollten sich mit vordefinierten Anmeldeinformationen bei der Datenbank anmelden können (siehe Playbook).
PLAY RECAP ********************************************************************
master : ok=12 changed=10 unreachable=0 failed=0
Im nächsten Schritt importieren Sie Ihre Master/Slave-Konfiguration in ClusterControl. Der einfachste und bequemste Weg, ClusterControl zu installieren, ist die Verwendung des von Multiplenines bereitgestellten Installationsskripts. Laden Sie einfach das Skript herunter und führen Sie es als Root-Benutzer oder Benutzer mit sudo-Root-Berechtigung aus.
$ wget http://www.severalnines.com/downloads/cmon/install-cc
$ chmod +x install-cc
$ ./install-cc # as root or sudo user
Wenn Sie Ihrem Playbook eine ClusterControl-Installation hinzufügen möchten, können Sie die folgenden Anweisungen verwenden.
Der nächste Schritt besteht darin, einen SSH-Schlüssel zu generieren, mit dem wir später das passwortlose SSH einrichten. Wenn Sie ein Schlüsselpaar haben, das Sie verwenden möchten, können Sie die Erstellung eines neuen überspringen.
ClusterControl:Vorhandenen Cluster importierenNach erfolgreicher Installation können Sie endlich Ihr neu erstelltes Testcluster in ClusterControl importieren.
Wir hoffen, dass dieser Blogbeitrag Ihnen einen Einblick in die Grundlagen der Installation und Einrichtung der Ansible MariaDB-Master/Slave-Replikation gegeben hat. Bitte überprüfen Sie unsere anderen Blogs, in denen wir Chef, Puppet, Docker für MariaDB-Datenbanken und andere Datenbank-Cluster-Bereitstellungen vorstellen.