sql >> Databasteknik >  >> RDS >> MariaDB

Hur man ställer in MariaDB 10.3-replikering med Ansible och Vagrant

Manuella distributioner är vanliga, men de kan vara långsamma och monotona, om du någonsin provat Oracle RAC-installation med Data Guard-installation på mer än tre noder, vet du vad jag menar. Beroende på antalet noder kan installationsstegen vara tidsödande och troliga fel. Naturligtvis finns det många bra "how-to's" om hur man gör en manuell databasklusterkonfiguration, men med den manuella metoden på en skala finns det många ytterligare frågor att ta itu med.

Är de andra instanserna i min miljökonfiguration på samma sätt? Var det QA-systemet inrättat på samma sätt som produktionen? Huruvida det vi just implementerade är produktionsklart? För att ta itu med alla dessa frågor automatiseras implementeringar alltmer via verktyg för konfigurationshantering.

Relaterade resurser Databasautomation with Puppet:Implementering av MySQL och MariaDB-replikering Hur man automatiserar distributionen av MySQL Galera Cluster med s9s CLI och Chef Hur automatisera migrering från fristående MySQL till Galera Cluster med Ansible ClusterControl for MariaDB

Populära verktyg för konfigurationshantering som Puppet, Chef och Ansible är beprövade tekniker för att distribuera olika IT-tjänster. De hjälper till att eliminera manuellt arbete, minimera risken för mänskliga misstag och gör det möjligt att implementera snabbt. I dagens blogg ska vi ta en titt på en av dem.

Ansible är ett systemhanteringsverktyg med öppen källkod för att centralisera och automatisera konfigurationshantering. Med Ansible kan du enkelt automatisera olika databasinstallationer och utföra enkla administrationsuppgifter. Vi kommer att visa upp hur man automatiskt installerar och konfigurerar programvara som MySQL-server i reproducerbara miljöer. I den här bloggen kommer vi att fokusera på MariaDB-replikering men om du är intresserad av andra uppgifter vänligen kolla in våra andra bloggar där vi skriver mer om Ansible.

Vagrant, Virtualbox och Ansible

Ansible kan hjälpa till att distribuera MySQL Cluster i molnet eller på plats. För syftet med denna blogg kommer vi att använda den populära installationen för att köra olika tester på stationära datorer med Vagrant och Virtualbox.

Vagrant är ett system som låter dig enkelt skapa och flytta utvecklingsmiljöer från en maskin till en annan. Definiera helt enkelt vilken typ av virtuell dator du vill ha i en fil som heter Vagrantfile och aktivera dem sedan med ett enda kommando. Den integrerar väl med leverantörer av virtuella maskiner som VirtualBox, VMware och AWS och vad som är viktigt för vår uppgift har den ett bra stöd för Ansible.

Vår Vagrantfile distribuerar 2 instanser på VirtualBox-plattformen, en för masternod och andra slavnod. Sedan kommer vi att använda Ansible för att köra den nödvändiga paketinstallationen och utföra konfigurationen av en master/slav. Nedan är listan över uppgifter som vi ska utföra.

  • Installera Vagrant och Virtualbox
  • Konfigurera vagrant-fil och eventuell spelbok
  • Starta instanserna
  • Ladda ner de relaterade Vagrant-lådorna och Vagrantfilen (detta görs automatiskt)
  • Kör Ansible playbook (detta kommer att göras automatiskt)
  • Lägg till klustret i ClusterControl för övervaknings- och hanteringsuppgiften (som säkerhetskopiering, säkerhet, användarhantering, prestandahantering och många andra).

Vagrant, Virtualbox och Ansible Installation på Ubuntu

Installera paket

sudo apt-get install ansible vagrant virtualbox

Skapa konfigurationsfiler för Vagrant och 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

Ovan vagrant-fil kommer att skapa två maskiner med följande konfiguration:

  • Master:2 CPU, 1 GB RAM, Privat IP:192.168.10.2 Port forward:3336
  • Slav:2CPU, 1GB RAM, Privat IP:192.168.10.3, Port forward:3337

Playbook-struktur

I det här steget kommer vi att definiera Ansible playbook. Ansible använder YAML som ett enkelt märkningsspråk för att definiera instruktioner. Vi skapar följande "maria.yml" baserat på Ansible-filen som levererats av 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 för hela din databasinfrastrukturTa reda på vad mer som är nytt i ClusterControlInstallera ClusterControl GRATIS

Nu är det dags för fallen. Vagrant up kommer att utlösa playbook-installation.

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

Om du inte redan har laddat ner en Ubuntu-bild från Virtualbox kommer vagrant att ladda ner den automatiskt som i exemplet ovan.

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] **************************************************

Efter framgångsrik installation av playbook kommer du att se följande utdata och du bör kunna logga in på databasen med fördefinierade referenser (se playbook).

PLAY RECAP ********************************************************************
master                     : ok=12   changed=10   unreachable=0    failed=0 

Nästa steg är att importera din master/slav-konfiguration till ClusterControl. Det enklaste och bekvämaste sättet att installera ClusterControl är att använda installationsskriptet från Severalnines. Ladda bara ner skriptet och kör som root-användare eller användare med sudo root-behörighet.

$ wget http://www.severalnines.com/downloads/cmon/install-cc
$ chmod +x install-cc
$ ./install-cc # as root or sudo user

Om du vill lägga till en ClusterControl-installation till din spelbok kan du använda följande instruktioner.

Nästa steg är att generera en SSH-nyckel som vi kommer att använda för att ställa in den lösenordslösa SSH senare. Om du har ett nyckelpar som du vill använda kan du hoppa över skapandet av ett nytt.

ClusterControl:Importera befintligt kluster

Efter lyckad installation kan du äntligen importera ditt nyskapade testkluster till ClusterControl.

Vi hoppas att det här blogginlägget gav dig insikt i grundläggande installation och installation av Ansible MariaDB master/slave replikering. Kolla in våra andra bloggar där vi presenterar Chef, Puppet, Docker för MariaDB-databas och andra databaskluster.


  1. Hur STR()-funktionen fungerar i SQL Server (T-SQL)

  2. automatisk ökning av primärt lämnar luckor i räkningen

  3. MySQL Performance – 5 parametrar från konfigurationsfilen

  4. Kardinalitetsuppskattning för ett predikat på ett COUNT-uttryck