MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

So richten Sie die Replikation von MariaDB 10.3 mit Ansible und Vagrant ein

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 Chef

Beliebte 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 importieren

Nach 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.